0

如何使用 Excel VBA 找到方程的最小值?

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

有没有一种方法可以适用于更复杂的方程?

感谢您的帮助!

编辑:更多细节

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

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

您多次这样做以进行衰减,然后将它们全部加起来。我需要我的程序做的是慢慢增加和减少这个常数,直到我可以找到一个最小值,当我使用这个衰减将所有时间的残差平方结果相加时得到的值。具有最小值的残差平方具有我想要的常数的值。

我已经起草了一个程序来完成所有的计算等等。我只是不确定如何找到这个最小值。我确定如果一种方法适用于 y = x^2 + 1 之类的东西,我可以对其进行调整以适应我的需要。

4

1 回答 1

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
于 2012-07-10T22:36:10.690 回答