作业帮 > 综合 > 作业

matlab 矩阵卷积的问题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/03/29 04:59:05
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
可能需要几分钟或者更长的时间才能完成计算