include stdio.h
為阜城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及阜城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計制作、成都網(wǎng)站制作、阜城網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
#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; ik; 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]);
}
}
conv(int?u[],int?v[],int?w[],?int?m,?int?n)
{
int?i,?j;
int?k?=?m+n-1;
for(i=0;?ik;?i++)
for(j=max(0,i+1-n);?j=min(i,m-1);?j++)
{???
w[i]?+=?u[j]*v[i-j];
}?
}
u[],v[]為原始數(shù)組,m,n分別為數(shù)組長度,w[]為卷積結(jié)果(w[]需初始化為0),其長度為m+n-1
main(){
int a[10],b[10],c[10];
int i;
for(i=0;i10;i++){
printf("Enter a arr number %d :",i+1);
scanf("%d",a[i]);
printf("Enter b arr number %d :",i+1);
scanf("%d",b[i]);
}
for(i=0;i10;i++){
c[i]=a[i]*b[i]; //得到相乘結(jié)果存入C數(shù)組.
}
for(i=0;i10;i++)
printf("\n%d",c[i]);//輸出結(jié)果
}
積分為線性卷積,和圓形卷積。而題目是線性卷積,然后是所求的結(jié)果個數(shù)是上面兩個數(shù)組 個數(shù)的和減去1
比如上面h數(shù)組里面單元是5 而x數(shù)組 是4
所以肯定一點是結(jié)果是等于8個數(shù)的
result[(sizeof(h) + sizeof(x)) / sizeof(double) - 1];這個就可以說明了
第二個知識點是卷積是怎么求的。第一步肯定是判斷兩個數(shù)組 那個長度長
conv(x, h, sizeof(x) / sizeof(x[0]), sizeof(h) / sizeof(h[0]), result); 就是實現(xiàn)這個目標(biāo)的。
然后是長度長的放前面
好吧 我換個 數(shù)字來就把
x【】=
h【】=
然后卷積 一個是 x0*h0=1;實現(xiàn)語句 是第一個
for (int i = 0; i lenH; i++)
{
for (int j = 0; j = i; j++)
result[i] += x[j] * h[i - j];
}
此時 已經(jīng)要轉(zhuǎn)入第二步驟了:
for (int m = lenH; m lenX; m++){
for (int j = 0; j lenH; j++)
result[m] += x[m - j] * h[j];
}
第二部 應(yīng)該是 x*h+x1*h(1-1)= 這里得h1 用0代替 但程序里 不是這樣 而是 用x*h=
好吧 我可能設(shè)置的h數(shù)組不夠長 加入 h有兩個。x有
那么 結(jié)果 應(yīng)該是x2*y1+x1*y0;
然后是第三部
是說 在要求的 結(jié)果 最后幾個數(shù)字時候 比如原題里面 應(yīng)該是有8個的。但到第二個循環(huán)才求到X得長度5個。
所以 后面應(yīng)該是resual記住 數(shù)組下標(biāo) 比實際小1. 所以
是這樣的
用 for (int n = lenX; n lenX + lenH - 1; n++){
for (int j = i - lenX + 1; j lenH; j++)
result[n] += x[n - j] * h[j];
}里面的i 要改成n
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];
}
然后 是這樣分析的
結(jié)果等于=x(0)h(5-0)+x(1)h(5-1)+x(2)h(5-2)+x(3)h(5-3)=x(0)h(5)+x(1)h(4)+x(2)h(3)+x(3)h(2) 記住 數(shù)組不夠的地方 用0代替
copy(result, result[8], ostream_iteratordouble(cout, " ")); 這個函數(shù) 就不想說了 自己去看stl 算法吧
另外,虛機(jī)團(tuán)上產(chǎn)品團(tuán)購,超級便宜