假设我的变量X
可能会在A
和B
之间变化,我的数学函数f
随X
而变化。在X=A
,f
为正数,X=B
,f
为负,但X=A
和X=B
之间存在最佳点{{1}而且这是我想要找到的这个地方。请注意,f=0
值因数字而异。
目前我正在做的是在f
和X=A
之间进行迭代并计算我的X=B
并查看它是否接近于零。这没有用,因为如果我的迭代步骤很大,f
不接近零,如果我的步骤很小,程序永远不会运行。还有其他更好的方法可以想到吗?我在excel中用vba编写代码。
答案 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