偏微分方程
2021-10-13
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

偏微分方程基本知识

微分方程是指含有未知函数及其导数的关系式,偏微分方程是包含未知函数的偏导数(偏微分)的微分方程。
偏微分方程可以描述各种自然和工程现象, 是构建科学、工程学和其他领域的数学模型主要手段。 科学和工程中的大多数实际问题都归结为偏微分方程的定解问题,如:波传播,流动和扩散,振动,固体力学,电磁学和量子力学,等等。
偏微分方程主要有三类:椭圆方程,抛物方程和双曲方程。
  • 双曲方程描述变量以一定速度沿某个方向传播,常用于描述振动与波动问题。
  • 椭圆方程描述变量以一定深度沿所有方向传播,常用于描述静电场、引力场等稳态问题。
  • 抛物方程描述变量沿下游传播,常用于描述热传导和扩散等瞬态问题。
偏微分方程的定解问题通常很难求出解析解,只能通过数值计算方法对偏微分方程的近似求解。常用偏微分方程数值解法有:有限差分方法、有限元方法、有限体方法、共轭梯度法,等等。通常先对问题的求解区域进行网格剖分,然后将定解问题离散为代数方程组,求出在离散网格点上的近似值。
Python 求解偏微分方程的功能是比较弱的,主要有 Fipy, FEniCS 等有限元方法的工具包,另外还有机器学习工具如 Tensorflow 也可以进行偏微分方程的仿真模拟。本篇采用比较简单的有限差分法对 5种典型的偏微分方程进行编程。
 

一维线性平流方程

平流过程是大气运动中重要的过程。平流方程(Advection equation)描述某一物理量的平流作用而引起局地变化的物理过程,最简单的形式是一维平流方程。
式中 u 为某物理量,v 为系统速度,x 为水平方向分量,t 为时间。
虽然该方程可以求得解析解:
考虑一维线性平流偏微分方程的数值解法,采用有限差分法求解。简单地, 采用一阶迎风格式的差分方法(First-order Upwind),一阶导数的差分表达式为: 于是得到差分方程: 即可递推求得该平流方程的数值解

编程步骤

以该题为例一类有限差分法求解一维平流问题偏微分方程的步骤:
  1. 定义初始条件函数 U(x,0);
  1. 输入模型参数 v, p,定义求解的时间域 (tStart, tEnd) 和空间域 (xMin, xMax),设置差分步长 dt, nNodes;
  1. 初始化;
  1. 递推求解差分方程在区间 [xa,xb] 的数值解,获得网格节点的处的 u(t) 值。
在例程中,设初值条件为 ,取 ,空间域
notion image
 
 

一维热传导方程

一维热传导方程的数学模型
热传导方程描述一个区域内的温度随时间的变化,是典型的抛物型偏微分方程,也称为扩散方程。
一维热传导方程考虑各向同性的均匀细杆,在垂直于 x 轴的截面上的温度相同,细杆的圆周与周围环境无热交换,杆内无热源,则温度 是时间变量 和水平方向空间变量 的函数
考虑一维热传导偏微分方程的数值解法,采用有限差分法求解。简单地, 采用迎风法的三点差分格式,二阶导数的差分表达式为: 于是得到差分方程: 即可递推求得一维热传导方程的数值解
编程步骤
  1. 输入模型参数 L, lam,定义求解的时间域 (0, te) 和空间域 (0, L),设置差分步长 dt, dx;
  1. 初始化;
  1. 计算每一时点的边界条件 U[0,j],U[L,j]、每一位置的初始条件U[i,0];
  1. 递推求解差分方程在空间域 [0, L] 的数值解,获得网格节点的处的 U(x,t) 。
在例程中,设初值条件为 ,边界条件为 ,在时间域 、空间域 求数值解即温度分布。 (1)例程中的初始条件 为常数,如果初始条件是 x 的函数 ,将该函数在初始条件语句赋值即可(参加例程中注释的语句)。 (2)例程中的边界条件,一端是 t 的函数 ,另一端是常数 ,这些条件也可以根据具体问题设置为相应的常数或函数。
notion image
 
 

二维双曲型方程

数学模型

波动方程(wave equation)是典型的双曲形偏微分方程,广泛应用于声学,电磁学,和流体力学等领域,描述自然界中的各种的波动现象,包括横波和纵波,例如声波、光波和水波。
考虑如下二维波动方程的初边值问题:
式中:u 是振幅;c 为波的传播速率,c 可以是固定常数,或位置的函数 c(x,y),也可以是振幅的函数 c(u)。
考虑二维波动偏微分方程的数值解法,采用有限差分法求解。简单地, 采用迎风法的三点差分格式, 将上述的偏微分方程离散为差分方程 :
化简后得到:
即可递推求得二维波动方程的数值解。
为了保证算法的收敛性,迎风法的三点差分格式要求步长比小于 1:

编程步骤

  1. 输入模型参数 c,定义求解的时间域 (0, te) 和空间域 (0,1);
  1. 初始化,设置差分步长 dt, dx, dy,检验步长比以保证算法的稳定性;
  1. 计算初值条件U[0]、U[1];
  1. 递推求解差分方程在空间域 [0, 1]*[0, 1] 的数值解,获得网格节点的处的 U(t,x,y) 。
在例程中,取初始条件为 ,边界条件为 ,在时间域 、空间域 求数值解即振动状态。
notion image
 
 
 

二维抛物型方程

数学模型

热传导方程(heat equation)是典型的抛物形偏微分方程,也成为扩散方程。广泛应用于声学,电磁学,和流体力学等领域,描述自然界中的各种的波动现象,包括横波和纵波,例如声波、光波和水波。
考虑如下二维热传导方程的初边值问题:
考虑二维抛物型偏微分方程的数值解法,采用有限差分法求解。将上述的偏微分方程离散为差分方程 :
化简后得到:
即可递推求得二维波动方程的数值解:

编程步骤

  1. 输入热传导参数、热源参数等模型参数,定义求解的时间域 (0, te) 和空间域;
  1. 初始化,设置差分步长 dt, dx, dy,计算三对角系数矩阵 A、B,差分系数 rx, ry, ft;
  1. 绘制等温云图。
例程求解一个薄板受热的温度分布问题,其初始条件为 tIni=25,边界条件为 tBound=25,热源为 Qv,在空间域 x∈(0,16), y∈(0,12) ,时间域 t∈(0,5) 求数值解即温度分布。
对于外加热源,例程中给出了三种情况:(1)恒定热源,(2)热源功率(或开关)随时间变化,(3)热源位置随时间变化(从 (x0,y0) 以速度 (xv,yv) 移动,以模拟焊接加热的情况)。
notion image
 
 
 

二维椭圆型方程

数学模型

椭圆型偏微分方程是一类重要的偏微分方程,主要用来描述物理的平衡稳定状态,如定常状态下的电磁场、引力场和反应扩散现象等,广泛应用于流体力学、弹性力学、电磁学、几何学和变分法中。 考虑如下二维泊松方程:
上式在 时就是拉普拉斯方程(Laplace equation)
考虑二维椭圆型偏微分方程的数值解法,采用有限差分法求解。简单地, 采用五点差分格式表示二阶导数的差分表达式,将上述的偏微分方程离散为差分方程 : 椭圆型偏微分描述不随时间变化的均衡状态,没有初始条件,因此不能沿时间步长递推求解。对上式的差分方程,可以通过矩阵求逆方法求解,但当 h 较小时网格很多,矩阵求逆的内存占用和计算量极大。于是,可以使用迭代松弛法递推求得二维椭圆方程的数值解:

编程步骤

  1. 输入模型参数,定义空间域 (0,1);
  1. 初始化,设置差分步长 h、松弛因子 w;
  1. 计算边值条件 u[0,:], u[1,:], u[:,0], u[:,1];
  1. 迭代松弛法递推求解差分方程在空间域 [0, 1]*[0, 1] 的数值解 。
在例程中,取边界条件为 u(x,0)=u(x,1)=0,u(0,y)=u(1,y)=1。
notion image
  • Scipy
  • Scipy 微分方程传染病模型
    目录