2014-11-05 69 views
0

說我有一個變量X可以AB之間各不相同,我有一個數學函數fX變化。在X=A,f爲正數,在X=B,f爲負數,但在X=AX=B之間存在最佳點,其中f=0並且這是我試圖找到的這個點。請注意,f值因數量不同而異。使用VBA做約束最小化

目前我正在做的是在X=AX=B之間迭代並計算我的f並查看它是否接近於零。這是不行的,因爲如果我的迭代步驟很大,f接近零,如果我的步驟很小,程序永遠不會結束運行。還有其他更好的方法可以想到嗎?我正在使用Excel在vba中編寫我的代碼。

+0

您可以使用內置的求解器加載項(Excel-> Options-> Addins-> Manage Addins-> Solver)。您可能需要根據當前的VBA設置啓用參考。 – Michael 2014-11-05 05:15:35

+0

如果我使用解算器,代碼將會是什麼樣子? (以X,Y,A,B和f表示) – 2014-11-05 05:16:59

+0

不用看現在的實際電子表格就可以說。你可能不會有A&B,因爲這些只是X和Y變量的初始值;所以你會有X,Y和F。我會把這個公式放在你的電子表格中,所以改變X或者Y會改變f,然後使用Macro錄製器來查看錄製的解算器代碼的外觀和修改。 – Michael 2014-11-05 05:19:11

回答

0

下面是使用Excel的求解器插件根據單元格A2(對於X)和B2(對於Y)中函數的變量在單元格C2中查找函數的「0」值的子模塊。如果C2設置正確,則更改A2或B2將更改C2中的值(您需要讓C2實際上依賴於A2和/或B2,並且A2和B2必須是獨立的)。

要安裝插件,請確保您轉至文件 - >選項 - >加載項 - >管理,並確保已選中求解器。接下來,打開VBA編輯器(Alt + F11),選擇工具 - >參考並搜索求解器(對我來說,它大約是8下來,並沒有被選中)。選中此框以使用VBA代碼中的參考。

Sub findZero() 
' 
' users solver to find the 0 point of a multi-variable function in cell C2 with variables in cell A2 & B2 
' 
SolverOk SetCell:="C2", MaxMinVal:=5, ValueOf:=0, ByChange:="A2:B2", Engine:=1, EngineDesc:="GRG Nonlinear" 

'Following from http://stackoverflow.com/questions/3984584/catch-max-time-iteration-dialog-box-when-using-excel-solver-in-vba/4049124#4049124 
Results = SolverSolve(True, "SolverIteration") 
Select Case Results 
    Case 0, 1, 2 
     ' solution found, keep final values 
     SolverFinish KeepFinal:=1 
    Case 4 
     'Target does not converge 
     'Your code here 
    Case 5 
     'Solver could not find a feasible solution 
     'Your code here 
    Case Else 
     'Your code 
    End Select 
End Sub