您的系统设置方式,绘制它并观察其行为实际上很方便 . 我向你的函数进行了矢量化并绘制了 f(x) = MLNEfun(x)-x ,其中 MLNE(x) 的输出是 newA . 实际上,您对系统的固定点感兴趣 .
我观察到的是:
在A~3800处有一个奇点和一个根交叉 . 我们可以使用 fzero ,因为它是一个括号中的根求解器,并且在解决方案 fzero(@(x)MLNEfun(x)-x, [3824,3825]) 上给它非常紧的界限,它产生了 3.8243e+03 . 从您的开始猜测开始,这是几个数量级 . 您的系统在~3e5附近没有解决方案 .
Update 在我的匆忙中,我没有放大图,它显示了另一个(表现良好的)根在1.3294e 04.由你决定哪个是物理上有意义的根 . 我在下面说的一切仍然适用 . 在您感兴趣的解决方案附近开始猜测 .
In response to comment 由于你想为 K 的不同值执行此操作,那么你最好的办法就是坚持 fzero ,只要你要求一个变量而不是 fsolve . 这背后的原因是 fsolve 使用牛顿方法的变体,这些方法没有括号,并且很难在像这样的奇点找到解决方案 . 另一方面, fzero 使用布伦特的方法,该方法保证在括号内找到根(如果存在) . 它在奇点附近表现得更好 .
在执行布伦特方法之前,MATLAB的 fzero 的实现也会搜索包围间隔 . 因此,如果您提供足够接近根的单