I need some help on designing a program that will perform a minimization using VBA Excel

房东的猫 提交于 2020-01-06 10:51:55

问题


How do I use Excel VBA to find the minimum value of an equation?

For example, if I have the equation y = 2x^2 + 14, and I want to make a loop that will slowly increase/decrease the value of x until it can find the smallest value possible for y, and then let me know what the corresponding value of x is, how would I go about doing that?

Is there a method that would work for much more complicated equations?

Thank you for your help!

Edit: more details

I'm trying to design a program that will find a certain constant needed to graph a nuclear decay. This constant is a part of an equation that gets me a calculated decay. I'm comparing this calculated decay against a measured decay. However, the constant changes very slightly as the decay happens, which means I have to use something called a residual-square to find the best constant to use that will fit the entire decay best to make my calculated decay as accurate as possible.

It works by doing (Measured Decay - Calculated Decay) ^2

You do that for the decay at several times, and add them all up. What I need my program to do is to slowly increase and decrease this constant until I can find a minimum value for the value I get when I add up the residual-squared results for all the times using this decay. The residual-squared that has the smallest value has the value of the constant that I want.

I already drafted a program that does all the calculations and such. I'm just not sure how to find this minimum value. I'm sure if a method works for something like y = x^2 + 1, I can adapt it to work for my needs.


回答1:


Test the output while looping to look for the smallest output result.

Here's an Example:

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

If you want to loop through all the possibilities of two variables that make up x then I'd recommend looping in this format:

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


来源:https://stackoverflow.com/questions/11422004/i-need-some-help-on-designing-a-program-that-will-perform-a-minimization-using-v

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!