Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 用VBA实现约束最小化_Excel_Vba - Fatal编程技术网

Excel 用VBA实现约束最小化

Excel 用VBA实现约束最小化,excel,vba,Excel,Vba,假设我有一个变量X,它可以在a和B之间变化,我有一个数学函数f,它随X变化。在X=a时,f为正,在X=B时,f为负,但在X=a和X=B之间有一个最佳点,其中f=0,我正是想找到这个点。请注意,f值的变化幅度很大 目前我正在做的是在X=A和X=B之间迭代,然后计算我的f,看看它是否接近于零。这是行不通的,因为如果我的迭代步骤很大,f不会接近于零,如果我的步骤很小,程序就永远不会运行完。有没有其他更好的办法?我正在excel中用vba编写代码 下面是子模块,它将使用Excel的Solver Addi

假设我有一个变量X,它可以在a和B之间变化,我有一个数学函数f,它随X变化。在X=a时,f为正,在X=B时,f为负,但在X=a和X=B之间有一个最佳点,其中f=0,我正是想找到这个点。请注意,f值的变化幅度很大


目前我正在做的是在X=A和X=B之间迭代,然后计算我的f,看看它是否接近于零。这是行不通的,因为如果我的迭代步骤很大,f不会接近于零,如果我的步骤很小,程序就永远不会运行完。有没有其他更好的办法?我正在excel中用vba编写代码

下面是子模块,它将使用Excel的Solver Addin,根据单元格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

您可以使用内置的求解器外接程序Excel->Options->Addins->Manage Addins->Solver。您可能需要根据当前的VBA设置启用引用。如果使用“解算器”,代码会是什么样子?就X、Y、A、B和f而言,尽管不看您当前拥有的实际电子表格。您可能不会有A&B,因为这些只是X&Y变量的起始值;所以你会有X,Y和f。我会把这个公式放在你的电子表格中,这样改变X或Y都会改变f,然后使用宏记录器查看记录的解算器代码的样子,并从那里进行修改。这有一些有用的信息,说明在VBA中使用时如何抑制解算器对话框