1

タイトルが紛らわしい表現で申し訳ありませんが、この問題をいくつかの単語に要約するのは困難です.

特定の方程式の最小値を見つけようとしています。最初に、方程式をループしていますy = .245x^3-.67x^2+5x+12。ループを通る「ステップ」がどんどん小さくなるループを設計したいと思います。

たとえば、最初のループではステップ 1 を使用します。約 30 の値が得られます。ヘルプが必要なのは、この最初のループから受け取った 3 つの最小値をどのように使用するかということです。

最初のループから取得する可能性のある値の例を次に示します (これは実際のコードである必要はまったくないことに注意してください。何が起こっているのかを簡単に説明しただけです)。

loop from x = 1 to 8 with step 1

results:

x = 1 -> y = 30
x = 2 -> y = 28
x = 3 -> y = 25
x = 4 -> y = 21
x = 5 -> y = 18
x = 6 -> y = 22
x = 7 -> y = 27
x = 8 -> y = 33

最低 3 つの値を検出してループを作成できるものが必要です。これらの結果から、y の最小の 3 つの結果を得る x の値はx = 4, 5, and 6です。

したがって、この時点での「推測」は x = 5 になります。より良い「推測」を得るには、次のようなループが必要です。

loop from x = 4 to x = 6 with step .5

x の最小値をとてつもなく正確に推測できるまで、このパターンを続けることができます。

これを行う方法を知っている人はいますか?私が得ようとしている値は、放物線が開くことによってモデル化できることを知っているので、この形式は間違いなく機能します. 値を列に入れることができると考えていました。その列の y の最小値と、対応する x 値を返すものを作成するのは難しくありません。

あいまいすぎる場合はお知らせください。質問があればお答えします。

4

2 に答える 2

1

問題の領域が狭められない限り、これにアプローチする簡単な方法はありません。

実際に与えられた多項式の例には最小値がありません。これは、観察することで簡単に決定できますy'>0(したがって、yは常にWRT xを増加させます)。

の幅広い解釈を考えると

[an]方程式。ここでの目的では、y = .245x ^ 3-.67x ^ 2 + 5x+12のようになります。

ドメインが多項式に制限されていると仮定しても、多くの条件をチェックする必要があります。

多項式の次数は重要であり、次数は、可能な解の数、または解がまったく可能かどうかを確認するために必要な条件を決定します。

この複雑さを考慮しないと、反復アプローチでは、アンダーフローエラー、または反復ステップまたは境界の不幸な選択が原因で、誤った解が生じる可能性があります。

私はここで一生懸命に努力しているのではありません、あなたの考えはきちんとしていると思います。実際には、それはあなたが思っているよりも複雑です。

于 2012-07-21T02:43:08.910 に答える
1

いい質問です。これは、これのためにあなたがすべきだと私が思うことの少なくとも始まりです:

Sub findMin()
    Dim lowest As Integer
    Dim middle As Integer
    Dim highest As Integer
    lowest = 999
    middle = 999
    hightest = 999

    Dim i As Integer
    i = 1
    Do While i < 9
        If (retVal(i) < retVal(lowest)) Then
            highest = middle
            middle = lowest
            lowest = i
        Else
            If (retVal(i) < retVal(middle)) Then
                highest = middle
                middle = i
            Else
                If (retVal(i) < retVal(highest)) Then
                    highest = i
                End If
            End If
        End If
    i = i + 1
    Loop
End Sub

Function retVal(num As Integer) As Double
    retVal = 0.245 * Math.Sqr(num) * num - 0.67 * Math.Sqr(num) + 5 * num + 12
End Function

ここで行ったことは、3 つの最小値 (最低、中間、最高) として 3 つの整数を設定することです。数式 (ここでは retVal 関数) に挿入する値をループし、retVal の戻り値 (名前の由来) を retVal(lowest)、retVal(middle)、および retVal(highest) の値と比較します。 、必要に応じて置き換えます。私は VBA を始めたばかりなので、私が行ったことはあまり洗練されていない可能性がありますが、少なくとも関数の最小値をもたらす整数を識別します。機能させるには、最低、中、最高の値を少しいじる必要があるかもしれません。これがまさにあなたが探しているものではないことはわかっていますが、それはあなたがすべきだと私が考えることに沿ったものです.

于 2012-07-21T00:50:08.197 に答える