2

我正在尝试使用 fsolve 求解非线性方程组;让我们说

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

我正在使用 Matlab 的 fsolve。

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

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

我已经尝试过 trust-region 和 levenberg-marquardt 算法,但没有得到更好的结果。(明确强制那些 x 相同,似乎仍然给出的解决方案与我对系统属性的期望不一致)

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

谢谢你,乔治

4

1 回答 1

1

fsolve 不是“失败” - 正如 jucestain 评论的那样,它为您提供了一个局部最小值,这不一定是全局最小值。这就是它的设计目的。

为了提高获得全局最小值的机会,您需要:

  • 知道你最初的猜测是好的

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

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

  • 修改您的成本函数以删除局部最小值

如果您遇到可以保证全局最小值的非线性求解器,请告诉我们!

于 2013-04-02T05:05:27.170 回答