當前位置:首頁 » 編程語言 » c語言卷積代碼

c語言卷積代碼

發布時間: 2023-07-16 12:59:41

『壹』 如何用c語言實現數組的卷積過程~~~

積分為線性卷積,和圓形卷積。而題目是線性卷積,然後是所求的結果個數是上面兩個數組 個數的和減去1
比如上面h數組裡面單元是5 而x數組 是4
所以肯定一點是結果是等於8個數的
result[(sizeof(h) + sizeof(x)) / sizeof(double) - 1];這個就可以說明了
第二個知識點是卷積是怎麼求的。第一步肯定是判斷兩個數組 那個長度長
conv(x, h, sizeof(x) / sizeof(x[0]), sizeof(h) / sizeof(h[0]), result); 就是實現這個目標的。蔽譽
然後是長度長的放前面
好吧 我換個 數字來就把
x【】=
h【】=
然後卷積 一個是 x0*h0=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];
}
第二部 應該是 x*h+x1*h(1-1)= 這里得h1 用0代替 但程序里 不是這樣 而是 用x*h=
好吧 我可能設置的h數組不夠長 加入 h有兩個。x有笑灶
那麼 結果宏升段 應該是x2*y1+x1*y0;
然後是第三部
是說 在要求的 結果 最後幾個數字時候 比如原題裡面 應該是有8個的。但到第二個循環才求到X得長度5個。
所以 後面應該是resual記住 數組下標 比實際小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];
}
然後 是這樣分析的
結果等於=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) 記住 數組不夠的地方 用0代替
(result, &result[8], ostream_iterator<double>(cout, " ")); 這個函數 就不想說了 自己去看stl 演算法
另外,虛機團上產品團購,超級便宜

『貳』 用C語言做離散卷積運算

暴力N ^ 2可以直接乘,直接雙重循環即可,要快的話可以用NlogN的FFT。

『叄』 用c語言實現兩個矩陣相乘怎麼做

1、程序運行輸入數據時,第一行為A矩陣的行列數和B矩陣的行列數,接著分別輸入A、B兩個矩陣的值。

『肆』 求解C語言這道題的詳細源代碼

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{ int i,j,i1,j1,k,n=0,a[16][16];

srand(time(0));

for(i=0; i<16; i++)

{ for(j=0; j<16; j++)

蔽陸 { a[i][j]=rand()%100;

printf("%3d",a[i][j]);

}

printf(" ");

}

for(i=1; i<15; i++)

for(j=1; j<15; j++)

空大 { k=1;

for(i1=-1; i1<2; i1++)

宏虧頃 for(j1=-1; j1<2; j1++)

if(a[i+i1][j+j1]>a[i][j])k=0;

if(k)

{ printf("%2d行%2d列是局部最大值 ",i,j);

if(++n%3==0)printf(" ");

}

}

return 0;

}

『伍』 matlab中conv(卷積)函數的C語言實現的源代碼請求大蝦幫助。

function a=myconv(b,c)
bs=size(b);
cs=size(c);
i=any(bs-cs);
if i
error('error')
end
i=any(~(bs-1));
if ~i
error('error')
end
ko=0;
if bs(1)>bs(2)
b=b';
c=c';
ko=1;
end
bs=size(b);
cs=size(c);
ss=2*bs(2)-1;
a=zeros(1,ss);
for i=1:cs(2)
q=zeros(1,i-1);
p=zeros(1,ss-cs(2)+1-i);
ba=[q,c,p];
ma=b(i)*ba;
a=a+ma;
end
if ko
a=a';
end
end
測試了一下,跟conv計算的結果偏差很小(我測試的結果是10^-15左右),執行效率略低(用cputime 測試rand(1,99),差了0.2964) 商業軟體就是牛啊 真想知matlab中這個函數的源代碼

熱點內容
vs編譯找不到指定項目文件 發布:2025-02-08 12:36:54 瀏覽:241
怎樣用windows伺服器搭建網站 發布:2025-02-08 12:27:38 瀏覽:531
android獲取音樂 發布:2025-02-08 12:26:05 瀏覽:961
存儲的數據可以復制嗎 發布:2025-02-08 12:20:22 瀏覽:852
scraino編程 發布:2025-02-08 11:59:41 瀏覽:265
我的世界伺服器進不去該怎麼辦 發布:2025-02-08 11:47:41 瀏覽:236
linux的telnet 發布:2025-02-08 11:47:36 瀏覽:288
壓縮袋打折 發布:2025-02-08 11:46:02 瀏覽:259
c語言結構體題目 發布:2025-02-08 11:46:01 瀏覽:339
如何svn限制一些外網不能訪問 發布:2025-02-08 11:46:00 瀏覽:992