如何有效地找到求解非线性方程的起点?

计算科学 matlab 非线性方程
2021-12-10 07:30:12

我有以下方程(Kurz-Giovanola-Trivedi 模型 [ 1 ]) 其中 , ,为指数积分函数,是未知数,其他一切都是常数。为了求解这个方程,我使用 MATLAB(核心函数是)并假设是一个范围内的数组

v2π2ΓP2D2+vmC0(1k)ξD[1(1k)Iv(P)]+G=0,
Iv(P)=Pexp(P)E(P)P=Rv2DE(P)=Pexp(x)xdxξ=12k[1+(2πP)2]121+2kvRfzerov(102;102)fzero函数试图找到一个具有一个变量的方程的零点,并且可以使用一元素起点或二元素向量(起始区间)调用该函数。

我的问题是:如何有效地找到起点?

我从求解这个相对于的方程开始,通过试错法数组的不同间隔的起始点找到之后,很容易找到PP0vPR

但是,现在我需要直接求解相对于的方程,而不需要步。试错法在这里不是最好的选择,可能是由于依赖的类型(请参见下文)。RPR(v)

在此处输入图像描述

1个回答

我建议使用全局优化求解器。

您应该能够解决这个问题,或者至少尝试使用 YALMIP 下的 BMIBNB 全局优化求解https://yalmip.github.io/solver/bmibnb/ https://yalmip.github.io/tutorial/basics/ 下MATLAB。

特别注意YALMIP支持指数积分,expint,https: //yalmip.github.io/command/expint/

对于这个问题:

将变量 v 和 R 声明为 sdpvar。

输入方程,以及变量的下限和上限,都在 [] 内,作为优化命令的第一个参数中的约束

将目标设置为 [] 作为优化命令中的第二个参数。

使用 sdpsettings 作为优化命令中的第三个参数,将“bmibnb”设置为求解器。

您不需要起始值。您将需要在 MATLAB 下安装一个本地非线性求解器,该求解器将由 BMIBNB 调用,以及一个 MILP(混合整数线性规划)求解器将由 BMIBNB 调用。