有限差分法简介

0.前言

有限差分法是一种数值计算方法,用于求解偏微分方程。其基本思想是将连续的偏微分方程离散化,转化为离散的代数方程组,然后通过求解这个代数方程组来得到数值解。

在有限差分法中,我们将求解区域划分为一系列网格点和区域,然后在每个网格点处近似表示原方程的导数,这样就可以得到一个离散的方程组。具体地说,我们可以使用中心差分法、前向差分法或后向差分法来近似表示导数。然后,我们将这些差分方程组合起来,得到一个方程组,可以使用常见的迭代法等求解方程组。例如一维问题的差分方法如下:

中心差分法:对于函数f(x),在x点处的导数可以用以下公式计算:

f'(x) = (f(x+h) - f(x-h)) / (2h) ,其中h是一个足够小的数,通常取0.001或0.0001等。

前向差分法:对于函数f(x),在x点处的导数可以用以下公式计算:

f'(x) = (f(x+h) - f(x)) / h

后向差分法:对于函数f(x),在x点处的导数可以用以下公式计算:

f'(x) = (f(x) - f(x-h)) / h

01.基本步骤

  1. 写出描述问题的微分方程

  2. 离散化求解区域,将问题转化为有限维

  3. 用差分形式代替偏导数,即改写微分方程为线性方程

  4. 求解线性方程组

  5. 可视化和后处理

02.必须考虑的其它问题

  1. 求解方法是否合理

  2. 求得的近似解精度如何

  3. 求解的收敛速度

03.案例—泊松方程

1.描述问题的微分方程

ps: 拉普拉斯算子作用u,是将u从d维向量空间映射到实数空间

2.离散化求解区域

PS: 中心为(0,0)

ps: 边界的红点处U=0

3.用差分形式代替偏导数,即改写微分方程为线性方程

ps: 该公式也叫中心差商

代入微分方程后得下图

依次遍历所有点,一一代入上式中,例如下图所示,把1节点代入差分方程,一共有五项,分别对应一节点左右前后和自身,得到下图第一个方程。

4.求解线性方程组

本案例中的f理解成体力,注意的是,与有限元把不同的地方是,有限差分法是基于对原求解方程的高度近似(纯数学的方式,差商代替导数),没有事先用到假设插值解的形式,即先求离散点的解,后用假设解函数(由离散点的解插值得到);而有限元是先对原求解方程的解,给出一个假设的插值解函数,再来根据一些原理(基于最小势能原理,虚功原理,加权残值法等)求出离散点的解,最后再用到假设解函数。但是本质上二者都是对微分方程的改造。还有就是差分法不用将外部作用转化为节点处的作用(作用未必是力)

04.代码分享

最后分享一些学习之余收集的代码和资料,有些算法我目前也不太熟悉,等以后有机会再讲解代码,这里有需要的同学可以公众号回复泊松方程即可获取。最后强调下,我写的大部分内容旨在分享方法和思路,通过认识了解这些方法更好的使用相关软件或者为开发打基础,不是每个人都有编程的必要,满足好奇心或者广泛学习都是有意义的,知道自己对什么感兴趣,打算做什么。欢迎大家一起学习交流,我的兴趣爱好是数值计算和机器学习,会持续更新相关笔记,不当之处,欢迎指出。获取更多资料和学习交流欢迎大家关注公众号冬生亦东生,分享旨在本人复习和交流

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
有限差分法(Finite Difference Method)是解决偏微分方程数值解的一种方法。在利用有限差分法求解偏微分方程时,我们将求解的区域离散为有限个点,并在每个离散点处采用近似的方式计算微分。它的优点在于简单易实现且适用于各种类型的偏微分方程。 MATLAB是一种强大的数值计算和科学计算软件,它提供了丰富的数值计算工具和函数库,能够方便地实现有限差分法来求解偏微分方程。 在MATLAB中,我们可以首先定义要求解的偏微分方程,并将求解区域进行离散化处理。然后,根据有限差分法的近似方法,利用差分格式和离散化的微分算子来表示偏微分方程。根据求解方程的类型不同,我们可以选择显式差分格式或隐式差分格式。 在求解过程中,我们可以利用MATLAB提供的求解器,如ode45等,来进行迭代求解。通过迭代求解过程,我们可以得到近似的偏微分方程的数值解。 需要注意的是,有限差分法求解偏微分方程时,要选择合适的空间和时间离散化步长,以及合适的边界条件。此外,对于特定类型的偏微分方程,还可以进一步优化计算方法,如使用多重网格方法等。 总之,有限差分法是一种在MATLAB中非常常用和有效的数值解偏微分方程的方法,通过MATLAB的数值计算能力和函数库,我们可以快速实现这一求解方法,并得到所需的数值解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冬生亦东生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值