(1)偏微分方程的类型(二阶)

a ∂ 2 u ∂ x 2 + b ∂ 2 u ∂ y ∂ x + c ∂ 2 u ∂ x 2 + d ∂ u ∂ x + e ∂ u ∂ y + f u + g = 0 a\frac{\partial^2u}{\partial x^2}+b\frac{\partial^2u}{\partial y\partial x}+c\frac{\partial^2u}{\partial x^2}+d\frac{\partial u}{\partial x}+e\frac{\partial u}{\partial y}+fu+g=0 ax22u+byx2u+cx22u+dxu+eyu+fu+g=0

  • b 2 − 4 a c < 0 b^2-4ac<0 b24ac<0 椭圆
  • b 2 − 4 a c = 0 b^2-4ac=0 b24ac=0 抛物线
  • b 2 − 4 a c > 0 b^2-4ac>0 b24ac>0 双曲线

(2)抛物线型

1.显式法

  • 求解思想:通过差分的方法一排一排向上推。
  • 做划分并代入方程 u i , j + 1 − u i , j k = u i + 1 , j − 2 u i , j + u i − 1 , j h 2    ( Δ x = h , Δ t = k ) \frac{u_{i,j+1}-u_{i,j}}{k}=\frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{h^2}~~(\Delta x=h,\Delta t=k) kui,j+1ui,j=h2ui+1,j2ui,j+ui1,j  (Δx=h,Δt=k)
  • 通过化简得到 u i , j + 1 = r u i − 1 , j + ( 1 − 2 r ) u i , j + r u i + 1 , j    ( r = k h 2 ) u_{i,j+1}=ru_{i-1,j}+(1-2r)u_{i,j}+ru_{i+1,j}~~(r=\frac{k}{h^2}) ui,j+1=rui1,j+(12r)ui,j+rui+1,j  (r=h2k)
  • 具体推的步骤大概如下:
    • 由于已知 u ( x , 0 ) = f ( x ) u(x,0)=f(x) u(x,0)=f(x),因此相当于知道 u 0 , 0 , u 1 , 0 , u 2 , 0 … u_{0,0},u_{1,0},u_{2,0}\dots u0,0,u1,0,u2,0
    • 通过上面的公式就可以推出来 u 1 , 1 , u 2 , 1 , u 3 , 1 … u_{1,1},u_{2,1},u_{3,1}\dots u1,1,u2,1,u3,1,注意由于已知左边界和右边界,因此 u 0 , 1 u_{0,1} u0,1也知道,所以第二排就可以全部推出来。
    • 通过上面的方式可以求出区域内全部的数值解。

2.Crank-Nicholson隐式算法

  • 求解思想:也是一排一排向上推,但是这次是使用线性方程组一次性求出一排。
  • 这里采用相同的划分方式,但是代入不同的差分方程
  • 通过化简得到
  • 具体推的步骤大概如下:
    • 由于已知 u ( x , 0 ) = f ( x ) u(x,0)=f(x) u(x,0)=f(x),因此相当于知道 u 0 , 0 , u 1 , 0 , u 2 , 0 … u_{0,0},u_{1,0},u_{2,0}\dots u0,0,u1,0,u2,0
    • 通过上面的公式就可以推出来方程 − r u i − 1 , 1 + ( 2 + 2 r ) u i , 1 − r u i + 1 , 1 = c     ( c 是 一 个 常 数 ) -ru_{i-1,1}+(2+2r)u_{i,1}-ru_{i+1,1}=c~~~(c是一个常数) rui1,1+(2+2r)ui,1rui+1,1=c   (c),注意由于已知左边界和右边界,所以这个其实就转化成在一维上的差分问题,最后列出全部的方程构成方程组求解即可。
    • 通过上面的方式可以求出区域内全部的数值解。
  • 一个例子:
  • 做划分并且代入差分方程
    k = 0.01 , h = 0.1 k=0.01,h=0.1 k=0.01,h=0.1
    − u i − 1 , j + 1 + 4 u i , j + 1 − u i + 1 , j + 1 = u i − 1 , j + u i + 1 , j -u_{i-1,j+1}+4u_{i,j+1}-u_{i+1,j+1}=u_{i-1,j}+u_{i+1,j} ui1,j+1+4ui,j+1ui+1,j+1=ui1,j+ui+1,j
  • 进行求解(这里利用了对称性,在 x = 0.5 x=0.5 x=0.5 两边是对称的,将 j = 0 j=0 j=0隐去,并根据对称性将 u 6 u_6 u6替换成 u 4 u_4 u4)

(3)双曲线型

  • 得到的差分方程为 ( r = k h r=\frac{k}{h} r=hk注意和之前的定义不同):
  • 划分需要满足一定的条件 k h ≤ 1 c \frac{k}{h}\le\frac{1}c{} hkc1
  • 具体求解按照之前类似的方法即可。

(4)椭圆型

  • 得到的差分方程为 (这里取 k k k h h h相等):
  • 求解
    • 可以采用类似之前的隐式或者显式方法求解。
    • 可以采用迭代法求解,比如雅克比迭代,转换成下面的迭代式
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐