查看: 922|回复: 5|关注: 0

[已答复] 新人求教简化for循环的办法,循环太大耗时太长

[复制链接]

新手

5 麦片

财富积分


050


2

主题

10

帖子

0

最佳答案
发表于 2018-4-16 21:52:08 | 显示全部楼层 |阅读模式

以下是代码,希望能简化最后a矩阵计算时间,不过要保证每个a(i)  (i>6)的时候都用【a1 a2 a3 a4 a5 a6 】表示。


  1. %**********************************一单元测试**********************************
  2. syms c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c4_ c5_ c6_ real;
  3. syms alpha1 alpha2 alpha3 alpha4 alpha5 alpha6 real;
  4. syms L T0 rh r0 E S I positive;
  5. syms sga yta lda lda0
  6. syms Q1 R1 K1  Q2 R2 K2  tol
  7. lda=0.05011;
  8. %L=10;S=100;I=1;E=20;
  9. sga=100;yta=0.1;r0=0;

  10. %**********************************代数运算************************************
  11. alpha1=yta^2+lda^2;alpha2=alpha1*sga^2;alpha3=yta^2*sga^2;alpha4=lda^2;alpha5=0;alpha6=1/(2*lda*yta);
  12. c1=alpha1-(alpha3*(r0+0.5)+alpha5);c2=alpha3*r0;c4=alpha3*r0;c3=0.5*alpha3;c5=alpha3;
  13. c6=-alpha1*(alpha3*(r0+0.5)+alpha5)-alpha2;c7=alpha1*alpha3*r0;c9=alpha1*alpha3*r0;
  14. c8=0.5*alpha1*alpha3;c10=alpha1*alpha3;c11=-(alpha1*alpha2-4*alpha3*alpha4);
  15. c4_=3*c4;c5_=3*c5;
  16. c6_=3*alpha3+c6;
  17. a=sym(zeros(250,1));
  18. b=sym(zeros(250,1));
  19. delta=sym(zeros(6,1));
  20. F=sym(zeros(6,1));
  21. for i=1:250  %符号向量
  22. a(i)=sym (['a',num2str(i)]);
  23. end
  24. for i=1:250  %符号向量
  25. b(i)=sym (['b',num2str(i)]);
  26. end
  27. % a=sym('a%d',[200,1]);
  28. % b=sym('b%d',[200,1]);
  29. for ii=6:249
  30.     a(ii+1)=-(a(ii-1)*(ii-2)*(ii-3)*(ii-4)*(ii-5)*c1+a(ii-2)*(ii-3)*(ii-4)*(ii-5)*(c2*(ii-6)+c4)+a(ii-3)*(ii-4)*(ii-5)*(c3*(ii-6)*(ii-7)+c5*(ii-6)+c6)+a(ii-4)*(ii-5)*(c7*(ii-6)+c9)+a(ii-5)*(c8*(ii-6)*(ii-7)+c10*(ii-6)+c11))/(ii*(ii-1)*(ii-2)*(ii-3)*(ii-4)*(ii-5));
  31. end
复制代码

新手

5 麦片

财富积分


050


2

主题

10

帖子

0

最佳答案
 楼主| 发表于 2018-4-16 21:56:19 | 显示全部楼层
问题就是代码第31-33行的for循环,如果用矢量的话就不能保证都用【a1 a2 a3 a4 a5 a6】表示了吧

新手

5 麦片

财富积分


050


2

主题

10

帖子

0

最佳答案
 楼主| 发表于 2018-4-17 09:19:54 | 显示全部楼层
求不沉啊!!!!

新手

10 麦片

财富积分


050


0

主题

3

帖子

0

最佳答案
发表于 2018-4-17 14:56:05 | 显示全部楼层
似乎没太明白什么意思,能列出来一种形式说明吗?

新手

5 麦片

财富积分


050


2

主题

10

帖子

0

最佳答案
 楼主| 发表于 2018-4-17 15:17:25 | 显示全部楼层
sanzc223 发表于 2018-4-17 14:56
似乎没太明白什么意思,能列出来一种形式说明吗?

就是a(7)=[a1 a2 a3 a4 a5 a6]的线性组合,a(8)=[a1 a2 a3 a4 a5 a6]的线性组合.......都是用a1a2 a3 a4 a5 a6表示的,这样的话是不是只能这样for循环了???这样做的话出来结果自动迭代成上面形式了,只不过太费时间。

新手

10 麦片

财富积分


050


0

主题

3

帖子

0

最佳答案
发表于 2018-4-21 16:37:37 | 显示全部楼层
我感觉单元矩阵也许能解决,我自己简单的试了试
cell(1,10);
a{1}=[0 0 1];
a{2}=[0 1 0];
a{3}=[1 0 0];
for i=4:10
   a{i}=sum(cat(1,a{(i-3):(i-1)}))
end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表