conv(多项式乘法)

在 MATLAB 中,conv函数原本用于计算序列的卷积,但由于多项式乘法的数学本质与卷积运算完全一致,因此它被直接用于多项式乘法:两个多项式的系数向量的卷积,就是乘积多项式的系数向量。以下结合具体示例,从数学原理到计算过程详细解释:

一、多项式乘法的本质:合并同类项

多项式乘法的核心是:将两个多项式的每一项分别相乘,再合并同次幂项的系数。

以示例中的多项式为例:

  • \(p_1(x) = x + 1\)(1 次多项式,最高次幂为 \(x^1\))
  • \(p_2(x) = x + 2\)(1 次多项式,最高次幂为 \(x^1\))

它们的乘积为:\(p_1(x) \cdot p_2(x) = (x + 1)(x + 2) = x \cdot x + x \cdot 2 + 1 \cdot x + 1 \cdot 2\)合并同类项(同次幂的项相加):

  • \(x^2\) 项:\(x \cdot x = x^2\)(系数为 \(1 \times 1 = 1\))
  • \(x^1\) 项:\(x \cdot 2 + 1 \cdot x = 2x + x = 3x\)(系数为 \(1 \times 2 + 1 \times 1 = 3\))
  • \(x^0\) 项(常数项):\(1 \cdot 2 = 2\)(系数为 \(1 \times 2 = 2\))

最终乘积多项式为:\(p(x) = x^2 + 3x + 2\),其系数向量(降幂排列)为 [1, 3, 2]

二、卷积运算的定义:序列的加权求和

对于两个序列(向量)\(a = [a_0, a_1, \dots, a_m]\) 和 \(b = [b_0, b_1, \dots, b_n]\),它们的卷积(full 卷积)结果是一个长度为 \(m + n + 1\) 的序列 c,其中第 k 个元素 \(c_k\) 的计算规则为:\(c_k = \sum_{i=0}^k a_i \cdot b_{k-i} \quad \text{(当 } i \text{ 超出序列长度时,对应元素视为0)}\)

三、卷积的计算步骤:“翻转→滑动→相乘→求和”

卷积的过程可拆解为 4 个核心步骤,用具体例子说明更直观。

示例:设序列 \(a = [1, 2, 3]\)(长度 \(m=3\)),\(b = [4, 5]\)(长度 \(n=2\)),计算 \(c = a * b\)。

步骤 1:翻转其中一个序列(通常翻转较短的序列)

卷积具有交换律(\(a * b = b * a\)),为方便计算,通常翻转较短的序列。这里翻转 b:原 \(b = [b_0, b_1] = [4, 5]\) → 翻转后 \(b_{\text{flip}} = [b_1, b_0] = [5, 4]\)。

步骤 2:滑动翻转后的序列,对齐元素

将翻转后的 \(b_{\text{flip}}\) 沿 a 滑动,从 “完全左偏” 到 “完全右偏”,每次滑动 1 个位置,直到所有元素对齐完毕。

滑动过程中,两个序列的 “重叠范围” 会逐渐变化,共需要滑动 \(m + n - 1 = 3 + 2 - 1 = 4\) 次(对应卷积结果的 4 个元素)。

步骤 3:每个位置计算 “相乘求和”

对每个滑动位置,计算两序列重叠元素的乘积之和,结果即为卷积序列 c 的对应元素。

详细滑动计算过程

  1. 第 1 个位置(\(k=0\))

    • 翻转后的 \(b_{\text{flip}}\) 左偏,仅 \(b_1\) 与 \(a_0\) 对齐:重叠元素:\(a_0 = 1\),\(b_1 = 4\)(其他位置视为 0)
    • 求和:\(c_0 = a_0 \cdot b_1 = 1 \times 4 = 4\)
  2. 第 2 个位置(\(k=1\))

    • 向右滑动 1 位,\(b_{\text{flip}}\) 的 \(b_1\) 对齐 \(a_1\),\(b_0\) 对齐 \(a_0\):重叠元素:\(a_0 = 1\) 与 \(b_0 = 5\),\(a_1 = 2\) 与 \(b_1 = 4\)
    • 求和:\(c_1 = a_0 \cdot b_0 + a_1 \cdot b_1 = 1 \times 5 + 2 \times 4 = 5 + 8 = 13\)
  3. 第 3 个位置(\(k=2\))

    • 再向右滑动 1 位,\(b_{\text{flip}}\) 的 \(b_1\) 对齐 \(a_2\),\(b_0\) 对齐 \(a_1\):重叠元素:\(a_1 = 2\) 与 \(b_0 = 5\),\(a_2 = 3\) 与 \(b_1 = 4\)
    • 求和:\(c_2 = a_1 \cdot b_0 + a_2 \cdot b_1 = 2 \times 5 + 3 \times 4 = 10 + 12 = 22\)
  4. 第 4 个位置(\(k=3\))

    • 最后滑动 1 位,仅 \(b_0\) 与 \(a_2\) 对齐:重叠元素:\(a_2 = 3\) 与 \(b_0 = 5\)(其他位置视为 0)
    • 求和:\(c_3 = a_2 \cdot b_0 = 3 \times 5 = 15\)
结果

卷积序列 \(c = [4, 13, 22, 15]\),即 \(a * b = [4, 13, 22, 15]\)。

四、MATLAB 中conv函数的验证

conv函数直接计算上述例子,结果一致:

a = [1, 2, 3];
b = [4, 5];
c = conv(a, b);  % 计算卷积
disp(c);  % 输出:4 13 22 15

五、卷积的物理意义:“加权滑动平均”

卷积的本质是一个序列对另一个序列的 “加权滤波”

  • 若将 a 视为 “输入信号”,b 视为 “滤波器的冲激响应”,则卷积 \(c = a * b\) 就是 “滤波后的输出信号”;
  • 翻转序列 b 相当于 “时间反转”,滑动过程相当于 “信号在时间上的延迟”,相乘求和相当于 “对不同延迟的信号加权累加”。

例如:在图像处理中,用一个高斯核(序列 b)与图像像素(序列 a)卷积,可实现模糊效果(本质是对像素的加权平均)。

总结

卷积的核心是 “翻转→滑动→相乘→求和”,conv函数通过实现这一过程,计算两个离散序列的卷积。它不仅是多项式乘法的基础,更是信号处理、图像处理中 “加权滤波”“特征提取” 的核心工具,其本质是对序列的 “动态加权累加”。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lingchen1906

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值