一阶双曲型偏微分方程的数值解法——迎风格式、Lax-Friedrichs格式、Lax-Wendroff格式和Beam-Warming格式等

声明

本部分是一个学习笔记,主要内容来自于华冬英老师编写的《微分方程的数值解法与程序实践》。如果觉得内容不错,可自行购买价格良心的官方正版教材。http://www.hxedu.com.cn.上有配套的代码以PPT课件可供免费下载。另外,官方代码均用C语言编写,之后我也会陆陆续续上传自己编写的Python代码。

本部分内容公式太多实在懒得敲了,因此以图片形式呈现,基本能满足学习要求。不过也同时上传了文字可复制的PDF版本,内容与图片版本完全一致。感兴趣的话可在https://download.csdn.net/download/liuqihang11/77977916下载,不过需要付费1.99元,请按需下载。

  • 14
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
一阶双曲偏微分方程一般的形式为: $$ \frac{\partial u}{\partial t}+a\frac{\partial u}{\partial x}=0 $$ 其中 $a$ 为常数。 可以用有限差分法来数值求解这个方程,其中 $u_{i,j}$ 表示在位置 $x_i$ 和时间 $t_j$ 处的解。 我们可以选择用向前差分、向后差分或中心差分来离散化偏微分方程。下面以中心差分法为例: $$ \frac{u_{i,j+1}-u_{i,j}}{\Delta t}+a\frac{u_{i+1,j}-u_{i-1,j}}{2\Delta x}=0 $$ 整理得到: $$ u_{i,j+1}=u_{i,j}-\frac{a\Delta t}{2\Delta x}(u_{i+1,j}-u_{i-1,j}) $$ 根据时空离散化的方法,可以用以下 MATLAB 代码实现一阶双曲偏微分方程的求解: ```matlab % 离散化参数 Nx = 100; % 空间离散化步数 Nt = 200; % 时间离散化步数 a = 1; % 常数 a % 区间参数 x_start = 0; x_end = 1; t_start = 0; t_end = 1; % 离散化步长 dx = (x_end - x_start) / Nx; dt = (t_end - t_start) / Nt; % 初始条件 u0 = sin(pi * linspace(x_start, x_end, Nx+1)); % 数值求解 u = u0; for j = 1:Nt u_new = u; for i = 2:Nx u_new(i) = u(i) - a * dt / (2 * dx) * (u(i+1) - u(i-1)); end u = u_new; end % 可视化 figure(); plot(linspace(x_start, x_end, Nx+1), u0, 'r--', 'LineWidth', 1.5); hold on; plot(linspace(x_start, x_end, Nx+1), u, 'b-', 'LineWidth', 1.5); legend('t=0', 't=1'); xlabel('x'); ylabel('u'); title(sprintf("1-order hyperbolic PDE, dx=%.2f, dt=%.2f, a=%.2f", dx, dt, a)); ``` 这个代码用的是中心差分法,实现了一阶双曲偏微分方程的离散化求解,并把结果可视化出来。其中,离散化步数和常数 $a$ 都可以根据具体问题进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syphomn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值