24小时热门版块排行榜    

查看: 1064  |  回复: 6
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

哈格不受伤

金虫 (小有名气)

[求助] 求大神帮忙看一下程序,为什么一直无法执行选择之后的循环 已有2人参与

编了一个程序如下,希望p<pjc时使用一个循环,p>=pjc时使用另一个循环。在编程过程中发现不管是使用if选择语句还是while循环语句都是只能执行p<pjc时的循环,当p>pjc时程序就停止了,请各位大神帮忙看一下是什么原因,谢谢大家。
clear all
p0=101.3;kp=7.9;T0=300;md0=1.3;u0=0.5;kz=4;
Tbv=2221;Tbp=1867;
V=5000;kl=1.4;kr=1.25;
pb=p0*kp;
pjc=p0+5;
t(1)=0;tj=0.001;
Vr(1)=0;
Vrj(1)=0;
p(1)=p0;
u(1)=u0;
krj(1)=0;
rr(1)=0;
mdw(1)=md0;
Tw(1)=T0;
i=1;
%开始循环计算
while p(i)<=pb & p(i)>=p0
while p<=pjc & i<319
i=i+1;
t(i)=t(i-1)+tj;
uz(i)=u0*(p(i-1)/p0)^0.25
Vrj(i)=(4*pi/3)*(((3*Vr(i-1)/(4*pi))^(1/3)+(kz*uz(i)*tj))^3)-Vr(i-1);
krj(i)=(Vrj(i)/V)*((p(i-1)/p0)^(1/kl));
p(i)=p(i-1)+krj(i)*(pb-p0);
Vr(i)=V-(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));
Vw(i)=V-Vr(i);
rr(i)=((3*Vr(i))/(4*pi))^(1/3);
u(i)=((rr(i)-rr(i-1))/tj);
mdw(i)=md0*((p(i)/p0)^(1/kl));
Tw(i)=T0*((p(i)/p0)^((kl-1)/kl));
Tr(i)=Tbp+(Tbv-Tbp)*((p(i)-p0)/(pb-p0));
mdr(i)=(p(i)*Tbv*md0)/(pb*Tr(i));
end
while p>pjc
i=i+1;
t(i)=t(i-1)+tj;
uz(i)=u0*(p(i-1)/p0)^0.25
Vrj(i)=(4*pi/3)*(((3*Vr(i-1)/(4*pi))^(1/3)+(kz*uz(i)*tj))^3)-Vr(i-1);
krj(i)=(Vrj(i)/V)*((p(i-1)/p0)^(1/kl));
p(i)=p(i-1)+krj(i)*(pb-p0);
pb(i)=p(i)
%pb(i)=p(i-1)+krj(i)*(pb-p0);
Vr(i)=V-(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));
Vw(i)=V-Vr(i);
rr(i)=((3*Vr(i))/(4*pi))^(1/3);
u(i)=((rr(i)-rr(i-1))/tj);
mdw(i)=md0*((p(i)/p0)^(1/kl));
%Tw(i)=T0*((p(i)/p0)^((kl-1)/kl));
%Tr(i)=Tbp+(Tbv-Tbp)*((p(i)-p0)/(pb-p0));
%mdr(i)=(p(i)*Tbv*md0)/(pb*Tr(i));
Vbw(i)=(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));
Vbr(i)=V-Vbw(i);
mdbw(i)=mdw(i-1)*(Vw(i-1)-Vrj(i))/Vbw(i);
mdbr(i)=(mdr(i-1)*Vr(i-1)+mdw(i-1)*Vrj(i))/Vbr(i);
Sl=150;Sr=150;
Vxr(i)=((Sr*tj)/mdbr(i))*((2*p(i-1)*mdr(i-1)*(((p0/p(i-1))^(2/kr))-((p0/p(i-1))^((kr+1)/kr))))^(1/2));
Vxl(i)=((Sl*tj)/mdbw(i))*((2*p(i-1)*mdw(i-1)*(((p0/p(i-1))^(2/kl))-((p0/p(i-1))^((kl+1)/kl))))^(1/2));
pr(i)=pb(i)*(((Vbw(i)-(Vxl(i)))/Vbw(i))^(kl));
pl(i)=pb(i)*(((Vbr(i)-(Vxr(i)))/Vbr(i))^(kr));
p(i)=((Vbw(i)*((pr(i))^(1/kl))+((pl(i)/((pr(i)+pl(i))/2))^((kl-kr)/(kl*kr)))*Vbr(i)*((pl(i))^(1/kl)))/V)^kl;
end
end
plot(t,p)
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

哈格不受伤

金虫 (小有名气)

引用回帖:
2楼: Originally posted by pdl9527 at 2016-12-16 18:13:48
显然,while p>pjc是无法执行的, p是一个1*318的数组,里面并不是所有的值都大于pjc的,所以该while循环无法执行。

谢谢回复,我现在知道当p>pjc时是第318步,将选择条件改为while i<=318时进行选择计算(具体程序如下),但是现实结果出现In an assignment  A(I) = B, the number of elements in B and  I must be the same.
Error in ==> jingque1 at 41
p(i)=p(i-1)+krj(i)*(pb-p0);%压力
实在想不出来这一步究竟错在哪里啊。
clear all
p0=101.3;kp=7.9;T0=300;md0=1.3;u0=0.5;kz=4;%初始条件(压力、压缩系数、温度、密度、燃烧速度、湍流因子)
Tbv=2221;Tbp=1867;%燃烧产物温度
V=5000;kl=1.4;kr=1.25;%屋室体积、冷气体与热气体比热容比
pb=p0*kp;%爆后压力
pjc=p0+5;
t(1)=0;tj=0.001;%初始时间与时间间隔
Vr(1)=0;%初始燃烧产物体积
Vrj(1)=0;%单位时间内燃烧的气体体积
p(1)=p0;%初始压力
u(1)=u0;%初始速度
krj(1)=0;%初始燃尽率
rr(1)=0;%燃烧产物半径
mdw(1)=md0;%未燃气体密度
Tw(1)=T0;%未燃气体温度
i=1;
%开始循环计算
while p(i)<=pb & p(i)>=p0
while  i<318
i=i+1;
t(i)=t(i-1)+tj;
uz(i)=u0*(p(i-1)/p0)^0.25%正常传播速度--------------需要改进
Vrj(i)=(4*pi/3)*(((3*Vr(i-1)/(4*pi))^(1/3)+(kz*uz(i)*tj))^3)-Vr(i-1);%单位时间内燃烧的体积
krj(i)=(Vrj(i)/V)*((p(i-1)/p0)^(1/kl));%燃尽率
p(i)=p(i-1)+krj(i)*(pb-p0);%压力
Vr(i)=V-(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));%燃烧产物体积
Vw(i)=V-Vr(i);%未燃产物体积
rr(i)=((3*Vr(i))/(4*pi))^(1/3);%燃烧产物半径
u(i)=((rr(i)-rr(i-1))/tj);%可见传播速度
mdw(i)=md0*((p(i)/p0)^(1/kl));%未燃气体密度
Tw(i)=T0*((p(i)/p0)^((kl-1)/kl));%未燃气体温度
Tr(i)=Tbp+(Tbv-Tbp)*((p(i)-p0)/(pb-p0));
mdr(i)=(p(i)*Tbv*md0)/(pb*Tr(i));%燃烧产物密度
end
while i>=318
i=i+1;
t(i)=t(i-1)+tj;
uz(i)=u0*(p(i-1)/p0)^0.25%正常传播速度--------------需要改进
Vrj(i)=(4*pi/3)*(((3*Vr(i-1)/(4*pi))^(1/3)+(kz*uz(i)*tj))^3)-Vr(i-1);%单位时间内燃烧的体积
krj(i)=(Vrj(i)/V)*((p(i-1)/p0)^(1/kl));%燃尽率
p(i)=p(i-1)+krj(i)*(pb-p0);%压力
pb(i)=p(i)
%pb(i)=p(i-1)+krj(i)*(pb-p0);%压力
Vr(i)=V-(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));%燃烧产物体积
Vw(i)=V-Vr(i);%未燃产物体积
rr(i)=((3*Vr(i))/(4*pi))^(1/3);%燃烧产物半径
u(i)=((rr(i)-rr(i-1))/tj);%可见传播速度
mdw(i)=md0*((p(i)/p0)^(1/kl));%未燃气体密度
%Tw(i)=T0*((p(i)/p0)^((kl-1)/kl));%未燃气体温度
%Tr(i)=Tbp+(Tbv-Tbp)*((p(i)-p0)/(pb-p0));
%mdr(i)=(p(i)*Tbv*md0)/(pb*Tr(i));%燃烧产物密度
Vbw(i)=(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));%爆室内未燃气体体积
Vbr(i)=V-Vbw(i);%爆室内已燃气体体积
mdbw(i)=mdw(i-1)*(Vw(i-1)-Vrj(i))/Vbw(i);%爆室内未反应气体密度
mdbr(i)=(mdr(i-1)*Vr(i-1)+mdw(i-1)*Vrj(i))/Vbr(i);%爆室内燃烧产物密度
Sl=150;Sr=150;
Vxr(i)=((Sr*tj)/mdbr(i))*((2*p(i-1)*mdr(i-1)*(((p0/p(i-1))^(2/kr))-((p0/p(i-1))^((kr+1)/kr))))^(1/2));%泄露的燃烧产物体积
Vxl(i)=((Sl*tj)/mdbw(i))*((2*p(i-1)*mdw(i-1)*(((p0/p(i-1))^(2/kl))-((p0/p(i-1))^((kl+1)/kl))))^(1/2));%泄露的未燃气体体积
pr(i)=pb(i)*(((Vbw(i)-(Vxl(i)))/Vbw(i))^(kl));%热气体过程压力
pl(i)=pb(i)*(((Vbr(i)-(Vxr(i)))/Vbr(i))^(kr));%冷气体过程压力
p(i)=((Vbw(i)*((pr(i))^(1/kl))+((pl(i)/((pr(i)+pl(i))/2))^((kl-kr)/(kl*kr)))*Vbr(i)*((pl(i))^(1/kl)))/V)^kl;
end
end
plot(t,p)
请问这是为什么?
3楼2016-12-16 19:48:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 7 个回答

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
显然,while p>pjc是无法执行的, p是一个1*318的数组,里面并不是所有的值都大于pjc的,所以该while循环无法执行。
2楼2016-12-16 18:13:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

哈格不受伤

金虫 (小有名气)

引用回帖:
2楼: Originally posted by pdl9527 at 2016-12-16 18:13:48
显然,while p>pjc是无法执行的, p是一个1*318的数组,里面并不是所有的值都大于pjc的,所以该while循环无法执行。

如果改成if语句,则可以计算但是还是只能算p<pjc之前的过程,请问是为什么,想了好久都不明白。
p0=101.3;kp=7.9;T0=300;md0=1.3;u0=0.5;kz=4;%初始条件(压力、压缩系数、温度、密度、燃烧速度、湍流因子)
Tbv=2221;Tbp=1867;%燃烧产物温度
V=5000;kl=1.4;kr=1.25;%屋室体积、冷气体与热气体比热容比
pb=p0*kp;%爆后压力
pjc=p0+5;
t(1)=0;tj=0.001;%初始时间与时间间隔
Vr(1)=0;%初始燃烧产物体积
Vrj(1)=0;%单位时间内燃烧的气体体积
p(1)=p0;%初始压力
u(1)=u0;%初始速度
krj(1)=0;%初始燃尽率
rr(1)=0;%燃烧产物半径
mdw(1)=md0;%未燃气体密度
Tw(1)=T0;%未燃气体温度
i=1;
%开始循环计算
while p(i)<=pb & p(i)>=p0
if  i<318
i=i+1;
t(i)=t(i-1)+tj;
uz(i)=u0*(p(i-1)/p0)^0.25%正常传播速度--------------需要改进
Vrj(i)=(4*pi/3)*(((3*Vr(i-1)/(4*pi))^(1/3)+(kz*uz(i)*tj))^3)-Vr(i-1);%单位时间内燃烧的体积
krj(i)=(Vrj(i)/V)*((p(i-1)/p0)^(1/kl));%燃尽率
p(i)=p(i-1)+krj(i)*(pb-p0);%压力
Vr(i)=V-(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));%燃烧产物体积
Vw(i)=V-Vr(i);%未燃产物体积
rr(i)=((3*Vr(i))/(4*pi))^(1/3);%燃烧产物半径
u(i)=((rr(i)-rr(i-1))/tj);%可见传播速度
mdw(i)=md0*((p(i)/p0)^(1/kl));%未燃气体密度
Tw(i)=T0*((p(i)/p0)^((kl-1)/kl));%未燃气体温度
Tr(i)=Tbp+(Tbv-Tbp)*((p(i)-p0)/(pb-p0));
mdr(i)=(p(i)*Tbv*md0)/(pb*Tr(i));%燃烧产物密度
else
i=i+1;
t(i)=t(i-1)+tj;
uz(i)=u0*(p(i-1)/p0)^0.25%正常传播速度--------------需要改进
Vrj(i)=(4*pi/3)*(((3*Vr(i-1)/(4*pi))^(1/3)+(kz*uz(i)*tj))^3)-Vr(i-1);%单位时间内燃烧的体积
krj(i)=(Vrj(i)/V)*((p(i-1)/p0)^(1/kl));%燃尽率
p(i)=p(i-1)+krj(i)*(pb-p0);%压力
pb(i)=p(i)
%pb(i)=p(i-1)+krj(i)*(pb-p0);%压力
Vr(i)=V-(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));%燃烧产物体积
Vw(i)=V-Vr(i);%未燃产物体积
rr(i)=((3*Vr(i))/(4*pi))^(1/3);%燃烧产物半径
u(i)=((rr(i)-rr(i-1))/tj);%可见传播速度
mdw(i)=md0*((p(i)/p0)^(1/kl));%未燃气体密度
%Tw(i)=T0*((p(i)/p0)^((kl-1)/kl));%未燃气体温度
%Tr(i)=Tbp+(Tbv-Tbp)*((p(i)-p0)/(pb-p0));
%mdr(i)=(p(i)*Tbv*md0)/(pb*Tr(i));%燃烧产物密度
Vbw(i)=(V-Vr(i-1)-Vrj(i))*((p(i-1)/p(i))^(1/kl));%爆室内未燃气体体积
Vbr(i)=V-Vbw(i);%爆室内已燃气体体积
mdbw(i)=mdw(i-1)*(Vw(i-1)-Vrj(i))/Vbw(i);%爆室内未反应气体密度
mdbr(i)=(mdr(i-1)*Vr(i-1)+mdw(i-1)*Vrj(i))/Vbr(i);%爆室内燃烧产物密度
Sl=150;Sr=150;
Vxr(i)=((Sr*tj)/mdbr(i))*((2*p(i-1)*mdr(i-1)*(((p0/p(i-1))^(2/kr))-((p0/p(i-1))^((kr+1)/kr))))^(1/2));%泄露的燃烧产物体积
Vxl(i)=((Sl*tj)/mdbw(i))*((2*p(i-1)*mdw(i-1)*(((p0/p(i-1))^(2/kl))-((p0/p(i-1))^((kl+1)/kl))))^(1/2));%泄露的未燃气体体积
pr(i)=pb(i)*(((Vbw(i)-(Vxl(i)))/Vbw(i))^(kl));%热气体过程压力
pl(i)=pb(i)*(((Vbr(i)-(Vxr(i)))/Vbr(i))^(kr));%冷气体过程压力
p(i)=((Vbw(i)*((pr(i))^(1/kl))+((pl(i)/((pr(i)+pl(i))/2))^((kl-kr)/(kl*kr)))*Vbr(i)*((pl(i))^(1/kl)))/V)^kl;
end
end
plot(t,p)
4楼2016-12-16 20:03:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

引用回帖:
3楼: Originally posted by 哈格不受伤 at 2016-12-16 19:48:56
谢谢回复,我现在知道当p>pjc时是第318步,将选择条件改为while i<=318时进行选择计算(具体程序如下),但是现实结果出现In an assignment  A(I) = B, the number of elements in B and  I must be the sam ...

while i>=318执行一次后,pb变为一个1*319行的数组,由于直接从i+1=319开始,所以前1:318列为0。

显然在pb(i)=p(i-1)+krj(i)*(pb-p0)中由于维数不同无法计算和赋值。

感觉你把程序写的太复杂了,每写一句程序要明白是为了干什么,会产生什么结果。
5楼2016-12-16 21:21:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +6 启萌科技 2026-08-12 21/1050 2026-08-14 19:48 by 启萌科技
[基金申请] 国基金的申报应该改成非等额制,评价高的钱多评价低的钱少,但是增加资助率 +8 a089 2026-08-07 8/400 2026-08-14 18:46 by beefly
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +6 Tide man 2026-08-14 7/350 2026-08-14 18:36 by 正能量1斤
[基金申请] filecode +6 cratir 2026-08-14 10/500 2026-08-14 18:29 by 笑叹辞穷
[基金申请] 奇怪,两个人的filecode固定段从头到尾一模一样 +8 布布和一二 2026-08-10 11/550 2026-08-14 14:58 by Equinoxhua
[基金申请] 好奇怪的filecode +6 布布和一二 2026-08-08 7/350 2026-08-14 13:38 by Equinoxhua
[硕博家园] 读博的好处 +4 lnee 2026-08-11 4/200 2026-08-14 10:20 by ahsoarli
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +10 家与远方 2026-08-10 15/750 2026-08-14 02:08 by 绵羊哥哥
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +3 Tide man 2026-08-12 4/200 2026-08-13 08:35 by ZJTJZ
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +11 Tide man 2026-08-11 11/550 2026-08-13 07:35 by 撸猫猫
[基金申请] 是这周出结果还是下周出结果? +3 yuleib84 2026-08-11 3/150 2026-08-11 21:53 by jnhyjjm
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
[基金申请] 据悉今年马上要出结果了 +7 瞬息宇宙 2026-08-10 8/400 2026-08-10 12:42 by Vivilian
[基金申请] 这样的filecode谁见过 +11 布布和一二 2026-08-08 22/1100 2026-08-10 11:10 by wmfsnow
[基金申请] 面上项目filecode邪修 +5 西山十月 2026-08-09 7/350 2026-08-10 07:32 by 仁砚薪传
[基金申请] fileCode有新解读? +10 Tide man 2026-08-08 18/900 2026-08-09 12:55 by 仁砚薪传
信息提示
请填处理意见