MATLAB偏微分方程有限差分法:算例六详解

求解无粘Burgers方程的初值问题:

==========答案===========

%%偏微分方程有限差分法实习题
%%算例六
%==================================================
%输入
clc;clear all
dx=0.02;%Δh
dt=0.02;%Δt
X=[-2 2];%x的取值范围,格式必须从最小到最大
T=[0.32 0.96];%截止时间T
UL0=0;   %边界条件
%==================================================
%初始值
x=X(1):dx:X(2);
for k=1:size(T,2)
%解析解公式:
u=0.*(x<-1)+(-0.5*sin(pi*x)).*(x>=(-1)&x<=1)+0.*(x>1);
%绘图
subplot(1,2,k);
plot(x,u); %默认实线为解析解真值
hold on
end
%==================================================
%差分格式解
for i=1:size(T,2)
t=0:dt:T(i);
LF=UL0.*ones(size(t,2),size(x,2)) ;   %【Lax-Friedrichs格式】边界
uu=UL0.*ones(size(t,2),size(x,2)) ;   %【迎风格式】边界
LW=UL0.*ones(size(t,2),size(x,2)) ;   %【Lax-Wendroff格式】边界
LF(1,:)=0.*(x<-1)+(-0.5*sin(pi*x)).*(x>=(-1)&x<=1)+0.*(x>1);%【Lax-Friedrichs格式】初始条件
uu(1,:)=0.*(x<-1)+(-0.5*sin(pi*x)).*(x>=(-1)&x<=1)+0.*(x>1);%【迎风格式】初始条件
LW(1,:)=0.*(x<-1)+(-0.5*sin(pi*x)).*(x>=(-1)&x<=1)+0.*(x>1);%【Lax-Wendroff格式】初始条件
    for m=2:size(t,2)           %时间上有16for n=2:size(x,2)-1       %空间上
          %Lax-Friedrichs格式
          LF(m,n)=0.5*(LF(m-1,n+1)+LF(m-1,n-1))-0.25*dt/dx*(LF(m-1,n+1)*LF(m-1,n+1)-LF(m-1,n-1)*LF(m-1,n-1));
          %Lax-Wendroff格式
          LW(m,n)=LW(m-1,n)-0.25*dt/dx*(LW(m-1,n+1)*LW(m-1,n+1)-LW(m-1,n-1)*LW(m-1,n-1))+0.125*dt/dx*dt/dx*((LW(m-1,n)+LW(m-1,n+1))*(LW(m-1,n+1)*LW(m-1,n+1)-LW(m-1,n-1)*LW(m-1,n-1))-(LW(m-1,n)+LW(m-1,n-1))*(LW(m-1,n)*LW(m-1,n)-LW(m-1,n-1)*LW(m-1,n-1)));
          end
          for n=2:size(x,2)
          %迎风格式
          uu(m,n)=uu(m-1,n)-0.5*dt/dx*(uu(m-1,n)*uu(m-1,n)-uu(m-1,n-1)*uu(m-1,n-1));
          end
    end
%==================================================
        %绘图
        hold on
        subplot(1,2,i);
        plot(x,LF(size(t,2),:),'r-');     %红色实线表示 Lax-Friedrichs格式
        plot(x,uu(size(t,2),:),'k--');  %黑色虚线表示 迎风格式
        plot(x,LW(size(t,2),:),'g-'); %绿色实线表示Lax-Wendroff格式
        str{i}=['Initial, T=' num2str(T(i))];
        str1{i}=['L-F, T=' num2str(T(i))];
        str2{i}=['Upwind, T=' num2str(T(i))];
        str3{i}=['L-W, T=' num2str(T(i))];
        legend(str{i},str1{i},str2{i},str3{i}); %生成图例
        legend('boxoff') %消除图例边框和背景
        xlim([-1.5 1.5]);
        ylim([-0.8 0.8]);
end
%==================================================

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空