当前位置: 主页 > 生物技术 > 软件工具与数据库 > 编程与数值计算

MATLAB多项式求根与多项式操作

2026-04-05 12:00 admin Internet 阅读 0
核心摘要: 在科学研究和工程应用中 求解多项式的根 即使多项式为零的变量值 是一个常见问题 MATLAB提供了强大的多项式处理工具 能够高效地完成多项式求根 根据根构造多项式以及其他相关操作 一 MATLAB中的

在科学研究和工程应用中,求解多项式的根(即使多项式为零的变量值)是一个常见问题。MATLAB提供了强大的多项式处理工具,能够高效地完成多项式求根、根据根构造多项式以及其他相关操作。

一、MATLAB中的多项式表示

在MATLAB中,多项式用一个行向量表示,其系数按降幂顺序排列。

示例:多项式输入

对于多项式:
x412x3+0x2+25x+116

在MATLAB中输入如下:

matlab
>> p = [1 -12 0 25 116]

输出:

text
p =
     1   -12     0    25   116

重要提示:必须包含零系数项(如上例中的 $0x^2$)。MATLAB无法自动识别缺失的项,除非明确用零表示。


二、多项式求根:roots函数

使用 roots 函数可以求出多项式的所有根。

matlab
>> r = roots(p)

输出:

text
r =
   11.7473         
    2.7028         
   -1.2251 + 1.4672i
   -1.2251 - 1.4672i

结果说明:

  • 该四次多项式有两个实根(11.7473 和 2.7028)

  • 有一对共轭复根(-1.2251 ± 1.4672i)


三、由根构造多项式:poly函数

在MATLAB中,多项式用行向量表示,根用列向量表示。给定多项式的根,可以使用 poly 函数反推出原多项式。

matlab
>> pp = poly(r)

输出:

text
pp =
   1.0e+002 *
   Columns 1 through 4
    0.0100   -0.1200    0.0000    0.2500
   Column 5
    1.1600 + 0.0000i

处理复数误差

当用根重组多项式时,由于截断误差,结果可能产生微小的虚部。这是正常现象,因为MATLAB在复数运算中会产生极小的数值误差。

解决方法:使用 real 函数提取实部,消除虚假的虚部。

matlab
>> pp = real(pp)

输出:

text
pp =
    1.0000  -12.0000    0.0000   25.0000  116.0000

四、多项式操作函数汇总

MATLAB提供了丰富的多项式操作函数:

 
 
函数 功能 示例
roots(p) 求多项式的根 roots([1 -12 0 25 116])
poly(r) 由根构造多项式 poly([11.7473; 2.7028; -1.2251+1.4672i; -1.2251-1.4672i])
polyval(p, x) 计算多项式在给定点的值 polyval([1 -12 0 25 116], 2)
polyvalm(p, A) 计算多项式在矩阵参数下的值 polyvalm([1 -12 0 25 116], A)
conv(p1, p2) 多项式乘法 conv([1 2], [1 3]) → $x^2+5x+6$
deconv(p1, p2) 多项式除法 [q,r] = deconv([1 5 6], [1 2])
polyder(p) 多项式求导 polyder([1 -12 0 25 116])
polyint(p, k) 多项式积分 polyint([1 -12 0 25 116], 0)
polyfit(x, y, n) 多项式曲线拟合 polyfit(x, y, 2)
residue(b, a) 部分分式展开 [r,p,k] = residue([2 1], [1 3 2])

五、完整示例代码

matlab
% 定义多项式系数(降幂排列)
p = [1 -12 0 25 116];

% 显示多项式表达式
disp('多项式:');
poly2str(p, 'x')

% 求多项式的根
r = roots(p);
disp('多项式的根:');
disp(r);

% 由根重新构造多项式
pp = poly(r);
pp = real(pp);  % 消除虚部误差
disp('重构的多项式系数:');
disp(pp);

% 验证:计算多项式在x=0处的值
val = polyval(p, 0);
disp(['p(0) = ', num2str(val)]);

% 绘制多项式曲线
x = -15:0.1:15;
y = polyval(p, x);
plot(x, y, 'b-', 'LineWidth', 2);
hold on;
plot(real(r), zeros(size(r)), 'ro', 'MarkerSize', 8, 'LineWidth', 2);
grid on;
xlabel('x');
ylabel('p(x)');
title('多项式曲线与根的位置');
legend('p(x)', '根');
hold off;

六、注意事项

  1. 系数顺序:多项式系数必须按降幂排列,从最高次项到常数项。

  2. 零系数不可省略:缺失的幂次必须用0填充。

  3. 复数处理:MATLAB无隙处理复数运算,但由根重构多项式时可能产生微小虚部,用 real 函数消除。

  4. 数值精度:高阶多项式可能存在数值不稳定问题,建议对结果进行验证。

    TAGS: 应用
    发表评论