本文目录一览:
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];
卷积的实现步骤如下:
- 判断两个数组哪个长度更长。
- 长度较长的数组放在前面。
- 实现卷积计算。 示例代码如下:
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[]
为原始数组。m
和n
分别为数组长度。w[]
为卷积结果(需初始化为0),其长度为m+n-1
。
卷积积分的C语言程序
代码并不长,建议单步运行去看看,看走到哪一步时结果与你想象的不一致,再分析那一段代码...