2014-11-05 68 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