- 积分
- 0
- 注册时间
- 2008-5-16
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 20wangz 于 2009-11-18 20:17 编辑
我的一个朋友,最近在做最优控制方面的学习和研究。他写了一个程序,但是运行效率特别低,运行时间经常以小时计。我看了一下他的程序,别的咱不懂,但程序中用了很多的循环,难怪快不起来。我向他介绍了仿真论坛上有许多热心的高手,于是他委托我把问题贴上来,向各位兄台请教:怎样才能让程序尽快地得到结果呢?
下面是他的程序代码:- clc
- clear
- %已知参数
- h=-36.884; %热机械参数1
- s=-18.378; %热机械参数2
- a0=2*10^6; %热机械参数3
- K0=1; %热机械参数4
- T0=300; %环境温度
- p0=200; %外部压力
- R=8.3145; %气体常数
- Cv=2.5*R; %热熔与R的关系
- p1=16*p0/1000; %无量纲系数p'
- b1=0.4; %牛顿传热规律时的无量纲系统的系数
- b2=1; %牛顿传热规律时的无量纲系统的系数
- b3=0.52632; %牛顿传热规律时的无量纲系统的系数
- b4=98468; %牛顿传热规律时的无量纲系统的系数
- b5=3.8643*10^(-8); %牛顿传热规律时的无量纲系统的系数
- b6=1.0211; %牛顿传热规律时的无量纲系统的系数
- b7=128.368; %牛顿传热规律时的无量纲系统的系数
- t=0.5; %膨胀和压缩冲程的时间
- x(1)=1; %无量纲位移初值
- xfin=2; %无量纲位移末值
- T(1)=1.6280; %无量纲温度的初值
- Tfin=1.2464; %无量纲温度的末值
- num=200;
- detat=t/(num-1);
- ww(1)=0;
- k=1;
- for j=0.000001:0.001:1
- n=1;
- lamda1(1)=j;
- for jj=0.00001:0.001:6
- lamda2(1)=jj;
- v(1)=-1/(2*b6*x(1))*(b1*lamda1(1)*T(1)-lamda2(1)*x(1)-T(1));
- sigma(1)=exp((-1*h+s*T(1))/T(1));
- L(1)=(x(1)^2+b4*b5*x(1)*T(1)*sigma(1))^(1/2);
- for i=2:num
- ww(i)=(i-1)*detat;
- lamda2(i)=lamda2(i-1)+detat*(v(i-1)*T(i-1)/(x(i-1)^2)-lamda1(i-1)*(-b2*(T(i-1)^4-1)+b1*v(i-1)*T(i-1)/(x(i-1)^2)+a0*b3/(b4*T(i-1)*sigma(i-1))*exp(-1*a0/(b4*sigma(i-1)*T(i-1))*(-1*x(i-1)+L(i-1)))*(-1+(2*x(i-1)+b4*b5*sigma(i-1)*T(i-1))/(2*L(i-1)))));
- lamda1(i)=lamda1(i-1)+detat*(-1*v(i-1)/x(i-1)-lamda1(i-1)*(-1*b1*v(i-1)/x(i-1)-4*(1+b2*x(i-1))*T(i-1)^3-b3*exp(-1*a0/(b4*sigma(i-1)*T(i-1))*(-1*x(i-1)+L(i-1)))*a0/(b4*T(i-1)^2*sigma(i-1))*(-1*x(i-1)+L(i-1)+h*(-1*x(i-1)+L(i-1))/T(i-1)-b4*b5*x(i-1)*sigma(i-1)*(T(i-1)+h)/(2*L(i-1)))));
- T(i)=T(i-1)+detat*(-1*b1*T(i-1)*v(i-1)/x(i-1)+b3*(1-exp(-1*a0/(b4*T(i-1)*sigma(i-1))*(-1*x(i-1)+L(i-1))))-(1+b2*x(i-1))*(T(i-1)^4-1));
- x(i)=x(i-1)+detat*v(i-1);
- v(i)=-1/(2*b6*x(i))*(b1*lamda1(i)*T(i)-lamda2(i)*x(i)-T(i));
- sigma(i)=exp((-1*h+s*T(i))/T(i));
- L(i)=(x(i)^2+b4*b5*x(i)*T(i)*sigma(i))^(1/2);
- end
- zz(k,n)=T(num);
- zzz(k,n)=x(num);
- n=n+1;
- end
- k=k+1;
- end
-
- for i=1:k-1
- for j=1:n-1
- if ((abs(zz(i,j)-Tfin)<0.001)&&(abs(zzz(i,j)-xfin)<0.001))
- i
- j
- end
- end
- end
-
复制代码 有关的说明见附件。
代他先谢谢大家了! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|