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

Matlab';s fsolve收敛*但*似乎给出了错误的解决方案,matlab,nonlinear-functions,stability,convergence,Matlab,Nonlinear Functions,Stability,Convergence,我试图用fsolve解一个非线性方程组;比方说 F(x;lambda)=0,其中lambda是参数向量,x是我要求解的向量 我正在使用Matlab的fsolve 我有两个参数lambda的值,我想求解系统。对于λ的一个值,我得到了一个解,这似乎是正确的 对于lambda的另一个值,我再次得到一个解(matlab以1的标志退出。但是我知道这不是一个实际的解,例如,我知道x的一些维度必须彼此相等,而我从fsolve得到的解不是这种情况 我尝试过信赖域算法和levenberg-marquardt算法,

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

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

我正在使用Matlab的fsolve

我有两个参数lambda的值,我想求解系统。对于λ的一个值,我得到了一个解,这似乎是正确的

对于lambda的另一个值,我再次得到一个解(matlab以1的标志退出。但是我知道这不是一个实际的解,例如,我知道x的一些维度必须彼此相等,而我从fsolve得到的解不是这种情况

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

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

谢谢你,乔治

fsolve并没有“失败”——正如jucestain所评论的那样,它给了你一个局部最小值,而不一定是全局最小值。这就是它的设计目的

为了提高您获得全球最低工资的机会,您需要:

  • 知道你最初的猜测是正确的

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

  • 添加约束以防止解算器误入已知具有局部极小值的区域

  • 修改成本函数以删除局部极小值


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

非线性问题只会收敛到局部最小值。要收敛到全局最小值,您必须提供一个良好的初始猜测。您是否尝试将假设添加到模型中?例如,添加一个使x维度相等的约束。@nn是的,我知道了,但它似乎没有帮助。我的问题更多的是,是否存在fsolve使用的信赖域算法已知失败的情况