我试图用fsolve求解一个非线性方程组;让我们说
F(x; lambda)= 0,其中lambda是参数的向量,x是我想要求解的向量。
我正在使用Matlab的fsolve。
我有2个参数lambda值,我想解决系统问题。对于lambda的一个值,我得到一个解决方案,这似乎没问题。
对于lambda的另一个值我再次得到一个解决方案(matlab以1的标志退出。但是我知道这不是一个实际的解决方案例如我知道x的某些维度必须彼此相等,在我从fsolve获得的解决方案中并非如此。
我尝试了信任区域和levenberg-marquardt算法,但我没有得到任何更好的结果。 (明确强制那些x是相同的,似乎仍然提供与我期望从系统属性中得到的解决方案)
我的问题是:fsolve使用的算法是否取决于系统的任何稳定性?可能是在上面提到的第二种情况下更改参数lambda,我使系统不稳定,并且可能使fsolve很难正确解决它吗?
谢谢你,乔治
答案 0 :(得分:1)
fsolve并非“失败” - 正如jucestain评论的那样,它给你一个局部最小值,这不一定是全局最小值。这就是它的目的。
要提高获得全球最低要求的机会,您需要:
知道您的初步猜测是好的
使用初始猜测网格多次运行优化,并选择最佳结果
添加约束以防止求解器偏离您知道具有局部最小值的区域
修改费用功能以删除本地最小值
如果您遇到过能够保证全球最低限度的非线性求解器,请告诉我们!