2

まず、これまでに私が持っているものは次のとおりです。

Option Explicit

Dim y As Variant
Dim yforx As Variant
Dim yfork As Variant
Dim ynew As Variant
Dim ymin As Variant
Dim x As Variant
Dim xmin As Variant
Dim k As Variant
Dim kmin As Variant
Dim s As Variant
Dim Z As Variant
Dim Track As Variant


Sub PracticeProgram()

'Selects the right sheet
Sheets("PracticeProgram").Select

'y = k ^ 2 * (x ^ 2 + 2 * x * k - 6) / (x + k) ^ 2

'these are the bounds we are stepping through
Track = 0
x = 1
xmin = 1
k = 1
kmin = 1
y = 100000000
yforx = 100000
yfork = 1000000000

Do
    y = 100000000
    For x = 0 To 1000 Step 0.1
        ynew = kmin ^ 2 * (x ^ 2 + 2 * x * kmin - 6) / (x + kmin) ^ 2

        'This checks the new y-value against an absurdly high y-value we know is wrong. if it is less than this y-value, we keep the x-value that corresponds with it.
        If ynew < y Then
            xmin = x
            y = ynew
            yforx = y
            xmin = Application.Evaluate("=Round(" & xmin & ", 3)")
        Else
        End If

    Next
  MsgBox (yforx)


    For k = 0 To 1000 Step 0.1
        y = k ^ 2 * (xmin ^ 2 + 2 * xmin * k - 6) / (xmin + k) ^ 2
        If ynew < y Then
            kmin = k
            y = ynew
            yfork = y
            kmin = Application.Evaluate("=Round(" & kmin & ",3)")
        Else
        End If
        Next

    MsgBox (yfork)

Loop Until (Abs(yforx - yfork) < 10)

End Sub

このプログラムは、y の値を最小化するために x と k の値を見つけることになっています。これは、これと同じ概念を使用する、より複雑なプログラムのプラクティスです。私の実際のプログラムでは、y、k、x はいずれも 0 より大きくなりますが、結果が放物線の開いた形になるような単純な方程式を考えるのは難しいので、負の答えを許容することにしました。この練習プログラムのために。

基本的に、x と k の両方の理想的な答えを使用して最終的に y の最小の答えが得られるまで、x と k の理想的な値を見つける方程式の間を行き来する必要があります。実際の答えがわからないので、10 の範囲内で停止させています。うまくいったら、小さくしますが、念のため、プログラムを永遠に動かしたくありません。 .

私の問題: オーバーフロー エラーが発生し続けます。xmin と kmin の値を小数点以下 3 桁に丸めようとしていますが、効果がないようです。私はそれらを間違って使用していますか?誰かがこのプログラムを機能させるのを手伝ってくれますか?

4

1 に答える 1

3

あなたはゼロによる除算を行っています。xmin = 0, k = 0, (xmin + k) ^ 2 = 0. (ゼロ除算が報告されない理由がわかりません。)

提案:Localsペインを使用して、ローカル変数の値を確認してください。このペインを使用して、Watch監視する式の値を確認することもできます。

于 2012-12-20T01:01:44.120 に答える