MATLAB - 多项式乘法
MATLAB - 现代多项式运算
Section titled “MATLAB - 现代多项式运算”多项式在工程和科学的许多领域中都至关重要,包括信号处理(滤波器)、控制理论(传递函数)和数据分析(曲线拟合)。MATLAB 提供了一种简单高效的方式来处理多项式,即将其表示为其系数向量。
约定俗成地,系数以幂的降序存储在行向量中。例如,多项式 P(x) = 2x³ + 5x - 7 被表示为:
% P(x) = 2*x^3 + 0*x^2 + 5*x - 7P = [2 0 5 -7]; % 注意:缺失的 x² 项需要显式地用零表示!使用 conv 进行多项式乘法
Section titled “使用 conv 进行多项式乘法”两个多项式的乘法在数学上等同于其系数向量的卷积。因此,MATLAB 使用 conv 函数来执行多项式乘法。
示例 1:两个简单多项式的乘法
Section titled “示例 1:两个简单多项式的乘法”让我们将 P(x) = 3x + 2 与 Q(x) = x² - 4x + 5 相乘。
% 定义系数向量P = [3 2]; % 表示 3x + 2Q = [1 -4 5]; % 表示 x^2 - 4x + 5
% 使用卷积执行乘法R_coeffs = conv(P, Q);
disp('结果多项式 R(x) 的系数:');disp(R_coeffs);MATLAB 将执行此操作并显示结果系数:
Coefficients of the resulting polynomial R(x): 3 -10 7 10此结果 [3 -10 7 10] 对应于多项式 R(x) = 3x³ - 10x² + 7x + 10。
示例 2:两个二次多项式的乘法
Section titled “示例 2:两个二次多项式的乘法”让我们将 A(x) = x² + 2x + 3 和 B(x) = 4x² + 5x + 6 相乘。
% 定义多项式的系数A = [1 2 3];B = [4 5 6];
% 执行多项式乘法C = conv(A, B);
disp('结果多项式系数:');disp(C);预期结果是 (x²+2x+3)(4x²+5x+6) = 4x⁴ + 13x³ + 28x² + 27x + 18。MATLAB 的输出证实了这一点:
Resulting polynomial coefficients: 4 13 28 27 18结果验证与测试
Section titled “结果验证与测试”如何确保乘法结果正确?一种简单有效的方法是在一个测试点上评估原始多项式和结果多项式。如果 R(x) = P(x) * Q(x),那么对于任意数值 z,R(z) 必须等于 P(z) * Q(z)。我们可以使用 polyval 函数进行此检查。
% 使用示例 1 中的多项式P = [3 2];Q = [1 -4 5];R_coeffs = conv(P, Q); % [3 -10 7 10]
% 选择一个测试点,例如 x = 2x_test = 2;
% 评估 P(2) 和 Q(2)val_P = polyval(P, x_test); % 3*2 + 2 = 8val_Q = polyval(Q, x_test); % 2^2 - 4*2 + 5 = 1
% 评估 R(2)val_R = polyval(R_coeffs, x_test); % 3*8 - 10*4 + 7*2 + 10 = 8
% 检查结果是否匹配if abs(val_R - (val_P * val_Q)) < 1e-9 % 使用浮点容差 disp('验证成功!');else disp('验证失败!');end这种程序化的检查能够提升您对计算结果的信心,也是一种很好的调试技巧。
除了乘法之外:一系列工具
Section titled “除了乘法之外:一系列工具”MATLAB 提供了一整套用于多项式分析的工具:
deconv(R, P):多项式除法。计算R(x) / P(x)的结果。roots(P):计算多项式的根(零点)。poly(r):根据多项式的根创建多项式。polyfit(x, y, n):对数据点(x, y)进行n次多项式拟合。这是回归分析的基础。polyder(P):计算多项式的导数。polyint(P):计算多项式的积分。
备选方案:符号数学工具箱
Section titled “备选方案:符号数学工具箱”为了更直观、教科书式的操作,您可以使用符号数学工具箱(Symbolic Math Toolbox)。这种方法可读性更强,但对于大型多项式而言,可能比数值 conv 方法慢。
syms x;
% 以符号形式定义多项式P_sym = 3*x + 2;Q_sym = x^2 - 4*x + 5;
% 乘法现在变得很直观R_sym = P_sym * Q_sym;
% 展开以查看完整的多项式expand(R_sym)MATLAB 将返回:
ans =
3*x^3 - 10*x^2 + 7*x + 10