寻找用于绘制截断错误的 matlab/maple 代码

计算科学 pde 数值分析 抛物线pde
2021-12-02 18:54:44

在此文本的第 18 页上:http ://www.dima.uniroma1.it/users/lsa_adn/MATERIALE/FDheat.pdf ,本页图 8 中的图表,我将如何在 matlab 或 maple 中编写合适的代码会产生这个图表吗?它是不同有限差分方法的不同截断误差的图表(在本文的最后一页,有不同有限差分方案近似精确解的代码。)

为了我更直接的需要,我有 PDE:

ut=uxx+sin(x+t)cos(x+t),ux(0,t)=sin(t),ux(1,t)=sin(1+t),u(x,0)=cos(x)

我想在 maple 中找到 pdsolve 的默认方法的截断误差并将其绘制在 maple 中,有人告诉我它应该是轴在之间的线性图。如何在枫树中实现这一点?Y104108

2个回答

仅用于创建绘图,这是生成类似于您引用的图形的 MATLAB 代码(我已经模拟了数据)

Dx = 2.^-(2:8);

% These errors to be generated by your code: mocked up here
E_FTCS = Dx.^1.7;
E_BTCS = 0.9*Dx.^1.8;
E_CN = Dx.^1.75;

E_ideal = Dx.^2;

% Create the plot
loglog(Dx,E_FTCS,'ko',Dx,E_BTCS,'k*',...
       Dx,E_CN,'ks',Dx,E_ideal,'k--')

legend({'FTCS','BTCS','CN','ideal'},'Location','northwest')
xlabel('\Delta x')
ylabel('Error: ||u-u_e||_2')
title('\Delta t = 5.0e-6 (constant)')

MATLAB 版本 R2014b 的输出图: 在此处输入图像描述

这可以在枫树中相当容易地完成。为此,我从您的其他问题中选择了 pde,因为该 pde 有一个精确的解决方案。

restart:with(plots):
pde:= diff(u(x, t), t) = diff(u(x, t), x, x)-sin(x+t)+cos(x+t);

首先,我们将检查您的确切解决方案是否满足 pde。为了这

ansol:=u(x, t)=cos(x+t);

0

零输出意味着精确解满足 pde。现在继续数值解,

ic:={u(x,0)=cos(x)};
bcs:={ D[1](u)(0,t)=-sin(t),D[1](u)(1,t)=-sin(1+t)};

pds:= pdsolve({pde},ic union bcs,numeric,time=t,range=0..1,errorest=true,timestep=1/16,spacestep=1/16);

pdsolve我们使用该选项errorest=true来计算误差估计。

在视觉误差估计和误差控制中使用的误差估计量只是 PDE 或 PDE 系统的局部截断误差估计。

首先,让我们找出timestepandspacestep对错误的影响,

pds:-settings(timestep=1/8,spacestep=1/8);
pds:-plot([u(x,t),[u(x,t)+err(u(x,t)),color=blue,linestyle=2],[u(x,t)-err(u(x,t)),color=green,linestyle=3]],t=5,axes=boxed);

在此处输入图像描述

现在我们减少timestepspacestep

pds:-settings(timestep=1/64,spacestep=1/64);
pds:-plot([u(x,t),[u(x,t)+err(u(x,t)),color=blue,linestyle=2],[u(x,t)-err(u(x,t)),color=green,linestyle=2]],t=5,axes=boxed);

在此处输入图像描述

显然,我们可以从上图中看出 pde 解中的误差是可以接受的。

现在我们将沿着空间绘制解中的误差 在此处输入图像描述

随时间绘制解中的误差, 在此处输入图像描述

最后,可视化绝对误差,

pds:-plot([[(abs(u(x,t)-(cos(x+t)))^2),color=red]],t=5,axes=boxed);

在此处输入图像描述

pds:-plot([[(abs(u(x,t)-(cos(x+t)))^2),color=red]],t=0..5,x=0.5,axes=boxed);

在此处输入图像描述