(完整)拟一维喷管流动的数值解法(MATLAB)代码
%拟一维喷管流动的数值解
%亚声速—超声速,非守恒形式
function main()
clear;
x=linspace(0,L,i); %网格点横坐标
A=1+2.2*(x—1.5).^2; %喷管面积
M(1,:)=1—0.3146*x;
T(1,:)=1-0。2314*x;
V(1,:)=(0。1+1.09*x).*(1—0。2314*x)。^0.5;
%按时间步长推进
for k=1:N—1
M_t(1:i-1)=—V(k,1:i-1)。*(M(k,2:i)-M(k,1:i—1))/dx-M(k,1:i-1)。*(V(k,2:i)—V
(k,1:i—1))/dx-M(k,1:i-1)。*V(k,1:i-1).*log(A(2:i)./A(1:i-1))/dx;
V_t(1:i—1)=-V(k,1:i-1)。*(V(k,2:i)-V(k,1:i—1))/dx—1/r.*((T(k,2:i)—T(k,1:i—1))
/dx+T(k,1:i-1)./M(k,1:i—1).*(M(k,2:i)-M(k,1:i—1))/dx);
T_t(1:i-1)=—V(k,1:i-1)。*(T(k,2:i)-T(k,1:i—1))/dx-(r-1)。*T(k,1:i-1)。*
((V(k,2:i)—V(k,1:i—1))/dx+V(k,1:i-1).*log(A(2:i)./A(1:i-1))/dx);
%求取内部网格点处最小时间步长
t=C*dx。/(V(k,2:i-1)+sqrt(T(k,2:i-1)));
M1(1:i-1)=M(k,1:i-1)+M_t(1:i-1)*dt(k);
V1(1:i—1)=V(k,1:i—1)+V_t(1:i—1)*dt(k);
T1(1:i-1)=T(k,1:i—1)+T_t(1:i—1)*dt(k);
M_t_1(2:i—1)=-V1(2:i—1)。*(M1(2:i—1)-M1(1:i-2))./dx—M1(2:i—1)。*(V1(2:i—1)
—V1(1:i—2))。/dx—M1(2:i-1).*V1(2:i—1)。*log(A(2:i-1)./A(1:i—2))。/dx;