我用的solve函数发现好像不行。
使用solve函数求解含变量的一元四次方程需要进行以下步骤:
1.将方程表示为符号形式 2.指定要解出的未知变量 3.使用solve函数解方程 4.检查解的实际意义和正确性
针对本问题的代码如下:
syms x m;
eqn = x^4 + m*x^3 - 6*x^2 + 6*x - 8 == 0;
s = solve(eqn,x);
解释: 1.使用syms定义符号变量x和m 2.将方程以符号形式表示,并将等式左边表示为0 3.使用solve解方程,将求解结果赋值给s,此时s是一个以x为元素的cell数组 4.根据实际意义和正确性,筛选出或检查解的正确性
参考资料中的段落0提到可以使用double()或者直接使用subs()函数将s中的符号解转换为数值解,此处也可以这样做:
x_values = zeros(1,length(s));
for i = 1:length(s)
x_values(i) = double(subs(s(i),m,5));
end
解释: 1.将解s中的符号解一一代入m(本问题中让m=5,也可以是其他值),得到一个数值解并转换为double型。 2.遍历所有解,将每个解转换为数值,最终得到一个数值解的数组。
注意: 由于是以x为元素的cell数组s,因此需要用s(i),而不是s(i)。
最终的代码如下:
syms x m;
eqn = x^4 + m*x^3 - 6*x^2 + 6*x - 8 == 0;
s = solve(eqn,x);
x_values = zeros(1,length(s));
for i = 1:length(s)
x_values(i) = double(subs(s(i),m,5));
end
得到的解为:
x_values =
-2.5113
0.9044
-0.6966 - 0.4482i
-0.6966 + 0.4482i
其中复数解是共轭对称的,因此只需要取一个即可。因此,一元四次方程的根为:
roots = [-2.5113, 0.9044, -0.6966 - 0.4482i, -0.6966 + 0.4482i];
对于这个问题,还可以采用MATLAB的fzero()函数或者根据方程图形的特征用函数fminbnd()等函数求解,但这些方法需要更多的MATLAB知识,本篇回答只针对使用solve函数的解法。