24小时热门版块排行榜    

查看: 214  |  回复: 2
当前主题已经存档。
【悬赏金币】回答本帖问题,作者hotoil将赠送您 60 个金币

hotoil

铜虫 (正式写手)

[求助] 【求助:matlab程序提速】+【有效期至2009年01月03日】,

本人编写了采用TVD格式的Lax-Friedrichs算法求解偏微分方程的matlab程序,请高人帮助提高该程序的运行速度!有问题联系qq350204939
syms q1 q2 q3;
denL=1000;
D=0.146;
A=pi/4*D^2;
qIG=0;
qIL=0;
ang=0;
z=1;
R=100000/300;%J/(kg*K),空气;R=Rm*1000/M_G=8.3143*1000/M_G.
T=273.15+5;
XL=10000;
tstep=0.01;
xstep=200;
m=XL/xstep;
t_N=2400;
fw=0.02;
g=9.8;
dpdx=2/D*fw*505*(0.04*4/pi/D^2)^2;
Q=[q1;q2;q3];%其中 y=u*h;
F=[q1*q3/(q1+q2);q2*q3/(q1+q2);q3^2/(q1+q2)+z*R*T*q1/(1-q2/denL)];
S=[q1/(1-q2/denL)*qIG/A;denL*qIL/A; -2/D*fw*q3^2/(q1+q2)-(q1+q2)*g*sin(ang)];
dFdQ=jacobian(F,Q);
lamda=eig(dFdQ);
lamdaJ=ones(3,m);
FL=ones(3,1);
FLM=ones(3,1);
FR=ones(3,1);
FRM=ones(3,1);
F_TVDLFJ=ones(3,1);
F_TVDLFJ1=ones(3,1);
OLR=ones(3,1);
QJnmid=ones(3,1);
QJ1nmid=ones(3,1);
QJn1=ones(3,1);
QL=ones(3,1);
QQJ=ones(3,1);
QQJ1=ones(3,1);
QR=ones(3,1);
Qtem=ones(3,1);
SJ=ones(3,m+1);
Xtem=ones(3,1);
Ytem=ones(3,1);
vdenGn=ones(1,m+2);
vEln=ones(1,m+2);
vUmn=ones(1,m+2);
vdenGn1=ones(1,m+2);
vEln1=ones(1,m+2);
vUmn1=ones(1,m+2);
Ptem=1;
Ptem1=1;
Ptem2=1;
Ptem3=1;
qq1=1;
qq2=1;
qq3=1;
lamd_max=1;
lamdn_max=1;
n=1;
j=1;
for (j=2:m+1)
    Ptem=10*100000+(XL-(j-1.5)*xstep)*dpdx;
    vdenGn(j)=Ptem/(z*R*T);
    vEln(j)=0.5;
    vUmn(j)=0.04*4/pi/D^2;
end
Ptem=10*100000+XL*dpdx;
vdenGn(1)=Ptem/(z*R*T);
vEln(1)=0.5;
vUmn(1)=0.04*4/pi/D^2;
QJ(:,1)=subs(Q,{q1,q2,q3},{vdenGn(1)*(1-vEln(1)),denL*vEln(1),(vdenGn(1)*(1-vEln(1))+denL*vEln(1))*vUmn(1)});
Ptem=10*100000;
vdenGn(m+2)=Ptem/(z*R*T);
vEln(m+2)=0.5;
vUmn(m+2)=0.04*4/pi/D^2;
QJ(:,m+2)=subs(Q,{q1,q2,q3},{vdenGn(m+2)*(1-vEln(m+2)),denL*vEln(m+2),(vdenGn(m+2)*(1-vEln(m+2))+denL*vEln(m+2))*vUmn(m+2)});
vtn=0;
while (vtn     lamdn_max=1;
    if (vtn+tstep<=1000)
        vEln1(1)=0.5;
        vUmn1(1)=0.04/A;
    else
        if(vtn+tstep>1000&vtn+tstep<1010)
            vEln1(1)=1/(2+(n+1-1000/tstep)*tstep/10);
            vUmn1(1)=0.02/A*(2+(n+1-1000/tstep)*tstep/10);;
        else
            vEln1(1)=1/3;
            vUmn1(1)=0.06/A;
        end
    end%已知边界条件
    vdenGn1(1)=vdenGn(1);
    F_TVDLFJ=subs(F,{q1,q2,q3},{vdenGn1(1)*(1-vEln1(1)),denL*vEln1(1),(vdenGn1(1)*(1-vEln1(1))+denL*vEln1(1))*vUmn1(1)});
    for (j=2:m)
        qq1=vdenGn(j)*(1-vEln(j));
        qq2=denL*vEln(j);
        qq3=(vdenGn(j)*(1-vEln(j))+denL*vEln(j))*vUmn(j);
        lamdaJ(:,j)=subs(lamda,{q1,q2,q3},{qq1,qq2,qq3});
        QJ(:,j)=subs(Q,{q1,q2,q3},{qq1,qq2,qq3});
        SJ(:,j)=subs(S,{q1,q2,q3},{qq1,qq2,qq3});
        qq1=vdenGn(j+1)*(1-vEln(j+1));
        qq2=denL*vEln(j+1);
        qq3=(vdenGn(j+1)*(1-vEln(j+1))+denL*vEln(j+1))*vUmn(j+1);
        QJ(:,j+1)=subs(Q,{q1,q2,q3},{qq1,qq2,qq3});
        SJ(:,j+1)=subs(S,{q1,q2,q3},{qq1,qq2,qq3});
        if(j>2)%计算QQ(:,j)
            Xtem=QJ(:,j)-QJ(:,j-1);
            Ytem=QJ(:,j+1)-QJ(:,j);
        else%if(j==2)
            Ytem=QJ(:,j+1)-QJ(:,j);
            Xtem=Ytem;%(Xtem+Ytem)/2;
        end
        for(k=1:3)
          QQJ(k)=1/2*(sign(Xtem(k))+sign(Ytem(k)))*min(abs(Xtem(k)),abs(Ytem(k)));
        end
        if(j             Xtem=QJ(:,j+1)-QJ(:,j);
            Ytem=QJ(:,j+2)-QJ(:,j+1);
        else%if(j==m)
            Xtem=QJ(:,j+1)-QJ(:,j);
            Ytem=Xtem;%(Xtem+Ytem)/2;
        end
        for(k=1:3)
          QQJ1(k)=1/2*(sign(Xtem(k))+sign(Ytem(k)))*min(abs(Xtem(k)),abs(Ytem(k)));
        end
        Qtem=QJ(:,j)+1/2*QQJ(;%
        FRM=subs(F,{q1,q2,q3},{Qtem(1),Qtem(2),Qtem(3)});
        Qtem=QJ(:,j)-1/2*QQJ(;
        if(j==2)
            Qtem=QJ(:,j-1);
        end
        FLM=subs(F,{q1,q2,q3},{Qtem(1),Qtem(2),Qtem(3)});
        QJnmid=QJ(:,j)-1/2*tstep/xstep*(FRM-FLM)+1/2*tstep*SJ(:,j);
        QL=QJnmid+1/2*QQJ(;
        Qtem=QJ(:,j+1)+1/2*QQJ1(;% QQJ1未赋值就用了
        if(j==m)
            Qtem=QJ(:,j+2);
        end
        FRM=subs(F,{q1,q2,q3},{Qtem(1),Qtem(2),Qtem(3)});
        Qtem=QJ(:,j+1)-1/2*QQJ1(;
        FLM=subs(F,{q1,q2,q3},{Qtem(1),Qtem(2),Qtem(3)});
        QJ1nmid=QJ(:,j+1)-1/2*tstep/xstep*(FRM-FLM)+1/2*tstep*SJ(:,j+1);
        QR= QJ1nmid-1/2*QQJ1(;%%QQJ1应该可以换成QQJ试试
        lamd_max=max(abs(lamdaJ(:,j)))*max(abs(QR+QL)/2);%需检查
        OLR=tstep/xstep*lamd_max*(QR-QL);
        FR=subs(F,{q1,q2,q3},{QR(1),QR(2),QR(3)});
        FL=subs(F,{q1,q2,q3},{QL(1),QL(2),QL(3)});
        F_TVDLFJ1=1/2*(FL+FR)-1/2*1/(tstep/xstep)*OLR;
        QJn1=QJ(:,j)-tstep/xstep*(F_TVDLFJ1- F_TVDLFJ)+tstep*SJ(:,j);
        F_TVDLFJ=F_TVDLFJ1;
        qq1=QJn1(1);
        qq2=QJn1(2);
        qq3=QJn1(3);
        vEln1(j)=qq2/denL;
        vdenGn1(j)=qq1/(1-vEln1(j));
        vUmn1(j)=qq3/(qq1+qq2);
        if(lamd_max>lamdn_max)
            lamdn_max=lamd_max;
        end
    end
    vtn=vtn+tstep;
    tstep=1*xstep/lamdn_max;
    vdenGn1(m+2)=10*100000/(z*R*T);%已知边界条件
    vEln1(m+2)=vEln(m+2);
    vUmn1(m+2)=vUmn(m+2);
    F_TVDLFJ1=subs(F,{q1,q2,q3},{vdenGn1(m+2)*(1-vEln1(m+2)),denL*vEln1(m+2),(vdenGn1(m+2)*(1-vEln1(m+2))+denL*vEln1(m+2))*vUmn1(m+2)});
    QJn1=QJ(:,m+1)-tstep/xstep*(F_TVDLFJ1- F_TVDLFJ)+tstep*SJ(:,m+1);
    qq1=QJn1(1);
    qq2=QJn1(2);
    qq3=QJn1(3);
    vEln1(m+1)=qq2/denL;
    vdenGn1(m+1)=qq1/(1-vEln1(m+1));
    vUmn1(m+1)=qq3/(qq1+qq2);
    Ptem1=z*R*T*vdenGn(1);
    Ptem2=z*R*T*vdenGn(2);
    Ptem3=z*R*T*vdenGn1(2);
    Ptem=(Ptem3+(Ptem1-Ptem2)+Ptem1)/2;
    vdenGn1(1)=Ptem/(z*R*T);
    vEln1(m+2)=(vEln1(m+1)+vEln(m+2)-vEln(m+1)+vEln(m+2))/2;
    vUmn1(m+2)=(vUmn1(m+1)+vUmn(m+2)-vUmn(m+1)+vUmn(m+2))/2;
    n=n+1;
    vdenGn=vdenGn1;
    vEln=vEln1;
    vUmn=vUmn1;
    if(mod(n,100)==0)
        clear maplemex;
    end
end

[ Last edited by hotoil on 2008-11-20 at 10:12 ]
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

chjw2010

铁杆木虫 (著名写手)

项目经理

不清楚,帮楼主顶一下了!
新的一年!
2楼2008-11-19 15:11:51
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 hotoil 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿吉林大学材料学硕321求调剂 +9 Ymlll 2026-03-18 12/600 2026-03-20 00:01 by 23Postgrad
[考研] 0703化学调剂 ,六级已过,有科研经历 +12 曦熙兮 2026-03-15 12/600 2026-03-19 19:42 by maocaozhuxi
[考博] 东华理工大学化材专业26届硕士博士申请 +8 zlingli 2026-03-13 8/400 2026-03-19 16:32 by 轻松不少随
[考研] 能源材料化学课题组招收硕士研究生8-10名 +4 脱颖而出 2026-03-16 12/600 2026-03-19 16:17 by 脱颖而出
[考研] 0703化学调剂 +4 18889395102 2026-03-18 4/200 2026-03-19 16:13 by 30660438
[考研] 271材料工程求调剂 +6 .6lL 2026-03-18 6/300 2026-03-19 15:41 by haoshis
[考研] 本人考085602 化学工程 专硕 +17 不知道叫什么! 2026-03-15 19/950 2026-03-19 15:06 by 尽舜尧1
[考研] 材料与化工求调剂 +7 为学666 2026-03-16 7/350 2026-03-19 14:48 by 尽舜尧1
[考研] 317求调剂 +3 申子申申 2026-03-19 6/300 2026-03-19 14:16 by 申子申申
[考研] 求调剂,一志愿:南京航空航天大学大学 ,080500材料科学与工程学硕,总分289分 +3 @taotao 2026-03-19 3/150 2026-03-19 14:07 by peike
[考研] 0817调剂 +3 没有答案_ 2026-03-14 3/150 2026-03-19 09:51 by Xu de nuo
[考研] 材料专硕英一数二306 +5 z1z2z3879 2026-03-18 5/250 2026-03-19 07:43 by BruceLiu320
[考研] 0703化学 305求调剂 +4 FY_yy 2026-03-14 4/200 2026-03-19 05:54 by anny19840123
[考研] 304求调剂 +6 司空. 2026-03-18 6/300 2026-03-18 23:03 by 星空星月
[考研] 330求调剂 +3 小材化本科 2026-03-18 3/150 2026-03-18 21:55 by 无懈可击111
[考研] 考研求调剂 +3 橘颂. 2026-03-17 4/200 2026-03-17 21:43 by 有只狸奴
[考研] 302求调剂 +4 小贾同学123 2026-03-15 8/400 2026-03-17 10:33 by 小贾同学123
[论文投稿] 有没有大佬发小论文能带我个二作 +3 增锐漏人 2026-03-17 4/200 2026-03-17 09:26 by xs74101122
[考研] 085601材料工程315分求调剂 +3 yang_0104 2026-03-15 3/150 2026-03-15 10:58 by peike
[考研] 266求调剂 +4 学员97LZgn 2026-03-13 4/200 2026-03-14 08:37 by zhukairuo
信息提示
请填处理意见