拟一维喷管流动的数值解法(MATLAB)代码

合集下载

一维波动方程加权差分格式求数值解matlab程序

一维波动方程加权差分格式求数值解matlab程序

一维波动方程是描述波动传播的数学模型,在工程和物理学等领域有着重要的应用。

求解一维波动方程的数值解是一项具有挑战性的任务,对于大多数情况而言,解析解并不容易得到,因此数值方法是一种有效的求解途径。

本文将以加权差分格式为例,探讨如何使用Matlab程序求解一维波动方程的数值解。

一、一维波动方程的数学模型一维波动方程描述了空间维度和时间维度上的波动传播规律,在无阻尼情况下可以用如下的偏微分方程表示:∂^2u/∂t^2 = c^2∂^2u/∂x^2其中u(x, t)是波动的位移,c是波速,x和t分别是空间和时间的变量。

这是一个典型的双变量偏微分方程,求解这样的方程通常需要借助数值方法。

二、加权差分格式加权差分格式是求解偏微分方程数值解的一种方法,它将偏微分方程的微分算子用离散化的差分算子来逼近,得到一个离散的代数方程组,再利用数值计算方法来求解这个代数方程组。

对于一维波动方程,我们可以采用加权差分格式来进行求解。

1. 空间上的离散化对于空间上的离散化,我们可以采用有限差分法来逼近微分算子,通常采用中心差分格式。

假设在空间上我们将取n个离散点,空间步长为Δx,则可以得到以下近似:∂^2u/∂x^2 ≈ (u(x+Δx) - 2u(x) + u(x-Δx))/Δx^2将这个近似代入原方程,就可以得到离散化后的代数方程组。

2. 时间上的离散化对于时间上的离散化,我们可以采用显式或隐式的时间离散化方法。

在这里我们以显式的欧拉方法为例,假设在时间上我们将取m个离散点,时间步长为Δt,则可以得到以下近似:∂^2u/∂t^2 ≈ (u(x, t+Δt) - 2u(x, t) + u(x, t-Δt))/Δt^2将这个近似代入原方程,就可以得到离散化后的代数方程组。

3. 加权差分格式的权重选择加权差分格式需要指定一个权重参数来对离散化的方程进行求解,典型的有中心差分格式、向前差分格式和向后差分格式等。

选择合适的差分格式能够提高数值解的稳定性和精度。

一维激波管问题matlab编程

一维激波管问题matlab编程

一维激波管问题matlab编程一维激波管问题是流体力学中的经典问题之一,也是研究激波传播和激波相互作用的重要工具。

在这篇文章中,我们将使用Matlab 编程来解决一维激波管问题,并分析其结果。

让我们先来了解一下什么是一维激波管问题。

一维激波管是由两个不同状态的流体组成的管道,其中一个是初始状态,另一个是激波通过后的状态。

该问题的目标是确定激波传播的速度和管道中流体的各个参数的变化情况。

为了解决这个问题,我们可以使用Matlab编程来模拟激波管中的流体流动。

首先,我们需要定义一些初始参数,如初始状态的流体密度、速度和压力,以及管道的长度。

然后,我们可以使用数值方法,如有限差分法或有限元法,来求解激波管中的流体流动方程。

在Matlab中,我们可以使用函数和循环来实现这个模拟过程。

首先,我们可以定义一个函数来计算流体的速度和压力的变化。

然后,我们可以使用循环来迭代计算管道中每个位置的流体参数。

在每个时间步长内,我们可以根据激波传播的速度和管道中的参数变化来更新流体的状态。

在模拟过程中,我们可以通过绘制图表来观察激波的传播和流体参数的变化。

例如,我们可以绘制流体的速度和压力随时间和位置的变化曲线,以及激波的传播曲线。

通过Matlab编程,我们可以得到一维激波管中流体的各个参数随时间和位置的变化情况。

这些结果可以帮助我们更好地理解激波传播和激波相互作用的机制。

此外,通过调整初始参数和管道的长度,我们还可以研究不同情况下激波传播的特性。

使用Matlab编程来解决一维激波管问题是一种有效的方法。

通过模拟激波的传播和流体参数的变化,我们可以更好地理解激波管中的流体流动。

这种方法不仅可以帮助我们解决实际问题,还可以为激波传播和激波相互作用的研究提供重要的参考。

希望本文对读者有所帮助,谢谢阅读。

(完整)拟一维喷管流动的数值解法(MATLAB)代码

(完整)拟一维喷管流动的数值解法(MATLAB)代码

拟一维喷管流动的数值解法(MATLAB)代码数值计算代码%拟一维喷管流动的数值解%亚声速—超声速,非守恒形式function main()clear;clc;r=1。

4;%绝热指数N=1001; %时间步长i=31; %网格数目L=3; %喷管长度C=0.5; %柯朗数dx=L/(i—1);%空间步长dt(N)=0;%时间步长x=linspace(0,L,i); %网格点横坐标A=1+2.2*(x—1.5).^2; %喷管面积%赋值M(N,i)=0;T(N,i)=0;V(N,i)=0;%初始条件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)));dt(k)=min(t);%预估值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)。

喷管内流场计算程序

喷管内流场计算程序

喷管内流场计算程序!本程序采用三种格式对Buckley-Leverett方程进行求解!计算过程中采用人工粘性进行处理!name,name1是用于进行变文件名输出数据的字符串参数!n,m分别表示空间网格节点和选择哪种计算方法!uN,SN分别表示前一时刻的速度、人工粘性值!u,FN分别表示这一时刻的速度,前一时刻对流项的函数值!dx,dt,time分别表示空间尺度、时间尺度和总计算时间!Cx分别表示人工粘性系数program mainimplicit nonecharacter(len=15) :: name,name1integer :: i,n=201,mreal(kind=8) :: uN(201),SN(201),FN(201)real(kind=8) :: u(201),AN(201)real(kind=8) :: dx,dt,time,t,Cx!给定输入参数,对于不同的边界条件需要修改dx=2.0/(n-1)t=0.0time=0.4dt=0.0001Cx=0.006m=2!给定初始时刻给定的速度值,不同边界条件时需要修改do i=1,nif(-1.0+(i-1)*dx<=0.0.and.-1.0+(i-1)*dx>=-0.5)then uN(i)=1.0elseuN(i)=0.0end ifend do!选择方法进行计算if(m==1) thenname1="Lax_Friedrichs"do while(t<=time)t=t+dtdo i=1,nFN(i)=4.0*uN(i)**2/(4*uN(i)**2+(1-uN(i))**2) end dodo i=2,n-1SN(i)=Cx*(uN(i+1)-2*uN(i)+uN(i-1))u(i)=(uN(i+1)+uN(i-1))/2.0-dt*(FN(i+1)-FN(i-1))/(2.0*dx)+SN(i) end dou(1)=uN(1)u(n)=uN(n)do i=1,nuN(i)=u(i)end doend doelse if(m==2) thenname1="Lax_Wendroff"do while(t<=time)t=t+dtdo i=1,nFN(i)=4.0*uN(i)**2/(4*uN(i)**2+(1-uN(i))**2)end dodo i=1,n-1if(uN(i)==uN(i+1)) thenAN(i)=1.0elseAN(i)=(FN(i+1)-FN(i))/(uN(i+1)-uN(i))end ifend dodo i=2,n-1SN(i)=Cx*(uN(i+1)-2*uN(i)+uN(i-1))u(i)=uN(i)-dt*(FN(i+1)-FN(i-1))/(dx*2.0)+(AN(i)*dt/dx)**2*(uN(i+1)-& uN(i))/2.0-(AN(i-1)*dt/dx)**2*(uN(i)-uN(i-1))/2.0+SN(i)end dou(1)=uN(1)u(n)=uN(n)do i=1,nuN(i)=u(i)end doend doelsename1="upwind"do while(t<=time)t=t+dtdo i=1,nFN(i)=4.0*uN(i)**2/(4*uN(i)**2+(1-uN(i))**2)end dodo i=1,n-1if(uN(i)==uN(i+1)) thenAN(i)=1.0elseAN(i)=(FN(i+1)-FN(i))/(uN(i+1)-uN(i))end ifend dodo i=2,n-1SN(i)=Cx*(uN(i+1)-2*uN(i)+uN(i-1))u(i)=uN(i)-dt*(FN(i+1)-FN(i-1))/(dx*2.0)+abs(AN(i)*dt/dx)*(uN(i+1)-& uN(i))/2.0-abs(AN(i-1)*dt/dx)*(uN(i)-uN(i-1))/2.0+SN(i)end dou(1)=uN(1)u(n)=uN(n)do i=1,nuN(i)=u(i)end doend doend ifwrite(name,"(A15)") name1open(10,file=''//trim(adjustl(name))//'.dat')do i=1,n!输出速度值,对于不同边界条件需要修改write(10,"(f9.5,2x,f9.5)") -1.0+(i-1)*dx,u(i)end dostopend。

一维流体差分 matlab

一维流体差分 matlab

一维流体差分 matlab
在处理一维流体动力学问题时,差分方法是一种常用的数值求
解技术。

在Matlab中,你可以使用差分方法来离散化一维流体动力
学方程,然后求解离散化后的方程以获得数值解。

首先,你需要将一维流体动力学方程离散化。

例如,如果你正
在处理一维不可压缩流体的流动问题,你可以使用连续方程和动量
方程来描述流体的行为。

然后,你可以将这些偏微分方程转化为差
分方程,例如使用有限差分方法。

在Matlab中,你可以编写一个函数来表示差分方程,并使用内
置的数值求解器(如ode45)来求解这些方程。

你需要定义网格、
边界条件和初始条件,并使用适当的差分格式(如向前差分、向后
差分或中心差分)来离散化偏微分方程。

然后,你可以使用Matlab
的矩阵运算和求解器来解决离散化后的方程。

此外,Matlab还提供了一些专门用于求解偏微分方程的工具箱,如Partial Differential Equation Toolbox,它包含了一些内置
的函数和工具,可以帮助你更轻松地处理一维流体动力学问题的数
值求解。

总之,使用Matlab进行一维流体动力学问题的差分求解涉及到离散化方程、定义边界条件和初始条件、选择合适的差分格式,以及使用Matlab的数值求解器或工具箱来求解离散化后的方程。

希望这些信息能够帮助你更好地理解在Matlab中应用差分方法求解一维流体动力学问题的过程。

matlab流体仿真代码

matlab流体仿真代码

matlab流体仿真代码在MATLAB中,你可以使用流体仿真工具箱(如CFD Toolbox)进行流体仿真。

然而,编写流体仿真的代码是非常复杂的,因为它涉及到很多物理原理和数学模型。

以下是一个简单的示例,使用MATLAB进行一维流体动力学仿真。

请注意,这只是一个非常基础的示例,真正的流体仿真可能需要更复杂的代码和更多的物理原理。

matlab% 参数设定L = 10; % 管道长度D = 1; % 管道直径rho = 1.225; % 空气密度mu = 1.7894e-5; % 空气动力粘度Re = rho * U * D / mu; % 雷诺数U = 5; % 流速P1 = 101325; % 入口压力P2 = 100000; % 出口压力g = 9.81; % 重力加速度% 一维流动方程% 连续性方程: A1*U1 = A2*U2% 动量方程: P1 + 0.5*rho*U1^2 + rho*g*h1 = P2 + 0.5*rho*U2^2 + rho*g*h2% 能量方程: (P1/rho) + 0.5*U1^2 + g*h1 = (P2/rho) + 0.5*U2^2 + g*h2 A1 = pi*D^2/4; % 入口面积A2 = pi*D^2/4; % 出口面积h1 = 0; % 入口高度h2 = 0; % 出口高度% 解动量方程得到U2U2 = sqrt((2*(P1-P2) + rho*(U^2- U2^2) + 2*rho*g*(h1-h2)) / rho);% 输出结果fprintf('入口流速: %.2f m/s\n', U);fprintf('出口流速: %.2f m/s\n', U2);这只是一个非常简单的示例,真实的流体仿真可能需要考虑更多的因素,如流体的粘性、密度、热传导、压力变化等。

在MATLAB中,你可以使用内置的流体仿真工具箱,如CFD Toolbox,或者第三方工具箱,如ANSYS Fluent的MATLAB接口,来进行更复杂的流体仿真。

计算流体力学大作业

计算流体力学大作业

计算液体力学基础及应用课程期末作业-----程序调试最终版学号:134212059 姓名:徐影ContentsCFD模型示意图一、拟一维喷管理论解求解二、拟一维喷管的CFD求解三、理论值与CFD解的对比CFD模型示意图两圆弧直径为10米,喉部直径为0.59米,长为3米clear all;I=imread('xuying.png'); imshow(I)一、拟一维喷管理论解求解喷管内马赫数的变化公依赖于面积比A/A0,所以可以将Ma作为x的函数1.2.采用隐函数绘图给出理论的马赫数解gamma=1.4;h0=59/100;% 取学生学号后两位数的十分之一作喉部直径syms x Ma A_x y;% xz为x坐标,Ma为马赫数A_x=((10.59-2*sqrt(25-(x-1.5)^2))/0.59)^2;% A_x为面积系数figure('Color',[1 1 1]);set(gcf,'position',[0,0,1.5*468,468]);plot_Ma=A_x^2-(2/(gamma+1)+(gamma-1)/(gamma+1)*y^2)^((gamma+1)/(gamma-1))/y^2;subplot(1,2,1);gca=ezplot(plot_Ma,[0,3]);xlabel('x');ylabel('马赫数');title('采用隐函数求解的马赫数结果');grid on; % 得到两条曲线,由递增规律选取上升曲线段,从该曲线上得到一系列点的坐标为[x0,Ma0]load tk.mat;x_0=tk(:,1);Ma_0=tk(:,2);% 这里load的数据采用某算法从上面出的图取点拟合得到,用到polyval和polyfit函数subplot(1,2,2);plot(x_0,Ma_0);xlabel('x');ylabel('马赫数');title('马赫数的理论解');grid on;求出马赫数后,压力、密度、温度的变化都是Ma的函数,求出理论值并绘图1.2.3.p_0=(1+(gamma-1)/2*Ma_0.^2).^(-gamma/(gamma-1));rho_0=(1+(gamma-1)/2*Ma_0.^2).^(-1/(gamma-1));t_0=(1+(gamma-1)/2*Ma_0.^2).^-1;figure('Color',[1 1 1]);set(gcf,'position',[0,0,1.5*468,1.5*468]);subplot(3,1,1);plot(x_0,p_0);title('压力比理论值');xlabel('x');ylabel('p');grid on; subplot(3,1,2);plot(x_0,rho_0);title('密度比理论值');xlabel('x');ylabel('rho');grid on; subplot(3,1,3);plot(x_0,t_0);title('温度比理论值');xlabel('x');ylabel('T');grid on;二、拟一维喷管的CFD求解clear all;L=3;N=31;dx=L/(N-1);x=linspace(0,L,N);C=0.5;n=2000;student_num=59;A=((10+student_num/100-2*((25-((x-1.5).^2))).^0.5)/(student_num/100)).^2;%面积比A/A_0与x坐标的关系第一步,密度比、温度比、速度比的初始条件设定1.2.3.Rou=1-0.3146*x;rhobi=zeros(1,n);T=1-0.2314*x;V=(0.1+1.09*x).*sqrt(T);P_rou_t=zeros(size(Rou));P_v_t=zeros(size(Rou));P_T_t=zeros(size(Rou));P_rou_t_2=zeros(size(Rou));P_v_t_2=zeros(size(Rou));P_T_t_2=zeros(size(Rou));第二步,预估步第三步,并求Δt,求rou, V, T的预测量1.2.3.第四步,修正步第五步,求平均时间导数1.2.3.最后,得到t+Delta t时刻流动参数的修正值为1.2.3.第七步,边界条件处理for j=1:ntemp=Rou(16);% 第二步,预估步for i=2:30P_rou_t(i)=-V(i)*((Rou(i+1)-Rou(i))/dx)-Rou(i)*((V(i+1)-V(i))/dx)-Rou(i)*V(i)*((log(A(i+1))-log(A(i)))/dx);P_v_t(i)=-V(i)*((V(i+1)-V(i))/dx)-((T(i+1)-T(i))/dx+((Rou(i+1)-Rou(i))/dx)*T(i)/Rou(i))*1/1.4;P_T_t(i)=-V(i)*((T(i+1)-T(i))/dx)-0.4*T(i)*(((V(i+1)-V(i))/dx)+V(i)*((log(A(i+1))-log(A(i)))/dx));end% 第三步,并求Δt,求rou, V, T的预测量dt=C*(dx./(V(2:30)+sqrt(T(2:30))));dt=min(dt);Rou1(2:30)=Rou(2:30)+P_rou_t(2:30).*dt;V1(2:30)=V(2:30)+P_v_t(2:30).*dt;T1(2:30)=T(2:30)+P_T_t(2:30).*dt;V1(1)=V(1);T1(1)=T(1);Rou1(1)=Rou(1);% 第四步,修正步%for i=2:30P_rou_t_2(i)=-V1(i)*((Rou1(i)-Rou1(i-1))/dx)-Rou1(i)*((V1(i)-V1(i-1))/dx)-Rou1(i)*V1(i)*((log(A(i))-log(A(i-1)))/dx); P_v_t_2(i)=-V1(i)*((V1(i)-V1(i-1))/dx)-((T1(i)-T1(i-1))/dx+((Rou1(i)-Rou1(i-1))/dx)*T1(i)/Rou1(i))*1/1.4;P_T_t_2(i)=-V1(i)*((T1(i)-T1(i-1))/dx)-0.4*T1(i)*(((V1(i)-V1(i-1))/dx)+V1(i)*((log(A(i))-log(A(i-1)))/dx));end% 第五步,求平均时间导数P_rou_av=(P_rou_t+P_rou_t_2)/2;P_v_av=(P_v_t+P_v_t_2)/2;P_T_av=(P_T_t+P_T_t_2)/2;% 最后,得到t+Delta t时刻流动参数的修正值为Rou(2:30)=Rou(2:30)+P_rou_av(2:30).*dt;T(2:30)=T(2:30)+P_T_av(2:30).*dt;V(2:30)=V(2:30)+P_v_av(2:30).*dt;P(2:30)=Rou(2:30).*T(2:30);% 第七步,边界条件处理V(1)=2*V(2)-V(3);V(31)=2*V(30)-V(29);Rou(31)=2*Rou(30)-Rou(29);T(31)=2*T(30)-T(29);p=Rou.*T;Ma=V./sqrt(T);rhobi(j)=abs((temp-Rou(16))/temp); % 计算后一次时间步与前一时间步之间的密度比的变化情况,以此检验CFD过程收敛性质end最终结果的绘图figure('Color',[1 1 1]);set(gcf,'position',[0,0,1.2*468,1.5*468]);subplot(3,1,1);plot(1:n,rhobi);xlabel('x');ylabel('Ma');title('相对密度比');grid on;% 密度比收敛情况绘图subplot(3,1,2);plot(x,Ma);title('喷管内马赫数分布');xlabel('x');ylabel('Ma');grid on;% 马赫数CFD值绘图subplot(3,1,3);plot(x,p);title('喷管内压力分布');xlabel('x');ylabel('p');grid on; % 压力分布CFD值绘图shu=[x;A;Ma;V;T;p;Rou];显示各参量最终计算结果fprintf('%6s\t%12s\t%12s\t%12s\t%12s\t%12s\t%12s\r\n','x','A/A_0','Ma','v/v_0','T/T_0','p/p_0','rho')% 依次显示坐标点、形状参数、马赫数、速度、温度、压力的结果fprintf('%6.1f\t%12.4f\t%12.4f\t%12.4f\t%12.4f\t%12.4f\t%12.4f\r\n',shu)x A/A_0 Ma v/v_0 T/T_0 p/p_0 rho0.0 3.1709 0.1859 0.1859 1.0000 1.0000 1.00000.1 2.8156 0.2124 0.2121 0.9975 0.9915 0.99390.2 2.5056 0.2389 0.2383 0.9956 0.9847 0.98900.3 2.2361 0.2711 0.2700 0.9922 0.9728 0.98050.4 2.0030 0.3056 0.3038 0.9885 0.9602 0.97140.5 1.8022 0.3451 0.3422 0.9834 0.9433 0.95910.6 1.6303 0.3882 0.3838 0.9775 0.9234 0.94470.7 1.4844 0.4364 0.4298 0.9700 0.8989 0.92670.8 1.3617 0.4891 0.4794 0.9611 0.8701 0.90540.9 1.2600 0.5469 0.5331 0.9502 0.8362 0.88001.0 1.1771 0.6096 0.5903 0.9374 0.7974 0.85071.1 1.1116 0.6776 0.6508 0.9224 0.7536 0.81701.2 1.0620 0.7507 0.7142 0.9051 0.7053 0.77921.3 1.0273 0.8289 0.7800 0.8855 0.6532 0.73761.4 1.0068 0.9119 0.8475 0.8636 0.5982 0.69271.5 1.0000 0.9998 0.9160 0.8394 0.5416 0.64521.6 1.0068 1.0921 0.9849 0.8132 0.4847 0.59601.7 1.0273 1.1887 1.0534 0.7853 0.4288 0.54611.8 1.0620 1.2893 1.1210 0.7559 0.3753 0.49641.9 1.1116 1.3934 1.1869 0.7255 0.3250 0.44802.0 1.1771 1.5009 1.2507 0.6943 0.2788 0.40152.1 1.2600 1.6113 1.3119 0.6629 0.2371 0.35762.2 1.3617 1.7245 1.3705 0.6315 0.2001 0.31682.3 1.4844 1.8398 1.4258 0.6006 0.1678 0.27952.4 1.6303 1.9576 1.4782 0.5702 0.1400 0.24552.5 1.8022 2.0764 1.5269 0.5408 0.1163 0.21512.6 2.0030 2.1983 1.5732 0.5122 0.0962 0.1879。

一维地下水运动MATLAB模拟

一维地下水运动MATLAB模拟

Problem 1The ground flow equation for 1D heterogeneous, isotropic porous medium with a constant aquifer thickness is given by:)(xhT x t h S∂∂∂∂=∂∂ Where h(x,t) is the hydraulic head, T(x) is the transmissivity, and S isthe storativity. The boundary conditions imposed are constant head hL (15m ) and hR (5m ) at the left and right ends of soil column, respectively. The initial condition is 0 or random number at each node. The length of aquifer is 1m (L=1m ). The storativity is 1 (S = 1).Develop a MATLAB program which can handle a heterogeneous transmissivity field using the implicit method.1) Test the program for the case of homogenous parameters, and compare the results with the results generated from flow equation withhomogenous transmissivity field (i.e., 22xh T t h S ∂∂=∂∂) 2) Test the program for patch- heterogeneous T field, which comprises atwo-zone T field with a fivefold difference in transmissivity (T 1=5T 2, T 1=0.01m 2s -1, T 2=0.002m 2s -1 ; or, T 1=0.2T 2, T 1=0.002m 2s -1, T 2=0.01m 2s -1) and an interface in the middle of the domain.Problem 1解答 1 理论推导非均质一维地下水运动方程为:()h hST t x x∂∂∂=∂∂∂ (1) 如右图,各个点的水头分别为12,,...,n h h h ,水头i h 和1i h +之间水力传导系数为i T 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

拟一维喷管流动的数值解法(MATLAB)代码
数值计算代码
%拟一维喷管流动的数值解
%亚声速-超声速,非守恒形式
function main()
clear;
clc;
r=1.4; %绝热指数
N=1001; %时间步长
i=31; %网格数目
L=3; %喷管长度
C=0.5; %柯朗数
dx=L/(i-1); %空间步长
dt(N)=0; %时间步长
x=linspace(0,L,i); %网格点横坐标
A=1+2.2*(x-1.5).^2; %喷管面积
%赋值
M(N,i)=0;
T(N,i)=0;
V(N,i)=0;
%初始条件
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)));
dt(k)=min(t);
%预估值
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;
V_t_1(2:i-1)=-V1(2:i-1).*(V1(2:i-1)-V1(1:i-2))./dx-1/r.*((T1(2:i-1)-T1(1:i-2))./dx+T1(2:i-1)./M1(2:i-1).*(M1(2:i-1)-M1(1:i-2))./dx);
T_t_1(2:i-1)=-V1(2:i-1).*(T1(2:i-1)-T1(1:i-2))./dx-(r-1).*T1(2:i-1).*((V1(2:i-1)-V1(1:i-2))./dx+V1(2:i-1).*log(A(2:i-1)./A(1:i-2))./dx);
%偏导数平均值
M_t_av(2:i-1)=0.5*(M_t(2:i-1)+M_t_1(2:i-1));
V_t_av(2:i-1)=0.5*(V_t(2:i-1)+V_t_1(2:i-1));
T_t_av(2:i-1)=0.5*(T_t(2:i-1)+T_t_1(2:i-1));
%内部网格点修正值
M(k+1,2:i-1)=M(k,2:i-1)+M_t_av(2:i-1)*dt(k);
V(k+1,2:i-1)=V(k,2:i-1)+V_t_av(2:i-1)*dt(k);
T(k+1,2:i-1)=T(k,2:i-1)+T_t_av(2:i-1)*dt(k);
%出口边界值
M(k+1,i)=2*M(k+1,i-1)-M(k+1,i-2);
V(k+1,i)=2*V(k+1,i-1)-V(k+1,i-2);
T(k+1,i)=2*T(k+1,i-1)-T(k+1,i-2);
%入口边界值
M(k+1,1)=1;
V(k+1,1)=2*V(k+1,2)-V(k+1,3);
T(k+1,1)=1;
end
end
图形处理代码
close all;
a=[1 51 101 151 201 701];
plot(x,M(a(1),:).*A(:)'.*V(a(1),:),'r--')
hold on
plot(x,M(a(2),:).*A(:)'.*V(a(2),:),'m.-')
plot(x,M(a(3),:).*A(:)'.*V(a(3),:),'g*-')
plot(x,M(a(4),:).*A(:)'.*V(a(4),:),'co-')
plot(x,M(a(5),:).*A(:)'.*V(a(5),:),'bh-')
plot(x,M(a(6),:).*A(:)'.*V(a(6),:),'k<-')
axis equal
legend('0dt','50dt','100dt','150dt','200dt','700dt')
figure
[ax,h1,h2]=plotyy(x,M(a(6),:),x,sqrt((M(a(6),:).^(1-r)-1)*5),'plot');
set(h1,'linestyle','-','marker','o','color','b');
set(h2,'linestyle','-','marker','*','color','r');
set(ax,'xtick',0:0.3:3)
set(ax(1),'ytick',0:0.1:1)
set(ax(2),'ytick',0:0.4:4)
set(h1,'linewidth',1.5)
set(h2,'linewidth',1.5)
set(get(ax(1),'xlabel'),'string','无量纲轴向距离(x)') set(get(ax(1),'ylabel'),'string','无量纲密度(M)') set(get(ax(2),'ylabel'),'string','马赫数(Ma)')
title('无量纲密度和马赫数定常分布数值解') legend('无量纲密度数值解','马赫数数值解')。

相关文档
最新文档