matlab 矩阵卷积的问题

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/23 16:52:58
matlab 矩阵卷积的问题
xTR"W˪BwӴh`^WTCHq 8rq 8D80q>U

{ZOyDZ K1QrV^7 ][pw'y1Kw<4?>X{G>c O /Xı<㏹gE}fYG""Y!Ȳ~uS,]n-d[:D? AAYID)D<`Sdq*.p\8at2r [`R@dEgPJ. #?tWx@ﷴµ4.5nCw :ۂ3o*jPηP+ꭱw7݀,w?!Ql?r 7ZXo f0nˁX2f Reo4[ɦa4BdډUވpLtbqH(j2#fFdbfa%Ζ3a7qKtbFRö@T{ GPjk5 ςHh7!v]vJ1.;ˠjʥUWVjcyV I=)w%}77ZoUj[)>Q&`UP120F'aQ`8c…Q9ivN;!W1fJ`nZm<<49ԻMq/D+M ڪ=\~0# ޽5|V+dzl?b%ktVpsO1yDoF݃ xR+ɠ杞kh{X" VV&!E\61(+H}R (a(z)Q#KqFn9#/}* aBb\^YB"JP5,(h;O@FEթ'ڽ)4lo^:]t>4ߩvnt*dt|4r/ QڅNrhuN!x_ 3k#zEt|

matlab 矩阵卷积的问题
matlab 矩阵卷积的问题

matlab 矩阵卷积的问题
注意matlab的数组下标是从1开始的,所以你原来的程序有点错误
帮你改过来了
[N1,M1]=size(x);
[N2,M2]=size(p);
y=zeros(N1+N2-1,M1+M2-1);
for n=1:(N1+N2-1)
for m=1:(M1+M2-1)
y1=0;
for k=max(1,n-N2+1):min(n,N1)
for l=max(1,m-M2+1):min(m,M1)
y1=y1+x(k,l)*p(n-k+1,m-l+1);
end
end
y(n,m)=y1;
end
end
二维卷积运算是O(n^4)量级的计算,随着输入矩阵变大,运算次数很快上升
系统自带conv2是做过很多优化的,我试了一下计算两个100x100大小矩阵的
二维矩阵的卷积,用系统自带的conv2只需不到0.1秒的时间
而用上边代码的四重循环写的二维卷积计算,要超过2.5秒的时间
而且随着矩阵大小变大,这个时间快速增长
不知道你用的x矩阵和p矩阵的大小是怎样,如果比较大的话
可能需要的时间会很长,导致一直是busy的状态.
一般情况下,出现一直是busy的状态要不就是死循环,要不就是要算很久没算完
你原来的代码只是下标有问题,输出的矩阵第一行,第一列全为0,而少了最后一行和一列
在x和p都比较小的情况下,是可以很快计算出结果的
所以不是死循环的状态
只是当x和p矩阵比较大的情况,由于算法的时间复杂度较高
不能在短时间内得到结果,所以才会一直busy
可能需要几分钟或者更长的时间才能完成计算