Matlab的fsolve收敛*但*似乎给出了错误的解决方案

时间:2013-03-19 00:22:51

标签: matlab nonlinear-functions stability convergence

我试图用fsolve求解一个非线性方程组;让我们说

F(x; lambda)= 0,其中lambda是参数的向量,x是我想要求解的向量。

我正在使用Matlab的fsolve。

我有2个参数lambda值,我想解决系统问题。对于lambda的一个值,我得到一个解决方案,这似乎没问题。

对于lambda的另一个值我再次得到一个解决方案(matlab以1的标志退出。但是我知道这不是一个实际的解决方案例如我知道x的某些维度必须彼此相等,在我从fsolve获得的解决方案中并非如此。

我尝试了信任区域和levenberg-marquardt算法,但我没有得到任何更好的结果。 (明确强制那些x是相同的,似乎仍然提供与我期望从系统属性中得到的解决方案)

我的问题是:fsolve使用的算法是否取决于系统的任何稳定性?可能是在上面提到的第二种情况下更改参数lambda,我使系统不稳定,并且可能使fsolve很难正确解决它吗?

谢谢你,乔治

1 个答案:

答案 0 :(得分:1)

fsolve并非“失败” - 正如jucestain评论的那样,它给你一个局部最小值,这不一定是全局最小值。这就是它的目的。

要提高获得全球最低要求的机会,您需要:

  • 知道您的初步猜测是好的

  • 使用初始猜测网格多次运行优化,并选择最佳结果

  • 添加约束以防止求解器偏离您知道具有局部最小值的区域

  • 修改费用功能以删除本地最小值

如果您遇到过能够保证全球最低限度的非线性求解器,请告诉我们!