1 引言
微分方程是描述一个系统的状态随时间和空间演化的最基本的数学工具之一,其在物理、经济、工程、社会等各方面都有及其重要的应用。然而,只有很少的微分方程可以解析求解,尤其对于偏微分方程,能解析求解的种类更是寥寥可数。更多的微分方程可以采用数值法进行求解,只要精度足够高,就可以满足科学和工程上的需求。
数值求解微分方程的基本思路是先把时间和空间离散化,然后将微分化为差分,建立递推关系,然后利用计算机强大的重复计算能力,快速得到任意格点处的值。Python的Numpy、Scipy工具包可以很好地实现此功能,Matplotlib工具包则可以将求解结果画为非常直观的图形。
接下来,我们先以常微分方程的数值求解为例,引入差分的思想,再将其推广到偏微分方程中。
2 常微分方程的差分求解
一般地,一阶常微分方程可以写为
首先,将连续的变量
和
离散化,连续的函数
和
化为离散的序列
和
,则上述微分方程可以化为差分方程【1】
从而我们得到递推关系
有了递推关系和初始条件以后,就可以利用Python的强大计算功能,得到任意的
的值了,下面我们通过一个具体的例子来说明。
2.1 RC回路放电问题
对于一个
回路,我们有
其中,
分别为电流,电阻,电量和电容,利用
,并定义
,我们得到一个含初始条件的一阶常微分方程
这个方程当然可以解析求解,得到
。另一方面按照差分法,可以得到递推关系
下面我们用Python进行数值求解,并和解析结果进行比较。
import numpy as np
import matplotlib.pyplot as plt</