python与有限差分法(一)微分方程与有限差分法简介

博主在这段时间将不断更新用有限差分法求解微分方程的一些理论和算法问题,并以python为工具讲解具体的算法实现。

直通链接: python与有限差分法(二)弦平衡问题(两点边值问题)内容梳理、算法求解与数值分析.
未完待续…

1.微分方程的种类

微分方程(model)是描述未知函数及其导数关系的方程。

微分方程是描述现实问题的重要模型,理论上来说只要一个物体的状态在变化,它的变化过程都是可以用微分方程描述刻画的,例如气体的扩散、记忆棉受力分析、声波传播、弦的振动等等。

例如最典型的,由弦的平衡方程导出的两点边值问题:
− u x x = f , a < x < b -u_{xx}=f ,a<x<b uxx=f,a<x<b
u ( a ) = α , u ( b ) = β u(a)=\alpha,u(b)=\beta u(a)=α,u(b)=β

偏微分方程(PDE)是描述未知函数及其偏导数关系的方程。即相比微分方程它含有偏导数项。

偏微分方程中二阶最为典型常见,有椭圆形、抛物型、双曲型三种,下给出这三种偏微分方程最简形式:

  • 椭圆型方程
    u x x + u y y = f ( x , y ) u_{xx}+u_{yy}=f(x,y) uxx+uyy=f(x,y)
  • 抛物型方程
    u t = a u x x u_t=au_{xx} ut=auxx
  • 双曲型方程
    u t t = a 2 u x x u_{tt}=a^2u_{xx} utt=a2uxx
    (注:二阶微分方程中也存在混合问题,在不同区域为不同的方程类型,这里不做讨论)

我们要直接通过数学手段求解这些偏微分方程是很困难的,所以就有了数值方法这一求解手段。目前常用求解偏微分方程的数值方法有有限差分法、有限元法、有限体积法,谱方法四种,下介绍有限差分法。

2.有限差分法的引入与介绍

有限差分法(PDE):通过将求解区域离散化得到离散的微分算子,将微分方程定解问题转化为代数方程组求解问题。

有限差分法的原理:我们在用数值方法求解微分方程时,由于计算机不能处理连续的数学方程,所以在用计算机处理问题时,必须先将一个无限的连续问题通过一些特殊的方法离散化,使之成有限形式的线性代数方程组,再将这个线性代数方程组交给计算机求解以达到我们的目的。在偏微分方程中,通过离散化区域获得导数(或偏导数)的手段就构成了我们的有限差分法。

3.有限差分法的流程

以一维情况为例来说明一个有限差分法的流程

1.对求解域做网格剖分

我们将区间[a,b]划分为等距的n个部分,对应的有n+1个节点,取这些节点为:

x 0 , x 1 . . . x i . . . x n x_0,x_1...x_i...x_n x0,x1...xi...xn

相邻节点间距为 h = b − a n h=\frac{b-a}{n} h=nba

2.构造逼近微分方程定解的差分格式

差分格式:用离散网格点的组合代替方程中的偏导数的格式

在一维情况,最常用的差分格式是取三个模板点的,即:
取等距模板点 x i x_i xi x i − 1 x_{i-1} xi1 x i + 1 x_{i+1} xi+1,两点间距都为 h h h

  • 中心差分格式
    u x = x i + 1 − x i − 1 2 h u_{x}=\frac{x_{i+1}-x_{i-1}}{2h} ux=2hxi+1xi1
    u x x = x i + 1 + x i − 1 − 2 x i h 2 u_{xx}=\frac{x_{i+1}+x_{i-1}-2x_{i}}{h^2} uxx=h2xi+1+xi12xi
  • 向前差分格式
    u x = x i + 1 − x i h u_{x}=\frac{x_{i+1}-x_{i}}{h} ux=hxi+1xi
  • 向后差分格式
    u x = x i − x i − 1 h u_{x}=\frac{x_{i}-x_{i-1}}{h} ux=hxixi1

当然如果是二维情况,根据不同的目标问题,还可以取更多的模板点来构造差分格式以获得更好的数值解,例如椭圆型问题中取六个点的六点对称格式、激波管问题中引进人工粘性项的Lax-Wendroff格式等,这将在以后具体的例子中做讨论。

3.差分解的唯一性、收敛性计稳定性的讨论
从数学的角度来讨论一个离散化方法得到的数值解是否收敛于真解、在将网格加密后得到的解是否还稳定等等

4.求解微分方程
将方程丢给计算机算

4.将会用到的python库

  • numpy:科学计算的基础包。提供了高效的数组(array)对象
  • SciPy:是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解等问题。
  • pandas:使python成为强大数据分析工具的重要因素之一,提供了精细的索引功能来进行选取数据子集的操作。
  • Matplotlib:最流行的绘制数据图表的python库

你可能感兴趣的:(python与有限差分法(一)微分方程与有限差分法简介)