[求助] MATLAB编程问题:我编写了一个迭代计算程序,里面总是出错,我把程序贴出来,希望高手来帮助我! 30
a;n11;Q11;M11;%水轮机特性,为数组(矩阵)形式(已知条件,如需要可给)Ta=9.57;Tj=310.705;hw1=2.45;hw3=1.10;k1=0.0...
a;n11;Q11;M11;%水轮机特性,为数组(矩阵)形式(已知条件,如需要可给)
Ta=9.57;Tj=310.705;hw1=2.45;hw3=1.10;k1=0.0011;k2=0.0002;k3=0.00015;
DT=0.05;T=20;t1=0.1;Ts=8;N1=14;N3=72;h0=1.0375;a0=0.8;va=0.1;m=0.5;r=0.5;
n11r=81.22;Q11r=0.343;M11r=37.1356;Bt=[];EA=[];EF=[];wx=0.0001;t=0;
if(t<=0)
eA(t)=0;eF(t)=0;b(t)=0;m(t)=0;qF2(t)=0;qF1(t)=1;qF3(t)=1;qA(t)=1;qB(t)=1;
end
function main()
i=1;
for t=0.05:0.05:T
at(i)=myfun(t,t1,Ts,a0);
i=i+1;
function at=myfun(t,t1,Ts,a0)
if(t<=t1)
at=a0;
elseif (t>t1)&&(t<=Ts)
at=a0-va*(t-t1);
else at=0;
end
end %求导叶开度
eA(t0)=eA(t-DT);b(t0)=b(t-DT); %迭代初值
while(t<=T)
while(t<=T)
x11=(1+b(t0))/sqrt(h0+eA(t0));
n11(t)=x11*n11r;
Q11(t)=interp2(a,n11,Q11,at,n11(t),'cubic');
q11(t)=Q11(t)/Q11r;
Ca1=1/(2*hw1);
Cp1=qF1(t-N1*DT)+eF(t-N1*DT)*Ca1-k1*abs(qF1(t-N1*DT))*qF1(t-N1*DT)*Ca1;
Z(t)=(-q11t+sqrt((q11t)^2+4*Ca1*(Cp1+Ca1*h0)))/(2*Ca1);
eA(t)=Z(t)^2-h0;
EA=[EA eA(t)];
qA(t)=Cp1-Ca1*eA(t);
if(abs(eA(t)-eA(t0))<wx)
break;
end
eA(t0)=m*eA(t)+(1-m)*eA(t0);
end
M11(t)=interp2(a,n11,M11,at,n11t,'cubic');
m11(t)=M11t/M11r;
m(t)=m11(t)*(h0+eAt);
b(t)=b(t-DT)+(m(t)+m(t-DT))*DT/(2*Ta);
Bt=[Bt b(t)];
if(abs(b(t)-b(t0))<wx)
break;
end
b(t0)=r*b(t)+(1-r)*b(t0);
end
Cn1=qA(t-N1*DT)-Ca1*eA(t-N1*DT)-k1*abs(qA(t-N1*DT))*qA(t-N1*DT)*Ca1;
Ca2=2*Tj/DT;
Cn2=qF2(t-DT)-Ca2*eF(t-DT)-k2*abs(qF2(t-DT))*qF2(t-DT)*Ca2;
Ca3=1/(2*hw3);
Cp3=qB(t-N3*DT)-k3*abs(qB(t-N3*DT))*qB(t-N3*DT)*Ca3;
Cn3=qF3(t-N3*DT)-Ca3*eF(t-N3*DT)-k3*abs(qF3(t-N3*DT))*qF3(t-N3*DT)*Ca3;
eF(t)=(Cp3-(Cn1+Cn2))/(Ca1+Ca2+Ca3);
EF=[EF eF(t)];
qF1(t)=Cn1+Ca1*eF(t);
qF2(t)=Cn2+Ca2*eF(t);
qF3(t)=Cp1-Ca3*eF(t);
qB(t)=Cn3;
if(t>=T)
break;
end
end
end
程序执行时,总出现提示
??? Subscript indices must either be real positive integers or logicals.
我是matlab新手,目前在做论文,有好多东西不懂,还请高手指教...
其中:DT是计算的时间步长,wx是迭代收敛条件。迭代计算的最终结果,是要使得数组Bt、EA、EF可以分别记录每一次计算的b(t)、eA(t)及eF(t)的值,最后可以输出并绘图 展开
Ta=9.57;Tj=310.705;hw1=2.45;hw3=1.10;k1=0.0011;k2=0.0002;k3=0.00015;
DT=0.05;T=20;t1=0.1;Ts=8;N1=14;N3=72;h0=1.0375;a0=0.8;va=0.1;m=0.5;r=0.5;
n11r=81.22;Q11r=0.343;M11r=37.1356;Bt=[];EA=[];EF=[];wx=0.0001;t=0;
if(t<=0)
eA(t)=0;eF(t)=0;b(t)=0;m(t)=0;qF2(t)=0;qF1(t)=1;qF3(t)=1;qA(t)=1;qB(t)=1;
end
function main()
i=1;
for t=0.05:0.05:T
at(i)=myfun(t,t1,Ts,a0);
i=i+1;
function at=myfun(t,t1,Ts,a0)
if(t<=t1)
at=a0;
elseif (t>t1)&&(t<=Ts)
at=a0-va*(t-t1);
else at=0;
end
end %求导叶开度
eA(t0)=eA(t-DT);b(t0)=b(t-DT); %迭代初值
while(t<=T)
while(t<=T)
x11=(1+b(t0))/sqrt(h0+eA(t0));
n11(t)=x11*n11r;
Q11(t)=interp2(a,n11,Q11,at,n11(t),'cubic');
q11(t)=Q11(t)/Q11r;
Ca1=1/(2*hw1);
Cp1=qF1(t-N1*DT)+eF(t-N1*DT)*Ca1-k1*abs(qF1(t-N1*DT))*qF1(t-N1*DT)*Ca1;
Z(t)=(-q11t+sqrt((q11t)^2+4*Ca1*(Cp1+Ca1*h0)))/(2*Ca1);
eA(t)=Z(t)^2-h0;
EA=[EA eA(t)];
qA(t)=Cp1-Ca1*eA(t);
if(abs(eA(t)-eA(t0))<wx)
break;
end
eA(t0)=m*eA(t)+(1-m)*eA(t0);
end
M11(t)=interp2(a,n11,M11,at,n11t,'cubic');
m11(t)=M11t/M11r;
m(t)=m11(t)*(h0+eAt);
b(t)=b(t-DT)+(m(t)+m(t-DT))*DT/(2*Ta);
Bt=[Bt b(t)];
if(abs(b(t)-b(t0))<wx)
break;
end
b(t0)=r*b(t)+(1-r)*b(t0);
end
Cn1=qA(t-N1*DT)-Ca1*eA(t-N1*DT)-k1*abs(qA(t-N1*DT))*qA(t-N1*DT)*Ca1;
Ca2=2*Tj/DT;
Cn2=qF2(t-DT)-Ca2*eF(t-DT)-k2*abs(qF2(t-DT))*qF2(t-DT)*Ca2;
Ca3=1/(2*hw3);
Cp3=qB(t-N3*DT)-k3*abs(qB(t-N3*DT))*qB(t-N3*DT)*Ca3;
Cn3=qF3(t-N3*DT)-Ca3*eF(t-N3*DT)-k3*abs(qF3(t-N3*DT))*qF3(t-N3*DT)*Ca3;
eF(t)=(Cp3-(Cn1+Cn2))/(Ca1+Ca2+Ca3);
EF=[EF eF(t)];
qF1(t)=Cn1+Ca1*eF(t);
qF2(t)=Cn2+Ca2*eF(t);
qF3(t)=Cp1-Ca3*eF(t);
qB(t)=Cn3;
if(t>=T)
break;
end
end
end
程序执行时,总出现提示
??? Subscript indices must either be real positive integers or logicals.
我是matlab新手,目前在做论文,有好多东西不懂,还请高手指教...
其中:DT是计算的时间步长,wx是迭代收敛条件。迭代计算的最终结果,是要使得数组Bt、EA、EF可以分别记录每一次计算的b(t)、eA(t)及eF(t)的值,最后可以输出并绘图 展开
2个回答
展开全部
??? Subscript indices must either be real positive integers or logicals.
这个报错的意思就是,你的数组脚标出现0或负值或者小数了。
matlab的脚标必须是正整数。像a(1),a(2)
如果出现a(1.1) a(-1) a(0)都是报这样的错误。
所以你程序的这里
if(t<=0)
eA(t)=0;eF(t)=0;b(t)=0;m(t)=0;qF2(t)=0;qF1(t)=1;qF3(t)=1;qA(t)=1;qB(t)=1;
end
t都小于等于0了,怎么还能做下面那么多数组的脚标呢!
这个报错的意思就是,你的数组脚标出现0或负值或者小数了。
matlab的脚标必须是正整数。像a(1),a(2)
如果出现a(1.1) a(-1) a(0)都是报这样的错误。
所以你程序的这里
if(t<=0)
eA(t)=0;eF(t)=0;b(t)=0;m(t)=0;qF2(t)=0;qF1(t)=1;qF3(t)=1;qA(t)=1;qB(t)=1;
end
t都小于等于0了,怎么还能做下面那么多数组的脚标呢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询