文章目录

  • 前言
  • 问题描述
    • 问题区域
    • 偏微分方程
  • 变分问题(弱形式)
  • 有限元离散
  • 二维线性有限元 : 参考基函数
  • 2D linear finite element : affine mapping
  • 有限元计算
    • 刚度矩阵
    • 荷载(右端项)
  • 算法(伪代码)
    • Stiffness matrix Calculation
    • Load vector Calculation
    • Deal with the boundary conditions
  • 程序
  • 示例结果

前言

本文从零介绍有限元方法,包括每一步的数学推导,同时附程序开发指南。可以方便新手入门。

问题描述

问题区域

偏微分方程

∇ 2 u ( x , y ) = 0 i n Ω ( 1 ) u = g o n Γ u ( 2 ) q = ∂ u ∂ n ⃗ = 0 o n Γ q ( 3 ) \nabla^2u(x, y) = 0 \ \ \ \ in \ \ \Omega \ \ \ (1) \\ u = g \ \ \ \ \ \ \ \ \ \ on \ \ \ \Gamma_u \ \ \ (2) \\ q = \frac{\partial u}{\partial \vec{n}} = 0 \ \ \ on \ \ \ \Gamma_q \ \ \ (3) \\ ∇2u(x,y)=0    in  Ω   (1)u=g          on   Γu​   (2)q=∂n ∂u​=0   on   Γq​   (3)
a). 其中 Ω \Omega Ω 为矩形 ABCD 减去内部矩形 EFGH 的区域。
b). 其中 Γ u \Gamma_u Γu​ 为矩形 EFGH 的边界。
c). 其中 Γ q \Gamma_q Γq​ 为矩形 ABCD 的边界。

变分问题(弱形式)

任取函数 v ( x , y ) ∈ V v(x, y) \in V v(x,y)∈V 乘在方程 (1) 两端并在区域 Ω \Omega Ω 上积分得到如下方程:
∫ Ω v ( x , y ) ∗ ∇ 2 u ( x , y ) d s = 0 ( 4 ) \int _{\Omega} v(x,y)*\nabla^2u(x, y) ds= 0 \ \ \ \ \ \ \ (4) ∫Ω​v(x,y)∗∇2u(x,y)ds=0       (4)
对方程 (4) 运用 Green 公式(可以参考博客 边界元方法(一) 中 二重积分的分步积分公式 章节)可得到如下方程:
∫ Ω ∇ u ⋅ ∇ v d s − ∫ ∂ Ω ( ∇ u ⋅ n ) v d w = 0 ( 5 ) \int_{\Omega} \nabla u \cdot \nabla vds - \int_{\partial \Omega} (\nabla u \cdot \mathbf{n})vdw= 0 \ \ \ \ \ \ \ (5) ∫Ω​∇u⋅∇vds−∫∂Ω​(∇u⋅n)vdw=0       (5)
因 ∂ Ω = Γ u + Γ q \partial \Omega = \Gamma_u + \Gamma_q ∂Ω=Γu​+Γq​ 方程 (5) 等价于下面的方程:
∫ Ω ∇ u ⋅ ∇ v d s − ∫ Γ q ( ∇ u ⋅ n ) v d w − ∫ Γ u ( ∇ u ⋅ n ) v d w = 0 ( 6 ) \int_{\Omega} \nabla u \cdot \nabla vds - \int_{\Gamma_q} (\nabla u \cdot \mathbf{n})vdw - \int_{\Gamma_u} (\nabla u \cdot \mathbf{n})vdw= 0 \ \ \ \ \ \ \ (6) ∫Ω​∇u⋅∇vds−∫Γq​​(∇u⋅n)vdw−∫Γu​​(∇u⋅n)vdw=0       (6)
因等式 (2) 我们可以选择最初的 v ( x , y ) = 0 o n Γ u v(x, y) = 0 \ \ on \ \ \ \Gamma_u v(x,y)=0  on   Γu​ 则方程 (6) 边成如下形式:
∫ Ω ∇ u ⋅ ∇ v d s − ∫ Γ q ( ∇ u ⋅ n ) v d w = 0. ( 7 ) \int_{\Omega} \nabla u \cdot \nabla vds - \int_{\Gamma_q} (\nabla u \cdot \mathbf{n})vdw = 0. \ \ \ \ \ \ \ (7) ∫Ω​∇u⋅∇vds−∫Γq​​(∇u⋅n)vdw=0.       (7)
再将等式 (3) 带入到等式 (7) 中可以得到如下的最终弱形式:
T h e n t h e w e a k f o r m u l a t i o n i s t o f i n d u ∈ U s u c h t h a t Then \ \ the \ \ weak \ \ formulation \ \ is \ \ to \ \ find \ \ u \in U \ \ such \ \ that Then  the  weak  formulation  is  to  find  u∈U  such  that
∫ Ω ∇ u ⋅ ∇ v d s = 0 ( 8 ) \int_{\Omega} \nabla u \cdot \nabla vds = 0 \ \ \ \ \ \ \ \ \ \ (8) ∫Ω​∇u⋅∇vds=0          (8)
f o r a n y v ∈ V for \ \ any \ \ v \in V for  any  v∈V
其中
U : = { u ∈ C 0 ( Ω ) ∣ u = g , ( x , y ) ∈ Γ u } ( 9 ) V : = { v ∈ C 0 ( Ω ) ∣ v = 0 , ( x , y ) ∈ Γ u } ( 10 ) U := \{u \in C^0(\Omega) | u = g, \quad (x,y) \in \Gamma_u \} \ \ \ \ (9) \\\ V := \{v \in C^0(\Omega) | v = 0, \quad (x,y) \in \Gamma_u \} \ \ \ \ (10) U:={u∈C0(Ω)∣u=g,(x,y)∈Γu​}    (9) V:={v∈C0(Ω)∣v=0,(x,y)∈Γu​}    (10)

有限元离散

The Galerkin formulation : find u h ∈ U h Γ u_h \in U_h^{\Gamma} uh​∈UhΓ​ such that
a ( u h , v h ) = ∫ Ω ∇ u h ⋅ ∇ v h d s = 0 ( 11 ) a(u_h, v_h) = \int_{\Omega} \nabla u_h \cdot \nabla v_hds = 0 \ \ \ \ \ \ (11) a(uh​,vh​)=∫Ω​∇uh​⋅∇vh​ds=0      (11)
for any v h ∈ V h Γ v_h \in V_h^{\Gamma} vh​∈VhΓ​.

V h : = { u h ∈ C ( T h ) ∣ u h ∣ E i ∈ P 1 ∀ E i ∈ T h } ( 12 ) U h Γ : = { ψ h ∈ V h ∣ ψ h ∣ Γ u = g } ( 13 ) V h Γ : = { ϕ h ∈ V h ∣ ψ h ∣ Γ u = 0 } ( 14 ) V_h := \{ u_h \in C(T_h) | \quad u_h | _{E_i} \in P_1 \quad \forall E_i \in T_h \} \ \ \ (12) \\\ \\\ U_h^{\Gamma} := \{ \psi_h \in V_h | \quad \psi_h |_{\Gamma_u} = g \} \ \ \ (13) \\\ \\\ V_h^{\Gamma} := \{ \phi_h \in V_h | \quad \psi_h |_{\Gamma_u} = 0 \} \ \ \ (14) Vh​:={uh​∈C(Th​)∣uh​∣Ei​​∈P1​∀Ei​∈Th​}   (12)  UhΓ​:={ψh​∈Vh​∣ψh​∣Γu​​=g}   (13)  VhΓ​:={ϕh​∈Vh​∣ψh​∣Γu​​=0}   (14)
Where P 1 P_1 P1​ is a collection of linear polynomial spaces.

T h : = { E n , n = 1 , ⋯ , n u m M e s h E l e m e n t s } T_h:=\{ E_n, \quad n = 1, \cdots, numMeshElements\} Th​:={En​,n=1,⋯,numMeshElements} ,其中 E i E_i Ei​ 为离散的网格单元,以下用三角形单元介绍。

二维线性有限元 : 参考基函数

以 L a g r a n g e Lagrange Lagrange 型的节点基函数为例。考虑参考三角形单元 E ^ = △ A ^ 1 B ^ 1 C ^ 1 \hat{E}=\bigtriangleup \hat{A}_1\hat{B}_1\hat{C}_1 E^=△A^1​B^1​C^1​ 上的 2D 线性基函数,其中 A ^ 1 = ( 0 , 0 ) \hat{A}_1=(0, 0) A^1​=(0,0), B ^ 1 = ( 1 , 0 ) \hat{B}_1=(1, 0) B^1​=(1,0), C ^ 1 = ( 0 , 1 ) \hat{C}_1=(0, 1) C^1​=(0,1)。
定义基函数如下:
ψ ^ j ( x ^ , y ^ ) = a j x ^ + b j y ^ + c j j = 1 , 2 , 3 , ( 15 ) \hat{\psi}_j(\hat{x}, \hat{y}) = a_j\hat{x} + b_j\hat{y} + c_j \ \ \ \ \ \ j = 1, 2, 3,\ \ \ \ \ (15) ψ^​j​(x^,y^​)=aj​x^+bj​y^​+cj​      j=1,2,3,     (15)
满足如下条件:
ψ ^ j ( A ^ i ) = δ i j = { 0 i f j ≠ i 1 i f j = i ( 16 ) \hat{\psi}_j(\hat{A}_i) = \delta _{ij} = \left\{\begin{matrix} 0 & if \ \ \ j \neq i \\ 1 & if \ \ \ j = i \\ \end{matrix}\right. \ \ \ \ \ (16) ψ^​j​(A^i​)=δij​={01​if   j=iif   j=i​     (16)
求解方程 (15) (16) 我们可以得到如下参考单元上的 2D 线性基函数:
ψ ^ 1 ( x ^ , y ^ ) = − x ^ − y ^ + 1 ψ ^ 2 ( x ^ , y ^ ) = x ^ ψ ^ 3 ( x ^ , y ^ ) = y ^ \hat{\psi}_1(\hat{x}, \hat{y}) = -\hat{x} -\hat{y} +1 \\ \hat{\psi}_2(\hat{x}, \hat{y}) = \hat{x} \\ \hat{\psi}_3(\hat{x}, \hat{y}) = \hat{y} ψ^​1​(x^,y^​)=−x^−y^​+1ψ^​2​(x^,y^​)=x^ψ^​3​(x^,y^​)=y^​

2D linear finite element : affine mapping

任意三角形单元 E = △ A 1 B 1 C 1 E=\bigtriangleup A_1B_1C_1 E=△A1​B1​C1​ 与 参考三角形单元 E ^ = △ A ^ 1 B ^ 1 C ^ 1 \hat{E}=\bigtriangleup \hat{A}_1\hat{B}_1\hat{C}_1 E^=△A^1​B^1​C^1​ 的映射。
设:
A i = ( x i , y i ) , i = 1 , 2 , 3. A_i = (x_i, y_i), \ \ \ \ \ i = 1, 2, 3. Ai​=(xi​,yi​),     i=1,2,3.
consider the affine mapping
( x y ) = ( A 2 − A 1 , A 3 − A 1 ) ( x ^ y ^ ) + A 1 = ( x 2 − x 1 x 3 − x 1 y 2 − y 1 y 3 − y 1 ) ( x ^ y ^ ) + ( x 1 y 1 ) . \begin{aligned} \left(\begin{array}{c} x \\ y \end{array}\right) & =\left(A_{2}-A_{1}, A_{3}-A_{1}\right)\left(\begin{array}{c} \hat{x} \\ \hat{y} \end{array}\right)+A_{1} \\ & =\left(\begin{array}{ll} x_{2}-x_{1} & x_{3}-x_{1} \\ y_{2}-y_{1} & y_{3}-y_{1} \end{array}\right)\left(\begin{array}{l} \hat{x} \\ \hat{y} \end{array}\right)+\left(\begin{array}{l} x_{1} \\ y_{1} \end{array}\right) . \end{aligned} (xy​)​=(A2​−A1​,A3​−A1​)(x^y^​​)+A1​=(x2​−x1​y2​−y1​​x3​−x1​y3​−y1​​)(x^y^​​)+(x1​y1​​).​
得到:
x ^ = ( y 3 − y 1 ) ( x − x 1 ) − ( x 3 − x 1 ) ( y − y 1 ) ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) , y ^ = ( y 2 − y 1 ) ( x − x 1 ) − ( x 2 − x 1 ) ( y − y 1 ) ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) . \begin{aligned} \hat{x} & =\frac{\left(y_{3}-y_{1}\right)\left(x-x_{1}\right)-\left(x_{3}-x_{1}\right)\left(y-y_{1}\right)}{\left(x_{2}-x_{1}\right)\left(y_{3}-y_{1}\right)-\left(x_{3}-x_{1}\right)\left(y_{2}-y_{1}\right)}, \\ \hat{y} & =\frac{\left(y_{2}-y_{1}\right)\left(x-x_{1}\right)-\left(x_{2}-x_{1}\right)\left(y-y_{1}\right)}{\left(x_{2}-x_{1}\right)\left(y_{3}-y_{1}\right)-\left(x_{3}-x_{1}\right)\left(y_{2}-y_{1}\right)} . \end{aligned} x^y^​​=(x2​−x1​)(y3​−y1​)−(x3​−x1​)(y2​−y1​)(y3​−y1​)(x−x1​)−(x3​−x1​)(y−y1​)​,=(x2​−x1​)(y3​−y1​)−(x3​−x1​)(y2​−y1​)(y2​−y1​)(x−x1​)−(x2​−x1​)(y−y1​)​.​

定义 J a c o b i m a t r i x Jacobi \ \ \ matrix Jacobi   matrix :
J = ( x 2 − x 1 x 3 − x 1 y 2 − y 1 y 3 − y 1 ) J=\left(\begin{array}{ll} x_{2}-x_{1} & x_{3}-x_{1} \\ y_{2}-y_{1} & y_{3}-y_{1} \end{array}\right) J=(x2​−x1​y2​−y1​​x3​−x1​y3​−y1​​)
则有
∣ J ∣ = ( x 2 − x 1 ) ( y 3 − y 1 ) − ( x 3 − x 1 ) ( y 2 − y 1 ) , |J|=\left(x_{2}-x_{1}\right)\left(y_{3}-y_{1}\right)-\left(x_{3}-x_{1}\right)\left(y_{2}-y_{1}\right), ∣J∣=(x2​−x1​)(y3​−y1​)−(x3​−x1​)(y2​−y1​),
x ^ = ( y 3 − y 1 ) ( x − x 1 ) − ( x 3 − x 1 ) ( y − y 1 ) ∣ J ∣ y ^ = − ( y 2 − y 1 ) ( x − x 1 ) + ( x 2 − x 1 ) ( y − y 1 ) ∣ J ∣ \begin{aligned} \hat{x} & =\frac{\left(y_{3}-y_{1}\right)\left(x-x_{1}\right)-\left(x_{3}-x_{1}\right)\left(y-y_{1}\right)}{|J|} \\ \hat{y} & =\frac{-\left(y_{2}-y_{1}\right)\left(x-x_{1}\right)+\left(x_{2}-x_{1}\right)\left(y-y_{1}\right)}{|J|} \end{aligned} x^y^​​=∣J∣(y3​−y1​)(x−x1​)−(x3​−x1​)(y−y1​)​=∣J∣−(y2​−y1​)(x−x1​)+(x2​−x1​)(y−y1​)​​

有限元计算

选择有限元空间 U h = s p a n { ψ i } i = 1 N b U_h =span\{ \psi_i\}_{i=1}^{N_b} Uh​=span{ψi​}i=1Nb​​ 其中 N b N_b Nb​ 为有限元节点数目(注与网格的几何节点数不一定相同)。
因此 u h ∈ U h Γ u_h \in U_h^{\Gamma} uh​∈UhΓ​ 则有
u h = ∑ i = 1 N b u i ψ i ( 17 ) u_h=\sum_{i=1}^{N_b}u_i\psi_i \ \ \ \ \ \ \ (17) uh​=i=1∑Nb​​ui​ψi​       (17)
且满足 u h = g ( x , y ) ∈ Γ u u_h = g \ \ \ \ (x, y) \in \Gamma_u uh​=g    (x,y)∈Γu​

综上, 选择 " t e s t f u n c t i o n test \ \ \ function test   function" v h = ψ i ( i = 1 , . . . , N t ) v_h = \psi_i(i=1,...,N_t) vh​=ψi​(i=1,...,Nt​), 则离散有限元方程为:
∫ Ω ∇ ( ∑ j = 1 N b u j ψ j ) ⋅ ∇ ψ i d x d y = 0 ⇒ ∑ j = 1 N b u j [ ∫ Ω ∇ ψ j ⋅ ∇ ψ i d x d y ] = 0 , i = 1 , ⋯ , N t ( 18 ) \begin{aligned} & \int_{\Omega} \nabla\left(\sum_{j=1}^{N_{b}} u_{j} \psi_{j}\right) \cdot \nabla \psi_{i} d x d y=0 \\ \Rightarrow & \sum_{j=1}^{N_{b}} u_{j}\left[\int_{\Omega} \nabla \psi_{j} \cdot \nabla \psi_{i} d x d y\right]=0, \quad i=1, \cdots, N_{t} \end{aligned} \ \ \ \ \ (18) ⇒​∫Ω​∇(j=1∑Nb​​uj​ψj​)⋅∇ψi​dxdy=0j=1∑Nb​​uj​[∫Ω​∇ψj​⋅∇ψi​dxdy]=0,i=1,⋯,Nt​​     (18)

刚度矩阵

A = [ a i j ] = [ ∫ Ω ∇ ψ j ⋅ ∇ ψ i d x d y ] i , j = 1 i = N t , j = N b A=\left[a_{i j}\right]=\left[\int_{\Omega} \nabla \psi_{j} \cdot \nabla \psi_{i} d x d y\right]_{i, j=1}^{i=N_{t}, j=N_{b}} A=[aij​]=[∫Ω​∇ψj​⋅∇ψi​dxdy]i,j=1i=Nt​,j=Nb​​

荷载(右端项)

b ⃗ = [ b i ] i = 1 i = N t = 0 \vec{b}=\left[b_{i}\right]_{i=1}^{i=N_{t}}=0 b =[bi​]i=1i=Nt​​=0

算法(伪代码)

Stiffness matrix Calculation

Load vector Calculation

Deal with the boundary conditions

程序

具体程序介绍可以参考我的另一篇博客 :有限元方法求解二维拉普拉斯方程C++实现

示例结果

有限元方法基础-以二维拉普拉斯方程为例(附程序)相关推荐

  1. 有限元方法入门:有限元方法简单的二维算例(三角形剖分)

    有限元方法简单的二维算例(三角形剖分) 文章目录 有限元方法简单的二维算例(三角形剖分) 算例描述 变分问题 有限元离散 问题转化 有限元三要素 参考单元与一般单元 一般单元上的形函数 一般单元上的积 ...

  2. 有限元方法入门:有限元方法简单的二维算例(矩形剖分)

    #有限元方法简单的二维算例(矩形剖分) 算例描述 我们对下述椭圆边值问题 \label{eq1}{−Δu=fu∣∂Ω=0\left \{ \begin{aligned} & -\Delta u ...

  3. 有限元方法求解二维拉普拉斯方程C++实现

    文章目录 前言 问题 区域 方程 程序设计 几何区域 网格单元 刚度矩阵组装 数值结果 问题区域网格 u 值图像(结果导出借助Matlab画图) 总结 前言 本文利用C++语言实现在二维任意区域(内部 ...

  4. 二维拉普拉斯方程的极坐标形式

    https://www.zhihu.com/question/29096466 目录 参考文章 Cauchy-Riemann方程的极坐标形式(翻译) 拉普拉斯方程极坐标形式是怎么推导出来的 极坐标形式 ...

  5. 二维拉普拉斯方程的基本解

  6. 二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现

    有限元法求解二维 Poisson 方程的 MATLAB 实现 陈 莲a ,郭元辉b ,邹叶童a ( 西华师范大学 a. 数学与信息学院; b. 教育信息技术中心,四川南充 6437009) 摘 要: ...

  7. 二维burgers方程_二维Burgers方程的RKDG有限元解法

    二维 Burgers 方程的 RKDG 有限元解法 ∗ 马艳春 1, 张寅虎 2, 冯新龙 1 [摘 要] 摘 要 : 本文应用 RKDG 有限元方法求解具有周期边界条件的二维非粘 性 Burgers ...

  8. 二维Poisson方程五点差分格式及简单求解方法Python实现

    二维Poisson方程简介 给出 二维 PoissonPoissonPoisson 方程 DirichletDirichletDirichlet 边值问题: {−Δu=f(x,y)(x,y)∈Ωu=φ ...

  9. 二维burgers方程_用格子Boltzmann方法研究二维Burgers方程

    用格子 Boltzmann 方法研究二维 Burgers 方程 张伟 ; 李文杰 [期刊名称] <天津城市建设学院学报> [年 ( 卷 ), 期] 2012(018)001 [ 摘 要 ] ...

最新文章

  1. 安装JDK1.8+环境配置
  2. C# winform DataGridView 常见属性
  3. 电脑显示计算机无法显示,如果计算机无法打开怎么办?
  4. 10.2.0.5启动enterprise manager
  5. activiti异步执行_对基于消息队列的Activiti异步执行器进行基准测试
  6. bzoj 4300 绝世好题 —— 思路
  7. 本机连接opc server有部分数据不刷新_实时数据库PI在企业MES系统中的应用
  8. 有效利用番茄工作法提高效率--XorTime的使用方法
  9. 在linux里如何建立一个快捷方式,连接到另一个目录
  10. Chrome OS 开发者版现可备份和恢复 Linux 容器
  11. rocketmq安装教程以及遇到的坑排查
  12. 适合中小企业发展的内网即时通讯软件应该具备什么
  13. 笔记本电脑建立Wifi热点多种方法
  14. AdGuard Home 安装使用教程
  15. echarts-横坐标文字竖着显示和倾斜45度显示
  16. 读《刻意练习》后感,与原文好句摘抄
  17. 基于安卓/微信小程序的个人健康打卡系统
  18. Heavy Transportation - dijkstra
  19. [经验分享] 覃超直播课学习笔记
  20. 加密狗圣天诺LDK V7.5特性

热门文章

  1. 聊天室c语言程序,socket 多线程聊天室的实现(C语言)
  2. 当前中国计算机硬件发展情况,中国计算机硬件技术发展与展望.doc
  3. 张艾迪(创始人):期待改变世界的力量
  4. VMware虚拟机安装教程图解,虚拟机详细使用教程
  5. phpStudy激活码
  6. 三、Git本地仓库基本操作——git仓库忽略跟踪文件
  7. 基因表达半衰期 | mRNA Half-Life
  8. 词法分析二(词法分析程序)
  9. WiFi定频操作一:TX测试-rtwpriv-----WIFI2.4G测试指令
  10. Zigbee协调器主动使终端节点退网