首页 Matlab中如何减少循环尽量对矩阵操作

Matlab中如何减少循环尽量对矩阵操作

举报
开通vip

Matlab中如何减少循环尽量对矩阵操作Matlab中如何减少循环尽量对矩阵操作 Matlab基础是矩阵运算,它的优势就是矩阵运算的程序简洁、快速。虽然也提供了程序流程的控制语句,如for、while、if、else、switch、try、catch等等,但是应少用,特别是循环语句for、while,费时费事,编写程序时想法尽量避免过多的循环,能有矩阵运算代替是更好的选择,这样编出的程序也简单明了。那么实际编程中应如何减少循环而采用矩阵运算呢,这个问题没有统一的答案,需要结合实际情况,这里举几个例子来说明。 (1)图像的小波阈值降噪 利用二维离散小...

Matlab中如何减少循环尽量对矩阵操作
Matlab中如何减少循环尽量对矩阵操作 Matlab基础是矩阵运算,它的优势就是矩阵运算的程序简洁、快速。虽然也提供了程序流程的控制语句,如for、while、if、else、switch、try、catch等等,但是应少用,特别是循环语句for、while,费时费事,编写程序时想法尽量避免过多的循环,能有矩阵运算代替是更好的选择,这样编出的程序也简单明了。那么实际编程中应如何减少循环而采用矩阵运算呢,这个问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 没有统一的答案,需要结合实际情况,这里举几个例子来说明。 (1)图像的小波阈值降噪 利用二维离散小波变换对图像进行降噪是一种常用的图像降噪手段,其中比较简单典型的方法就是硬阈值法,其基本思想是:对小波分解后的高频系数,一般认为其绝对值比较大的主要反映了信号本身的特征,绝对值比较小的系数反映的多是噪声信息,于是可以事先确定一个阈值,当高频系数的绝对值小于阈值时让其为0,反之则保留。 这里先用循环的方法编写程序,然后再用矩阵操作的方法编写,请大家对比。 load tire; %打开一幅图像 [m n]=size(X); X0=X+randn(m,n).*10; %加噪声 [cA1,cH1,cV1,cD1] = dwt2(X0,'bior3.7'); %小波分解 th=60; %指定一个阈值,可以参考其他资料了解阈值确定方法 [m1 n1]=size(cH1); for i=1:m1 for j=1:n1 if abs(cH1(i,j))<> cH1(i,j)=0; end if abs(cV1(i,j))<> cV1(i,j)=0; end if abs(cD1(i,j))<> cD1(i,j)=0; end end end Xn= idwt2(cA1,cH1,cV1,cD1,'bior3.7'); %小波重构 figure(1); %显示原图像、加噪图像、降噪图像 subplot(131);imshow(X,map); subplot(132);imshow(X0,map); subplot(133);imshow(Xn,map); 如果不用循环,程序如下: load tire; [m n]=size(X); X0=X+randn(m,n).*10; [cA1,cH1,cV1,cD1] = dwt2(X0,'bior3.7'); th=60; cH=abs(cH1)-th; %让矩阵取绝对值减去阈值 cH1=(cH>0).*cH1; % cH元素>0则其为1,否则为0,再与原来的矩阵.*即可。 cV=abs(cV1)-th; cV1=(cV>0).*cV1; cD=abs(cD1)-th; cD1=(cD>0).*cD1; Xn= idwt2(cA1,cH1,cV1,cD1,'bior3.7'); figure(1); subplot(131);imshow(X,map); subplot(132);imshow(X0,map); subplot(133);imshow(Xn,map); 两种程序结果均一样,看图。当然直接用小波工具箱中的ddencmp等函数是另外一回事了。上述程序一方面是为了说明如何减少循环,另一方面该程序采用的降噪方面也叫硬阈值法,你可以在此基础上进行多层分解、改进得到软阈值法、指数阈值法等等其他降噪的程序,这是采用ddencmp函数难以达到的。 (2)求矩阵元素减去某个值后的最小值所在的位置 这是作者实际编程中遇到的一个问题:要求程序对矩阵seljitt的第4、6列分别减去某个值ug、dg,然后求两个差的绝对值的和最小的行号。 用循环的方法如下: [sizen m]=size(seljitt); %求矩阵的行数 minv=100000; %设定一个极大值用于后面的比较 for i=1:sizen LS1=abs(seljitt(i,4)-ug)+abs(seljitt(i,5)-dg); if LS1 minv=LS1;num=i; end end % num就是所要求的行号 改用矩阵运算如下: [minv num]=min(abs(seljitt(:,4)-ug)+abs(seljitt(:,5)-dg))); 由此看出后者程序是多么简单明了。
本文档为【Matlab中如何减少循环尽量对矩阵操作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_792768
暂无简介~
格式:doc
大小:15KB
软件:Word
页数:0
分类:企业经营
上传时间:2017-10-20
浏览量:36