deconv(多项式除法)
在 MATLAB 中,deconv
函数用于实现多项式除法,其核心是找到商多项式 \(q(x)\) 和余式 \(r(x)\),满足 “被除式 = 除式 × 商 + 余式”(即 \(n(x) = d(x) \cdot q(x) + r(x)\)),且余式的次数必须低于除式的次数。以下结合具体示例,从数学原理到计算步骤详细讲解:
一、多项式除法的数学原理
对于两个多项式:
- 被除式 \(n(x)\)(次数为 m),系数向量为 n(降幂排列,长度 \(m+1\));
- 除式 \(d(x)\)(次数为 k),系数向量为 d(降幂排列,长度 \(k+1\));
多项式除法的目标是找到:
- 商多项式 \(q(x)\)(次数为 \(m - k\),当 \(m \geq k\) 时),系数向量为 q;
- 余式 \(r(x)\)(次数 < k),系数向量为 r;
满足:\(n(x) = d(x) \cdot q(x) + r(x)\)
步骤 3:用deconv
函数验证
在 MATLAB 中,[q, r] = deconv(n, d)
直接返回商和余式的系数向量:
n = [2, 3, 4, 5]; % 被除式 2x³ + 3x² + 4x + 5
d = [1, 1]; % 除式 x + 1
[q, r] = deconv(n, d); % 计算商和余式disp("商多项式系数 q:"); disp(q); % 输出 [2, 1, 3](对应2x² + x + 3)
disp("余式系数 r:"); disp(r); % 输出 [2](对应常数项2)
步骤 4:验证 “被除式 = 除式 × 商 + 余式”
通过多项式乘法(conv
)和加法验证等式成立:
- 除式 × 商:\(d(x) \cdot q(x) = (x + 1)(2x^2 + x + 3) = 2x^3 + 3x^2 + 4x + 3\)(系数向量
conv(d, q) = [2, 3, 4, 3]
); - 加上余式:\(2x^3 + 3x^2 + 4x + 3 + 2 = 2x^3 + 3x^2 + 4x + 5\)(与被除式一致)。
MATLAB 代码验证:
check = conv(d, q) + [r, 0, 0, 0]; % 余式补0对齐长度,再相加
disp("验证被除式:"); disp(check); % 输出 [2, 3, 4, 5](与n一致)
三、deconv
函数的核心逻辑
deconv
是 conv
(多项式乘法)的逆运算,其本质是通过解线性方程组求商和余式:
- 设商 q 的系数为 \([q_0, q_1, \dots, q_{m-k}]\),余式 r 的系数为 \([r_0, r_1, \dots, r_{k-1}]\);
- 根据 “\(n = \text{conv}(d, q) + r_{\text{pad}}\)”(\(r_{\text{pad}}\) 是补 0 后的余式),建立关于 q 和 r 的线性方程,求解得到系数。
四、注意事项
- 系数向量格式:输入的 n 和 d 必须是降幂排列的系数向量,缺项需补 0(例如 \(d(x) = x^2 + 1\) 需表示为
[1, 0, 1]
)。 - 除式首项系数:d 的第一个元素(最高次项系数)不能为 0,否则会导致除法无意义(类似 “除数不能为 0”)。
- 余式次数:余式 r 的系数向量长度一定小于 d 的长度(保证次数低于除式)。
- 被除式次数低于除式:若 n 的次数 < d 的次数,则商 \(q = []\)(空向量),余式 \(r = n\)(被除式本身)。
总结
deconv(n, d)
通过多项式长除法的逻辑,计算被除式 \(n(x)\) 除以除式 \(d(x)\) 的商 \(q(x)\) 和余式 \(r(x)\),核心是满足 “\(n(x) = d(x) \cdot q(x) + r(x)\)” 且余式次数低于除式。该函数是多项式运算中 “除法” 的基础工具,与 conv
(乘法)形成互逆操作。