泰勒展开是一种将函数在某一点附近表示为无穷级数的方法。对于一个足够光滑(即具有足够阶数的导数)的函数 f ( x ) f(x) f(x),在点 x 0 x_0 x0处的泰勒展开式为:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + f ( 3 ) ( x 0 ) 3 ! ( x − x 0 ) 3 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n + R n ( x ) f(x)=f(x_0)+f'(x_0)(x - x_0)+\frac{f''(x_0)}{2!}(x - x_0)^2+\frac{f^{(3)}(x_0)}{3!}(x - x_0)^3+\cdots+\frac{f^{(n)}(x_0)}{n!}(x - x_0)^n+R_n(x) f(x)=f(x0)+f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+3!f(3)(x0)(x−x0)3+⋯+n!f(n)(x0)(x−x0)n+Rn(x)
其中, f ( n ) ( x 0 ) f^{(n)}(x_0) f(n)(x0)表示函数 f ( x ) f(x) f(x)在 x 0 x_0 x0处的 n n n阶导数, n ! n! n!是 n n n的阶乘, R n ( x ) R_n(x) Rn(x)是泰勒展开的余项,表示展开式与原函数之间的误差。当 n n n趋向于无穷大且余项 R n ( x ) R_n(x) Rn(x)趋向于 0 时,泰勒展开式就精确地等于原函数。
泰勒展开的意义在于,它能够将复杂的函数用简单的多项式函数来近似。在实际应用中,我们通常只取泰勒展开式的前几项来进行计算,这样既可以简化计算,又能在一定精度范围内逼近原函数。
以下是一些常见的函数展开式
函数 | 泰勒展开式(含佩亚诺余项) |
---|---|
e x e^{x} ex | 1 + 1 1 ! x + 1 2 ! x 2 + 1 3 ! x 3 + o ( x 3 ) 1+\frac{1}{1!}x+\frac{1}{2!}x^{2}+\frac{1}{3!}x^{3}+o(x^{3}) 1+1!1x+2!1x2+3!1x3+o(x3) |
ln ( 1 + x ) \ln(1 + x) ln(1+x) | x − 1 2 x 2 + 1 3 x 3 + o ( x 3 ) x-\frac{1}{2}x^{2}+\frac{1}{3}x^{3}+o(x^{3}) x−21x2+31x3+o(x3) |
sin x \sin x sinx | x − 1 3 ! x 3 + 1 5 ! x 5 + o ( x 5 ) x-\frac{1}{3!}x^{3}+\frac{1}{5!}x^{5}+o(x^{5}) x−3!1x3+5!1x5+o(x5) |
arcsin x \arcsin x arcsinx | x + 1 2 × x 3 3 + 1 × 3 2 × 4 × x 5 5 + 1 × 3 × 5 2 × 4 × 6 × x 7 7 + o ( x 7 ) x+\frac{1}{2}\times\frac{x^{3}}{3}+\frac{1\times3}{2\times4}\times\frac{x^{5}}{5}+\frac{1\times3\times5}{2\times4\times6}\times\frac{x^{7}}{7}+o(x^{7}) x+21×3x3+2×41×3×5x5+2×4×61×3×5×7x7+o(x7) |
cos x \cos x cosx | 1 − 1 2 ! x 2 + 1 4 ! x 4 + o ( x 4 ) 1-\frac{1}{2!}x^{2}+\frac{1}{4!}x^{4}+o(x^{4}) 1−2!1x2+4!1x4+o(x4) |
1 1 − x \frac{1}{1 - x} 1−x1 | 1 + x + x 2 + x 3 + o ( x 3 ) 1 + x + x^{2}+x^{3}+o(x^{3}) 1+x+x2+x3+o(x3) |
( 1 + x ) a (1 + x)^{a} (1+x)a | 1 + a 1 ! x + a ( a − 1 ) 2 ! x 2 + a ( a − 1 ) ( a − 2 ) 3 ! x 3 + o ( x 3 ) 1+\frac{a}{1!}x+\frac{a(a - 1)}{2!}x^{2}+\frac{a(a - 1)(a - 2)}{3!}x^{3}+o(x^{3}) 1+1!ax+2!a(a−1)x2+3!a(a−1)(a−2)x3+o(x3) |
在有限差分法中,泰勒展开是推导差分公式的重要工具。通过对函数进行泰勒展开,并结合离散化的思想,我们可以得到各种差分近似公式,从而将微分方程转化为代数方程组进行求解。
有限差分的核心在于离散化。当面对连续的数学模型(如微分方程),有限差分法将连续的空间和时间分割成离散的网格点。通过在这些网格点上用差分来近似导数,从而将微分方程转化为代数方程组。
对于函数 y = f ( x ) y = f(x) y=f(x),在点 x x x处的一阶导数 f ′ ( x ) f'(x) f′(x),可以通过向前差分、向后差分和中心差分来近似。
无论是一维函数 y = f ( x ) y = f(x) y=f(x)还是多维函数 y = f ( x 1 , x 2 , . . . , x n ) y = f(x_1, x_2, ..., x_n) y=f(x1,x2,...,xn),一阶导数差分计算相同,只是说针对多维函数,计算的是一阶偏导数 ∂ f ∂ x 1 \frac{\partial f}{\partial x_1} ∂x1∂f。
图中, Δ x \Delta x Δx是步长,即相邻网格点之间的距离
f ′ ( x ) ≈ f ( x + Δ x ) − f ( x ) Δ x f'(x) \approx \frac{f(x + \Delta x) - f(x)}{\Delta x} f′(x)≈Δxf(x+Δx)−f(x)
f ′ ( x ) ≈ f ( x ) − f ( x − Δ x ) Δ x f'(x) \approx \frac{f(x) - f(x - \Delta x)}{\Delta x} f′(x)≈Δxf(x)−f(x−Δx)
f ′ ( x ) ≈ f ( x + Δ x ) − f ( x − Δ x ) 2 Δ x f'(x) \approx \frac{f(x + \Delta x) - f(x - \Delta x)}{2\Delta x} f′(x)≈2Δxf(x+Δx)−f(x−Δx)
对于二阶导数,同样可以基于网格点上的函数值进行差分近似。
在一维空间中,二阶导数 f ′ ′ ( x ) f''(x) f′′(x)的中心差分近似为
f ′ ′ ( x ) ≈ f ′ ( x + 1 2 Δ x ) − f ′ ( x − 1 2 Δ x ) Δ x ≈ f ( x + Δ x ) − 2 f ( x ) + f ( x − Δ x ) Δ x 2 f''(x)\approx \frac{f'(x+\frac{1}{2}\Delta x) - f'(x-\frac{1}{2}\Delta x)}{\Delta x} \approx \frac{f(x + \Delta x) - 2f(x) + f(x - \Delta x)}{\Delta x^2} f′′(x)≈Δxf′(x+21Δx)−f′(x−21Δx)≈Δx2f(x+Δx)−2f(x)+f(x−Δx)
但在多维空间中,二阶导数的中心差分近似情况会随着维度的增加而变得更加复杂。以二维空间( x x x和 y y y方向)为例,对于函数 u ( x , y ) u(x,y) u(x,y),有以下几种常见的二阶导数中心差分近似:
∂ 2 u ∂ x 2 ≈ u ( x + Δ x , y ) − 2 u ( x , y ) + u ( x − Δ x , y ) Δ x 2 \frac{\partial^{2}u}{\partial x^{2}}\approx\frac{u(x + \Delta x,y)-2u(x,y)+u(x - \Delta x,y)}{\Delta x^{2}} ∂x2∂2u≈Δx2u(x+Δx,y)−2u(x,y)+u(x−Δx,y)
∂ 2 u ∂ y 2 ≈ u ( x , y + Δ y ) − 2 u ( x , y ) + u ( x , y − Δ y ) Δ y 2 \frac{\partial^{2}u}{\partial y^{2}}\approx\frac{u(x,y + \Delta y)-2u(x,y)+u(x,y - \Delta y)}{\Delta y^{2}} ∂y2∂2u≈Δy2u(x,y+Δy)−2u(x,y)+u(x,y−Δy)
混合二阶导数的计算有两种形式:四点模型和七点模型。四点模型相对来说较为简单,但是精度不高;七点模型较为复杂,但是精度要好一些。
- 四点模型
∂ 2 u ∂ x ∂ y ≈ u ( x + Δ x , y + Δ y ) − u ( x + Δ x , y − Δ y ) − u ( x − Δ x , y + Δ y ) + u ( x − Δ x , y − Δ y ) 4 Δ x Δ y \frac{\partial^{2}u}{\partial x\partial y}\approx\frac{u(x + \Delta x,y + \Delta y)-u(x + \Delta x,y - \Delta y)-u(x - \Delta x,y + \Delta y)+u(x - \Delta x,y - \Delta y)}{4\Delta x \Delta y} ∂x∂y∂2u≈4ΔxΔyu(x+Δx,y+Δy)−u(x+Δx,y−Δy)−u(x−Δx,y+Δy)+u(x−Δx,y−Δy)
- 七点模型
∂ 2 u ∂ x ∂ y ≈ 1 2 Δ x Δ y [ u ( x + Δ x , y + Δ y ) + u ( x − Δ x , y − Δ y ) + 2 u ( x , y ) − u ( x + Δ x , y ) − u ( x , y + Δ y ) − u ( x − Δ x , y ) − u ( x , y − Δ y ) ] \frac{\partial^{2}u}{\partial x\partial y}\approx\frac{1}{2\Delta x\Delta y}\left[ u(x + \Delta x,y + \Delta y)+u(x - \Delta x,y - \Delta y)+2 u(x,y)-u(x + \Delta x,y ) -u(x ,y + \Delta y)-u(x - \Delta x,y)-u(x ,y - \Delta y) \right] ∂x∂y∂2u≈2ΔxΔy1[u(x+Δx,y+Δy)+u(x−Δx,y−Δy)+2u(x,y)−u(x+Δx,y)−u(x,y+Δy)−u(x−Δx,y)−u(x,y−Δy)]
如果拓展到三维空间( x x x、 y y y、 z z z方向),除了分别对 x x x、 y y y、 z z z方向的二阶导数有类似上述的中心差分近似,还会有更多的混合二阶导数情况,例如 ∂ 2 u ∂ x ∂ z \frac{\partial^{2}u}{\partial x\partial z} ∂x∂z∂2u、 ∂ 2 u ∂ y ∂ z \frac{\partial^{2}u}{\partial y\partial z} ∂y∂z∂2u等,其中心差分近似公式与二维的混合二阶导数类似,只是在分子中增加了对应维度上的函数值变化。
总的来说,对于 n n n维空间,二阶导数的中心差分近似种类包括 n n n个纯方向的二阶导数近似,以及 C n 2 = n ( n − 1 ) 2 C_{n}^2=\frac{n(n - 1)}{2} Cn2=2n(n−1)个不同的混合二阶导数近似,总共 n + n ( n − 1 ) 2 = n ( n + 1 ) 2 n+\frac{n(n - 1)}{2}=\frac{n(n + 1)}{2} n+2n(n−1)=2n(n+1)种 。
在显式格式中,某一时刻的未知量可以直接由前一时刻的已知量通过简单的代数运算得到。这种格式计算简单、易于编程实现,计算效率高。例如,在求解一维热传导方程时,显式差分格式能快速迭代计算出每个时间步下空间各点的温度值。
与显式格式不同,隐式格式中某一时刻的未知量不能直接计算,而是通过求解一个方程组来确定。虽然隐式格式的计算过程相对复杂,需要求解线性方程组,但它具有更好的稳定性,尤其适用于处理长时间尺度的问题。
概念简单直观:基于简单的差分近似导数,无需高深的数学知识即可理解,对于初学者十分友好。
易于编程实现:离散化后的代数方程组可方便地通过编程实现,在数值计算领域广泛应用。
计算效率较高:对于一些简单的模型,能够快速得到数值解,在处理大规模数据时也具有一定优势。
精度依赖步长:步长的选择对计算精度影响显著。步长过大,数值解与真实解偏差较大;步长过小,计算量会大幅增加,对计算机的性能要求更高。
处理复杂边界困难:当面对复杂的几何形状和边界条件时,有限差分法的网格划分和边界条件处理较为棘手,可能需要采用特殊的技巧或与其他方法结合使用。
随着计算机技术的飞速发展,有限差分法也在不断演进。一方面,并行计算技术的应用使得大规模有限差分计算成为可能,大大提高了计算效率,能够处理更复杂的模型和更大规模的问题。另一方面,有限差分法与其他数值方法如有限元法、边界元法等的融合,取长补短,为解决复杂的科学和工程问题提供了更强大的工具。