使用VBA进行约束最小化

时间:2014-11-05 05:08:13

标签: excel vba

假设我的变量X可能会在AB之间变化,我的数学函数fX而变化。在X=Af为正数,X=Bf为负,但X=AX=B之间存在最佳点{{1}而且这是我想要找到的这个地方。请注意,f=0值因数字而异。

目前我正在做的是在fX=A之间进行迭代并计算我的X=B并查看它是否接近于零。这没有用,因为如果我的迭代步骤很大,f不接近零,如果我的步骤很小,程序永远不会运行。还有其他更好的方法可以想到吗?我在excel中用vba编写代码。

1 个答案:

答案 0 :(得分:0)

下面是子模块,它将使用Excel的Solver Addin根据单元格A2(对于X)和B2(对于Y)中的函数的变量,在单元格C2中查找函数的“0”值。如果C2设置正确,更改A2或B2将改变C2中的值(您需要C2实际上依赖于A2和/或B2,A2和B2必须是独立的。)

要安装插件,请务必转到文件 - >选项 - >加载项 - >管理并确保选中了解算器。接下来,打开VBA编辑器(Alt + F11),选择Tools-> References并搜索Solver(对我来说,它大约是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