MATLAB解一元二次方程,其实比你想象的简单得多。就拿 x² - 3x + 1 = 0 为例,2026年我用四种不同方式帮你在几秒钟内得到精确解,还能顺带画个直观的图。
MATLAB里有个专门用来求多项式根的函数叫 roots。你只需要把方程的系数按顺序放进一个向量里,就能一次性算出所有根。
p = [1 -3 1]; % 系数:x^2 - 3x + 1
x = roots(p)
输出结果是两个实数解:x =
2.6180
0.3820
为什么这么快?因为 roots内部用的是基于特征值的算法,不需要迭代,稳定性很高。如果你只是想快速拿到结果,这个方法几乎是最省事的。fzero是MATLAB里用来求单变量非线性方程实根的函数。它需要一个初始猜测值,然后在这个值附近找根。
f = @(x) x^2 - 3*x + 1;
x1 = fzero(f, 0.5)
x2 = fzero(f, 2.5)
输出:x1 = 0.381966
x2 = 2.618034
它的优势在于,你可以指定在哪个区间或初值附近找根,非常适合有多个根但只关心某一个的场景。不过要注意,如果初值选得太离谱,可能会错过根。fsolve来自MATLAB的优化工具箱,本质上是通过迭代法逼近方程的根。它不仅能解单个方程,还能解多元方程组。
f = @(x) x^2 - 3*x + 1;
x1 = fsolve(f, 0.5, optimset('Display', 'off'))
x2 = fsolve(f, 2.5, optimset('Display', 'off'))
结果和方法二几乎一致:x1 = 0.381966
x2 = 2.618034
fsolve的强大之处在于,它可以处理更复杂的非线性问题,比如带有约束条件的方程组。虽然速度比 roots慢一点,但适用范围更广。如果你想看到方程的解析表达式,而不是数值解,那就用 solve。它会返回一个符号结果,你可以随时转换成数值。
syms x
x = solve(x^2 - 3*x + 1 == 0)
x_num = double(x)
输出:x =
3/2 - sqrt(5)/2
3/2 + sqrt(5)/2
数值化后:x_num =
0.381966
2.618034
符号解的好处是,你可以直接在后续公式里代入,而不必担心精度损失。光算根不够直观,我们可以把方程画出来,让根的位置一目了然。
x = -5:0.1:5;
y1 = x.^2 - 3*x + 1;
y2 = zeros(size(x));
plot(x, y1, x, y2, '--')
grid on
这张图里,曲线和横轴的交点,就是方程的实根。你会发现,它们正好对应前面算出来的 0.382和 2.618。
如果你只是临时算个二次方程,用 roots就够了,几秒钟搞定。如果是工程项目,可能需要结合 fzero或 fsolve来精细控制。要是你在写论文或推导公式,solve的符号解会让过程更严谨。
2026年的MATLAB在数值计算上已经非常成熟,选对方法,能省不少时间。你现在手头有方程要解吗?我可以帮你直接挑最合适的办法。
我可以帮你把这篇文章再扩展成一个 《MATLAB方程求解全攻略》,把一次、二次、高次、非线性、多元方程组的解法都覆盖,这样更容易被百度收录。你要我帮你做吗?武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。