You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Octave求解二元非线性方程 fsolve仅返回初始猜测值如何解决

问题原因及解决方法

1 为什么返回初始猜测值

你选择的初始值[1,-1]本身就是方程组的有效解,代入验证完全满足等于0的求解条件:

  • 第一个方程:-1 + 2*(1)^3 + (-1) = 0
  • 第二个方程:-1 - (-1) = 0
    因此fsolve直接判定收敛,返回该值,并非求解失败。

2 修正数值求解代码

你代码中加载的symbolic包和定义的符号变量没有实际作用,可以删除。如果需要确认求解状态,可以增加输出参数查看收敛结果和残差值:

function f = fax(x)
  f(1) = -x(1) + 2*x(1)^3 + x(2);
  f(2) = -x(1) - x(2); 
endfunction
% 输出参数说明:x是解,fval是残差,info>0代表求解成功
[x, fval, info] = fsolve(@fax, [1,-1])

运行后info返回正值、fval接近0,即可确认求解有效。

3 查找其他解

该方程组总共有3组解析解:

  • [0, 0]
  • [1, -1]
  • [-1, 1]
    fsolve作为数值求解工具,只会收敛到初始值附近的解,如果需要获取其他解,更换对应的初始猜测值即可,比如要获取[-1, 1],可以将初始值设置为[-1, 2]。

4 一次性获取所有解析解

你代码中已经加载了符号计算包,可以直接用符号求解方法一次性拿到全部解,不需要依赖数值迭代:

pkg load symbolic
syms x1 x2
% 定义两个方程
eq1 = -x1 + 2*x1^3 + x2 == 0;
eq2 = -x1 - x2 == 0;
% 求解
sol = solve([eq1, eq2], [x1, x2]);
% 输出所有解
disp('x1的所有解:')
disp(sol.x1)
disp('x2的所有解:')
disp(sol.x2)

内容的提问来源于stack exchange,提问作者wanderer16

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:24:04