30秒独木桥模型matlab,matlab7.0 for 循环优化(转换为向量形式)紧急求助。

各位同学们好,

最近在学习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,也希望知道这个问题的同学可以加我好友,方便交流学习,谢谢各位了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值