24小时热门版块排行榜    

查看: 1065  |  回复: 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的回帖

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的回帖
查看全部 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循环无法执行。

谢谢回复,我现在知道当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的回帖

哈格不受伤

金虫 (小有名气)

引用回帖:
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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 HFw0lei2R37i 2026-08-14 5/250 2026-08-14 22:32 by 4wMiSEwB6436
[考研] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 HFw0lei2R37i 2026-08-14 6/300 2026-08-14 22:32 by 4wMiSEwB6436
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +23 医学老男孩 2026-08-13 49/2450 2026-08-14 20:02 by zhaifei
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +6 Tide man 2026-08-14 7/350 2026-08-14 18:36 by 正能量1斤
[基金申请] 奇怪,两个人的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
[硕博家园] 请教兼职经验 +3 是阿文鸭 2026-08-09 3/150 2026-08-14 12:07 by HER12025
[基金申请] 小木虫上这么多卖论文的,真有人买论文么?感觉没必要啊 +10 Tide man 2026-08-10 11/550 2026-08-14 10:30 by 沁言学术
[基金申请] FileCode能看出啥? +10 要乐观耀哥 2026-08-10 32/1600 2026-08-14 09:37 by 要乐观耀哥
[基金申请] 关于Filecode分析方法 +9 majunge000 2026-08-10 12/600 2026-08-13 23:20 by iwuli
[文学芳草园] 阿姨 +4 汪汪锅 2026-08-09 4/200 2026-08-13 19:43 by arzu_hma
[硕博家园] 一作与独作在应聘高校教师时区别大吗 +3 mbygzh 2026-08-08 4/200 2026-08-13 19:31 by 龙-樱
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] Filecode 又变了,巨变 +3 WH3796 2026-08-12 4/200 2026-08-13 14:13 by 小木虫6752397
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +11 Tide man 2026-08-11 11/550 2026-08-13 07:35 by 撸猫猫
[基金申请] 2026国自然放榜时间 +9 布布和一二 2026-08-08 9/450 2026-08-10 11:22 by xxxx2020
[基金申请] 这样的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 仁砚薪传
信息提示
请填处理意见