Octave中用fsolve求解联立方程仅得一个解,如何获取全部根?
问题原因与解决办法
为什么只得到(0,0)这个解
fsolve是迭代式的数值求解器,它从你给定的初始猜测值出发,寻找附近的局部解。你把初始值设为[0;0],它自然就收敛到离这个点最近的(0,0)解,不会主动去寻找其他可能的解。
如何得到另外两个解
要找到(1,-1)和(-1,1),你需要给fsolve设置更接近这两个解的初始猜测值:
比如找(1,-1):
fsolve("f", [1; -1])
运行后会输出:
x = 1.0000 -1.0000
找(-1,1):
fsolve("f", [-1; 1])
运行后会输出:
x = -1.0000 1.0000
补充说明
对于这种多解的非线性方程组,数值求解器无法一次性找出所有解,必须通过设置不同的初始点,去定位不同的解。如果不确定初始点范围,也可以先通过代数方法分析方程的解的分布,再针对性设置初始值。比如你的方程组可以先从y2=0推出x2=-x1,代入y1=0得到:-x1 + 2x1³ -x1 = 0 → 2x1³ -2x1=0 → 2x1(x1²-1)=0,直接就能算出x1=0、1、-1,对应x2=0、-1、1,这样也能提前知道解的位置,再用数值方法验证。
内容的提问来源于stack exchange,提问作者sumit_singh
相关产品推荐
相关产品推荐

