我需要一些帮助来设计一个程序,它将使用VBA Excel执行最小化

时间:2012-07-10 21:10:41

标签: excel vba loops excel-vba

如何使用Excel VBA查找等式的最小值?

例如,如果我有等式y = 2x ^ 2 + 14,我想做一个循环,它会慢慢增加/减少x的值,直到它找到y可能的最小值,然后让我知道x的对应值是什么,我该怎么做呢?

是否有一种方法适用于更复杂的方程式?

感谢您的帮助!

编辑:更多详情

我正在设计一个程序,它将找到绘制核衰变所需的某个常数。这个常数是一个等式的一部分,它让我得到一个计算的衰变。我将这个计算的衰减与测得的衰减进行比较。然而,当衰变发生时,常数会稍微变化,这意味着我必须使用一个称为残差平方的东西来找到最适合整个衰变的常数,以使我的计算衰减尽可能准确。

它的工作原理是(测量衰变 - 计算衰减)^ 2

你多次为腐烂做这件事,然后把它们全部加起来。我需要我的程序做的是慢慢增加和减少这个常数,直到我找到一个最小值,当我使用这个衰减累加残差平方结果时得到的值。具有最小值的残差平方具有我想要的常数值。

我已经起草了一个完成所有计算的程序。我只是不确定如何找到这个最小值。我敢肯定,如果一个方法适用于y = x ^ 2 + 1之类的东西,我可以根据自己的需要调整它。

1 个答案:

答案 0 :(得分:0)

在循环时测试输出以查找最小的输出结果。

这是一个例子:

Sub FormulaLoop()

    Dim x As Double
    Dim y As Double
    Dim yBest As Double

        x = 1
        y = (x ^ 2) + 14
        yBest = y

    For x = 2 To 100
         y = (x ^ 2) + 14
         If y < yBest Then
            yBest = y
         End If
    Next x

    MsgBox "The smallest output of y was: " & yBest

End Sub

如果你想循环构成x的两个变量的所有可能性,那么我建议以这种格式循环:

Sub FormulaLoop_v2()

    Dim MeasuredDecay  As Double
    Dim CalculatedDecay As Double
    Dim y As Double
    Dim yBest As Double

        MeasuredDecay = 1
        CalculatedDecay = 1
        y = ((MeasuredDecay - CalculatedDecay) ^ 2) + 14
        yBest = y

    For MeasuredDecay = 2 To 100
        For CalculatedDecay = 2 To 100
            y = ((MeasuredDecay - CalculatedDecay) ^ 2) + 14
            If y < yBest Then
               yBest = y
            End If
         Next CalculatedDecay
    Next MeasuredDecay

    MsgBox "The smallest output of y was: " & yBest

End Sub