卷积c语言编程,卷积编译码

发布时间:2023-01-04

本文目录一览:

  1. c语言,急求写一个离散数组卷积的程序,能够直接运行的
  2. 如何用C语言实现数组的卷积过程~~~
  3. C语言用子函数实现卷积
  4. 卷积积分的C语言程序

c语言,急求写一个离散数组卷积的程序,能够直接运行的

#include stdio.h
#include stdlib.h
conv(int *u, int *v, int m, int n);
void main()
{
    int i = 0;
    int a[4] = {3,10,13,22};
    int b[5] = {6,2,15,4,1};
    int m = sizeof(a)/sizeof(a[0]);
    int n = sizeof(b)/sizeof(b[0]);
    conv(a,b,m,n);
}
conv(int u[], int v[], int m, int n)
{
    int i, j;
    int k = m+n-1;
    int w[10]={0};
    for(i=0; i<k; i++){
        for(j=max(0,i+1-n); j<=min(i,m-1); j++){
            w[i] += u[j]*v[i-j];
        }
        printf("%d\n",w[i]);
    }
}

如何用C语言实现数组的卷积过程~~~

卷积分为线性卷积和圆形卷积。而题目是线性卷积,结果个数是两个数组个数的和减去1。 比如上面h数组里面单元是5,而x数组是4,所以结果是8个数。

result[(sizeof(h) + sizeof(x)) / sizeof(double) - 1];

卷积的实现步骤如下:

  1. 判断两个数组哪个长度更长。
  2. 长度较长的数组放在前面。
  3. 实现卷积计算。 示例代码如下:
for (int i = 0; i < lenH; i++)
{
    for (int j = 0; j <= i; j++)
        result[i] += x[j] * h[i - j];
}
for (int m = lenH; m < lenX; m++){
    for (int j = 0; j < lenH; j++)
        result[m] += x[m - j] * h[j];
}
for (int n = lenX; n < lenX + lenH - 1; n++){
    for (int j = n - lenX + 1; j < lenH; j++)
        result[n] += x[n - j] * h[j];
}

C语言用子函数实现卷积

conv(int u[], int v[], int w[], int m, int n)
{
    int i, j;
    int k = m+n-1;
    for(i=0; i<k; i++)
        for(j=max(0,i+1-n); j<=min(i,m-1); j++)
        {
            w[i] += u[j]*v[i-j];
        }
}
  • u[]v[] 为原始数组。
  • mn 分别为数组长度。
  • w[] 为卷积结果(需初始化为0),其长度为 m+n-1

卷积积分的C语言程序

代码并不长,建议单步运行去看看,看走到哪一步时结果与你想象的不一致,再分析那一段代码...