马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
<P>我的程序是要用牛顿节点法进行管网流量和压力的计算。我编的程序是这样的:<BR>%变量输入<BR>n=13;%节点数<BR>m=15;%管段数<BR>P0=3000;%气源压力<BR>dPmax=850;%最大允许压降<BR>rn=0.7174;%标况下燃气密度<BR>Tn=273;%标准状况下燃气的温度<BR>T=293;%燃气的温度<BR>v=14.5*10^(-6);%燃气动力黏度</P>
<P>%节点矩阵的形成<BR>N=[1 100;<BR> 2 100;<BR> 3 300;<BR> 4 200;<BR> 5 300;<BR> 6 100;<BR> 7 300;<BR> 8 200;<BR> 9 300;<BR> 10 200;<BR> 11 100;<BR> 12 200;<BR> 13 200];<BR>%管段矩阵的形成<BR>G=[1 1 7 300 400;<BR> 2 1 4 350 600;<BR> 3 4 5 250 450;<BR> 4 4 8 150 400;<BR> 5 5 9 200 500;<BR> 6 7 8 200 500;<BR> 7 8 9 200 300;<BR> 8 2 3 100 400;<BR> 9 1 3 150 250;<BR> 10 1 2 150 200;<BR> 11 5 6 125 200;<BR> 12 7 10 150 200;<BR> 13 7 11 125 200;<BR> 14 9 12 125 200;<BR> 15 9 13 150 200];<BR>A=zeros(n,m);<BR>G1=G(:,1);%管段矩阵的管段数<BR>G2=G(:,2);%管段矩阵的管段起点<BR>G3=G(:,3);%管段矩阵的管段终点<BR>D=G(:,4);%管段矩阵的管段直径</P>
<P>%关联矩阵的形成<BR>for i=1:n<BR> for j=1:m<BR> if G2(j)==i<BR> A(i,j)=-1;<BR> elseif G3(j)==i<BR> A(i,j)=1;<BR> end<BR> end<BR>end<BR>A1=A([2:n],:);%去掉气源点以后的基本关联矩阵</P>
<P>%进行迭代<BR>%求各个管段的导纳<BR>Q=[100 100 100 100 100 100 100 100 100 100 100 100 100 100 100]';%假设初始各个管段的流量都为100<BR>c=1;<BR>for w=1:c;<BR>Re=4*(Q./D)/(pi*v);%计算各个管段的Re<BR>B=0.11*(0.1./D+68./Re).^0.25;%计算各个管道的沿程阻力系数<BR>Length=G(:,5);%管段矩阵的管段长度<BR>K=6.26*10^7*(B./D.^5).*Length*(rn*T/Tn);%计算各个管段的管道常数<BR>dP=K.*Q.^2;%计算各个管段的压力降<BR>g=Q./dP;%计算各个管段的导纳<BR>Y=A1*diag(g)*A1';%计算管网的系数矩阵</P>
<P>%计算第一次迭代结束时各个节点的压力偏差<BR>L=N(:,2);%各个节点的流量<BR>delaP=Y\L((2:13),:);%迭代结束时各个节点的压力偏差<BR>P=P0-delaP%各个节点压力向量<BR>dP=-A1'*P;%重新计算各个管段的压力降<BR>%重新计算各个管段的流量<BR>S=ones(15,1);<BR>for a=1:m;<BR> if dP(a)>0<BR> S(a)=1;<BR> elseif dP(a)<0<BR> S(a)=-1;<BR> end;<BR>end;<BR>Q=S.*(S.*(dP./K)).^0.5;%重新计算各个管段的流量<BR>Re=4*S.*(Q./D)/pi;%重新计算各个管段的Re<BR>B=0.11*(0.1./D+68./Re).^0.25;%计算各个管道的沿程阻力系数<BR>K=6.26*10^7*(B./D.^5).*Length*(rn*T/Tn);%计算各个管段的管道常数<BR>Q=(S.*(dP./K)).^0.5;%迭代结束时各个管段的流量<BR>end;<BR>但是怎么算结果都是第一次运算的结果。<BR>另外怎么逐次将前后两次计算的结果流量向量进行比较呀?<BR>在此先谢了!</P> |