Matlab 求解命令给出四个方程而不是 2 个实数解

Matlab 求解命令给出四个方程而不是 2 个实数解

我正在尝试求解以下方程:x^4 - 3*x^3 + x^2 - 1通过执行以下操作:solve(x^4 - 3*x^3 + x^2 - 1 == 0)我期望得到两个实数解或四个解,其中两个是实数,两个是虚数:(均为估计值)-0.57、2.68、0.45 + 0.67i、0.45 - 0.67i。但我得到的结果是:

ans =
root(z^4 - 3*z^3 + z^2 - 1, z, 1)
root(z^4 - 3*z^3 + z^2 - 1, z, 2)
root(z^4 - 3*z^3 + z^2 - 1, z, 3)
root(z^4 - 3*z^3 + z^2 - 1, z, 4)

为什么我会得到变量 z 的根,“root(eqation, z, num)”这种格式是什么意思?

答案1

问题在于你使用了符号工具箱,我极力不建议这么做。如果你遇到的是数值问题,请使用数值算法来得到你想要的结果。

通过输入solve(x^4 - 3*x^3 + x^2 - 1 == 0),MATLAB 将简单地声明该方程的根是给定多项式的根,并且它将使用根函数。查看函数的文档以了解其工作原理和作用。请注意,您可以明确找到根,并在调用求解函数时设置多项式的最大次数。还请注意,并非每个多项式都有闭式解。

如果您正在使用多项式(并且只使用多项式),那么使用 MATLAB 的多项式库会更好。查看有关如何创建多项式的文档这里以及如何求多项式的根这里本质上,你定义一个多项式,将其系数保存在一个数组中,然后使用得到(数值)根。

% polynomial p(x)=x^4 - 3*x^3 + x^2 - 1
p = [1 -3 1 0 -1]; % coefficients
roots(p) % roots of polynomial

答案2

我通过执行以下操作解决了该问题

syms x
eqn = x^4 - 3*x^3 + x^2 - 1 == 0;

solved = vpa(solve(eqn, x, 'MaxDegree', 4));

解以方程形式呈现,非常长,而不是没有函数的小数vpa。当我省略时,我无法以任何有用的形式获得解'MaxDegree', 4,因此这对于获得方程的解也是必不可少的。添加'Real', true使得方程只有实数解,如果有人偶然发现同样的问题,会发现这很重要!

相关内容