全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
5473 2
2012-03-31
各位同学们好,

  最近在学习matlab编程,但是在for循环这里出了问题,主要就是效率的问题,写好的一个for循环要运行2分钟30秒之久,于是想要改进程序希望能够运行速度更快一点,也差了一些资料。
  提高for循环的效率的主要方法就是1提前给变量预村变量的空间,用ones 和zeros函数先定义变量的大小。2尽量避免用for循环,将其改成等价的向量形式。
  对第一点比较简单,我也做了一些改善,对于第二点,我在实际的程序中遇到了一些问题,希望同学们可以帮到我,问题如下:


原有的for循环为:

for k=1:num.RI
bold6(1:k)=newalpha(1:k);
bold6(k)=0;
boldalpha=[newa,newb,bold6];
meanal=(Asquare(k)*bold3+newsigma0square)^(-1)*bold3*sum(A(:,k).*(y-newu-z*boldalpha'));
varal=(Asquare(k)*bold3+newsigma0square)^(-1)*newsigma0square*bold3;
newalpha(k)=sqrt(varal)*randn+meanal;
end
我修改后的for循环为:

bold6(1:(1:num.RI))=newalpha(1:(1:num.RI));
bold6(1:num.RI)=0;
boldalpha=[newa,newb,bold6];
meanal=(Asquare(1:num.RI).*bold3+newsigma0square).^(-1).*bold3.*sum(A(:,(1:num.RI)).*(y-newu-z*boldalpha'));
varal=(Asquare(1:num.RI).*bold3+newsigma0square).^(-1).*newsigma0square*bold3;
newalpha(1:num.RI)=sqrt(varal)*randn+meanal;
但是修改以后的循环出现了错误,错误为  the  inner matrix do not agree.
错误出现在meanal=(Asquare(1:num.RI).*bold3+newsigma0square).^(-1).*bold3.*sum(A(:,(1:num.RI)).*(y-newu-z*boldalpha'));
而这一行与其他的区别主要是等式后缀有个sum(A(:,(1:num.RI)).*(y-newu-z*boldalpha')),其中A(:,(1:num.RI))为矩阵的1到num.Ri列后面(y-newu-z*boldalpha')为一个列向量,这就变成了矩阵与数组相乘再求和,但是matlab里面好像只有数组与数组相乘,我不知道这种情况应该怎么处理,希望知道的同学可以告诉我。
我的QQ为522036648,也希望知道这个问题的同学可以加我好友,方便交流学习,谢谢各位了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-4-2 18:34:08
后来,我自己好好想了下,程序改成以下的形式:


bold6(1:(1:num.RI))=newalpha(1:(1:num.RI));
bold6(1:num.RI)=0;
boldalpha=[newa,newb,bold6];
for j=1:length(y-newu-z*boldalpha'),
for i=1:num.RI,
Q(i,:)=y-newu-z*boldalpha';
end
end
meanal=(Asquare(1:num.RI).*bold3+newsigma0square).^(-1).*bold3.*sum(A(:,(1:num.RI)).*Q');
varal=(Asquare(1:num.RI).*bold3+newsigma0square).^(-1).*newsigma0square*bold3;
newalpha(1:num.RI)=sqrt(varal).*randn(1,num.RI)+meanal;
可以运行了,但是运行时间反而比开始的时候要慢好几倍,可能是多了一个for循环生成矩阵的缘故,但是我用
x1=y-newu-z*boldalpha';
Q=x1(ones(num.RI,1),:);
来生成矩阵又总是报错。。。Matrix dimensions must agree.感觉for循环生成相同行向量的矩阵与不用循环生成相同行向量生成矩阵应该是等价的啊,为什么会这样啊。。。纠结啊。。。。。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-2 22:31:19
我明白了,x1忘了转置了。。。。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群