Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 我在这个双变量优化程序中遇到了溢出问题_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 我在这个双变量优化程序中遇到了溢出问题

Vba 我在这个双变量优化程序中遇到了溢出问题,vba,excel,excel-2010,Vba,Excel,Excel 2010,首先,以下是我到目前为止的情况: 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

首先,以下是我到目前为止的情况:

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
这个程序应该找到x和k的值,以便最小化y的值。这是一个更复杂的程序的实践,它将使用相同的概念。在我的实际程序中,y、k和x都将大于零,但由于很难想出一个简单的方程,其结果将是抛物线形状的开放式,我决定允许这个练习程序的否定答案

基本上,它应该在方程之间来回跳转,找到x和k的理想值,直到最后使用x和k的理想答案得到y的最小答案。我不确定实际答案是什么,所以我让它停在10的范围内。如果可行的话,我会把它缩小,但我不希望这个程序永远运行下去,以防万一


我的问题是:我不断地得到溢出错误!我试图将xmin和kmin的值四舍五入到小数点后的三位数,但似乎没有帮助。我用错了吗?有人能帮我让这个程序工作吗?

你在做一个零除运算。xmin=0,k=0,xmin+k^2=0。我不知道为什么它不报告零除法


建议:使用“局部变量”窗格查看局部变量的值。您还可以使用“监视”窗格查看要监视的表达式的值。

当我从-1000步进到正1000时,出现了一个被零除的错误。但我把它改成了-100,然后它就消失了,所以我认为这不是问题所在,但我可能错了。我在do-while循环之前设置了这些值,以防止这种情况发生。但我认为如果它是一个除以零的错误,它会告诉我,因为这是一个特定的错误。相反,当我把舍入表达式作为注释时,它会给我一个溢出错误,当我不把它们作为注释时,它会给我一个数据不匹配错误。我不知道当地人和手表!非常有用。您可能在Do..While之前设置了xmin,但它在第一个For循环中被更改。您必须查看第二个For循环中的值,实际发生错误的地方。我在帖子中列出的值就是代码中该点的值。在即时窗格中设置xmin=1允许代码继续。你从-1000步到10000步到哪里?对不起,我忘了我将其更改为0到1000以简化事情!所以我可以通过让它从1开始而不是从0开始来解决这个问题吗?在第二个For循环中?对于k=1到1000,步骤0.1?是的,如果你想这样做的话。VBA有一个Round函数。为什么要使用应用程序。评估?因为。另外,使用Application.WorksheetFunction.round可能会更清晰一些。您是否考虑过为此使用解算器?我会使用解算器,但是我需要用这个基本的想法来评估这个庞大的系列,而我不能用解算器。所以这更像是一个概念验证计划。