Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
在VBA函数*中调用excel解算器而不*直接引用单元格?_Excel_Vba_Solver - Fatal编程技术网

在VBA函数*中调用excel解算器而不*直接引用单元格?

在VBA函数*中调用excel解算器而不*直接引用单元格?,excel,vba,solver,Excel,Vba,Solver,如何在不引用现有单元格的情况下调用VBA函数中的解算器?我不想为这些纯粹的中间参数保留单元格 Public Function calcSomething(param1 As Double, param2 As Double) As Double ' do something ' need to invoke solver to obtain some intermediate params Dim intermediate_param As Double 'hopefully shoul

如何在不引用现有单元格的情况下调用VBA函数中的解算器?我不想为这些纯粹的中间参数保留单元格

Public Function calcSomething(param1 As Double, param2 As Double) As Double
' do something
' need to invoke solver to obtain some intermediate params
    Dim intermediate_param As Double
'hopefully should be like intermediate_param = calcWithSolver(param1, param2)
'do something
End Function

Public Function calcWithSolver(param1 As Double, param2 As Double) As Double
' how to call solver here without direct reference to existing cells?
End Function

我在网上找到的使用
SolverAdd
函数的教程似乎都需要引用已经存在的单元格。有什么方法可以避免这种情况吗?

作为替代方法,您可以尝试使用这种非常简单的解算器,它使用对分方法,适用于大多数甚至复杂的情况

它没有excel解算器的灵活性,并且无法处理跨工作簿的深度嵌套引用(您的解决方案参数需要在单个单元格中唯一定义)。但如果您可以安排,它具有自动计算表格的优势,这是Excel解算器无法实现的

还可以修改代码,通过更改平分条件来查找最大值和最小值(用户练习)

然后是函数调用

=Bisect(A1, 2, "B1", 1, 2)

求解值为1和2之间的方程式2ln(x)+x=2,将x=1.370的答案返回到小数点后三位的默认公差。

如果输入和输出之间不进行计算,solver将如何求解您的模型?@TimWilliams我正在考虑提供初始猜测、约束条件,VBA函数中的目标函数等,而不必显式地将它们写入工作表,就像我们使用Python或MATLAB Optimizers所做的那样。但我不确定这是否可行。我认为内置的解算器不可行。相关人士:谢谢。不幸的是,我的问题不仅仅是要优化一个参数,所以我不得不求助于更复杂的优化方法。
=2*LN(B1) + B1
=Bisect(A1, 2, "B1", 1, 2)