有限元法之有限元空间的构造

目录

一、区域Ω的剖分

二、三角形一次元

三、一次元的基函数与面积坐标

四、三角形二次元及其基函数


        前两节我们介绍了有限元基本概念和变分理论的推导,本节我们继续探讨有限元空间的构造。 

一、区域Ω的剖分

        对矩形区域\Omega =[x_{a},x_{b}]\times [y_{c},y_{d}]进行三角剖分,其中x方向剖分m份,y方向剖分n份,共得到(m+1)(n+1)个节点及2mn个三角形单元。图1是m=5,n=4的剖分情况,节点编号用数字表示,单元用带圈的数字表示。为了实现后面的程序编写,必须明确单元上的局部编号与整体编号,如图2所示。通过设置剖分数,可以建立单元上整体编号与局部编号之间的关系,可设置二维数组lnd[\;][\;],第一个参数为单元编号,第二个参数为局部节点编号,如lnd[3][0]=8等,表示第3个单元第0号局部节点的整体节点编号为8,而lnd[2][1]=2则表示第2个单元第1号局部节点的整体节点编号为2。可以通过循环设置所有的节点。

图1 三角形剖分

图2 三角形单元的整体编号i,j,k与局部编号0,1,2

二、三角形一次元

        前面两节提到,可以选取V_{h}\subset V=H^{1}_{0}(\Omega)为分片连续的一次多项式函数空间,也就是在每个单元e上,V_{h}中的函数都是一次多项式,且要保证整体连续。因此对于相邻的两个三角形单元,它们有一条公共边,只要保证分片一次多项式在这条公共边的两个端点(也是剖分节点)处函数值相同即可保证函数整体连续。这样,分片一次多项式在每个单元上的表达式就可以由它在3个顶点处的值唯一确定。下面,在节点P_{i},P_{j},P_{k}(对应整体编号为i,j,k)的单元e上考虑数值解u_{h}的表达式,尝试用基函数来表示u_{h}(x,y)|_{e}=u_{i}\lambda _{0}(x,y)+u_{j}\lambda _{1}(x,y)+u_{k}\lambda _{2}(x,y),其中\lambda_{0},\lambda_{1},\lambda_{2}为待定基函数,满足以下性质:

\lambda_{0}(P_{i})=1,\lambda_{0}(P_{j})=0,\lambda_{0}(P_{k})=0 \;\;\;\;\; (1)

\lambda_{1}(P_{i})=0,\lambda_{1}(P_{j})=1,\lambda_{1}(P_{k})=0 \;\;\;\;\; (2)

\lambda_{2}(P_{i})=0,\lambda_{2}(P_{j})=0,\lambda_{2}(P_{k})=1 \;\;\;\;\; (3)

且它们都是一次函数。这样,数值解u_{h}在单元e上的表达式完全由它在3个顶点处P_{i},P_{j},P_{k}处的值u_{i},u_{j},u_{k}决定,u_{i},u_{j},u_{k}可以看作精确解u在整体编号i,j,k的节点处的近似。一旦把所有u_{i},i=0,1,\cdots,(m+1)(n+1)-1求出来(边界点除外,因为u_{h}\in V_{h}从而边界节点处u_{h}的值为零),则数值解u_{h}的表达式也就确定了。所以现在的基本问题是对离散问题式

u_{h}(x,y)\in V_{h},使得a(u_{h},v_{h})=(f,v_{h})\;\;\;\;\forall v_{h}(x,y)\in V_{h}

建立u_{i},i=0,1,\cdots,(m+1)(n+1)-1的关系式。

三、一次元的基函数与面积坐标

        由于基函数在单元e上是一次多项式,尝试设\lambda_{0}(x,y)|_{e}=ax+by+c,其中a,b,c为待定系数,且单元e上s号节点P_{s}的坐标为(x_{s},y_{s}),s=i,j,k,则由条件公式(1)可知:

\left\{\begin{matrix} ax_{i}+by_{i}+c=1,\\ ax_{j}+by_{j}+c=0,\\ ax_{k}+by_{k}+c=0, \end{matrix}\right.\;\;is\begin{pmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{pmatrix}\begin{pmatrix} a\\ b\\ c \end{pmatrix}=\begin{pmatrix} 1\\ 0\\ 0 \end{pmatrix}

从而解出

a=\frac{\begin{vmatrix} 1 & y_{i} & 1\\ 0 & y_{j} & 1\\ 0 & y_{k} & 1 \end{vmatrix}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}=\frac{y_{j}-y_{k}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}                b=\frac{\begin{vmatrix} x_{i} & 1 & 1\\ x_{j} & 0 & 1\\ x_{k} & 0 & 1 \end{vmatrix}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}=\frac{x_{k}-x_{j}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}

c=\frac{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 0\\ x_{k} & y_{k} & 0 \end{vmatrix}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}=\frac{x_{j}y_{k}-x_{k}y_{j}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}

代入可得

\lambda_{0}(x,y)|_{e}=\frac{x(y_{j}-y_{k})+y(x_{k}-x_{j})+(x_{j}y_{k}-x_{k}y_{j})}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}=\frac{\begin{vmatrix} x & y & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} &y_{k} &1 \end{vmatrix}}

可以证明以P_{i},P_{j},P_{k}(逆时针排列)为顶点的三角形单元e的面积S_{e}=\frac{1}{2}\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}

        于是,若\Delta P_{i}P_{j}P_{k}内有一点P的坐标为(x,y),如图3所示,则

\lambda_{0}(x,y)|_{e}=\frac{\begin{vmatrix} x & y & 1\\ x_{j} & y_{j} & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} &y_{k} &1 \end{vmatrix}}=\frac{2S_{\Delta PP_{j}P_{k}}}{2S_{\Delta P_{i}P_{j}P_{k}}}=\frac{S_{\Delta PP_{j}P_{k}}}{S_{e}}\;\;\;(4)

图3 三角形单元

 同理,

\lambda_{1}(x,y)|_{e}=\frac{\begin{vmatrix} x_{i} & y_{i} & 1\\ x & y & 1\\ x_{k} & y_{k} & 1 \end{vmatrix}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} &y_{k} &1 \end{vmatrix}}=\frac{S_{\Delta P_{i}PP_{k}}}{S_{e}},\lambda_{2}(x,y)|_{e}=\frac{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x & y & 1 \end{vmatrix}}{\begin{vmatrix} x_{i} & y_{i} & 1\\ x_{j} & y_{j} & 1\\ x_{k} &y_{k} &1 \end{vmatrix}}=\frac{S_{\Delta P_{i}P_{j}P}}{S_{e}}\;\;\;(5)

注意到S_{e}=S_{\Delta P_{i}P_{j}P_{k}}=S_{\Delta PP_{j}P_{k}}+S_{\Delta P_{i}PP_{k}}+S_{\Delta P_{i}P_{j}P},显然有

\lambda_{0}+\lambda_{1}+\lambda_{2}=1\;\;\;\;(6)

也就是说\lambda_{0},\lambda_{1},\lambda_{2}不是相互独立的。换言之,\Delta P_{i}P_{j}P_{k}内任一点P(x,y),必然可以唯一对应一组坐标(\lambda_{0},\lambda_{1}),基函数\lambda_{0},\lambda_{1},\lambda_{2}被称为重心坐标。由于它们又都是三角形的面积比,所以它们也称为面积坐标。面积坐标在有限元分析中非常重要,它是从一般单元变化到标准单元的工具,也是进行Sobolev空间范数估计的有效手段。事实上,公式(4)、(5)可以反解出直角坐标(x,y)与重心坐标之间的对应关系式:

\left\{\begin{matrix} x=x_{i}\lambda_{0}+x_{j}\lambda_{1}+x_{k}\lambda_{2}\\ y=y_{i}\lambda_{0}+y_{j}\lambda_{1}+y_{k}\lambda_{2} \end{matrix}\right.\;\;\;\; or\;\;\;\left\{\begin{matrix} x=(x_{i}-x_{k})\lambda_{0}+(x_{j}-x_{k})\lambda_{1}+x_{k}\\ y=(y_{i}-y_{k})\lambda_{0}+(y_{j}-y_{k})\lambda_{1}+y_{k} \end{matrix}\right.\;\;\;(7)

从而可以实现将一般的三角形单元\Delta P_{i}P_{j}P_{k}变换成标准单元\widehat{e},如图4所示。

图4 利用仿射坐标变换从一般单元变到标准单元

四、三角形二次元及其基函数

        我们除了可以选取V_{h}为分片连续的一次多项式函数空间外,也可以选取V_{h}为分片连续的二次多项式函数空间,也就是在每个单元e上,V_{h}中的函数都是二次多项式,且要保证整体连续。因此在每个单元e上,V_{h}中的分片二次多项式函数v(x,y)就形如v|_{e}=Ax^{2}+Bxy+Cy^{2}+Dx+Ey+F,其中A,B,C,D,E,F均为待定常数,从而需要有6个条件来唯一确定这个表达式。与一次元相似,要确定这6个常数,我们可以取三角形单元e的3个顶点及3条边的中点值作为条件(这些条件称为自由度),即分片二次多项式在每个单元上的表达式就可以由它在这个单元3个顶点和3条边的中点处的值唯一确定,这样也可以保证函数的整体连续性。事实上,在相邻的两个三角形单元上的公共边上,位置变量x和y有一个直线方程的线性约束,从而v(x,y)在这条边上成为一个只关于自变量x的二次函数,这个函数在3个不同的点(两个顶点和一个中点)上取值相同,说明v(x,y)在公共边上的表达式所示唯一确定的,也就是说,这个分片二次多项式在相邻两个单元上虽然整体表达式不相同,但在其公共边上表达式相同,这就保证了函数在\Omega上整体连续,从而实现V_{h}\subset V=H^{1}_{0}(\Omega)

        对于以上的三角形二次元,由于涉及到三角形单元的中点,所以尽管三角形剖分情况不变,即共有2mn个三角形单元,但整体节点数变为(2m+1)(2n+1)个,且节点的编号将随之发生改变。例如,图1将变为图5。

图5 三角形剖分及二次元节点图(各顶点也包含在内)

        接下来,在单元e上考虑数值解u_{h}\in V_{h}的表达式,其中e的3个顶点为P_{i},P_{j},P_{k}(对应整体编号为i,j,k),3条边的中点为P_{jk},P_{ki},P_{ij}(对应整体编号为\frac{j+k}{2},\frac{k+i}{2},\frac{i+j}{2}),如图6。

图6 三角形二次元

        u_{h}在单元e上的表达式尝试用基函数表示为

u_{h}(x,y)|_{e}=u_{i}\varphi_{0}(x,y)+u_{j}\varphi_{1}(x,y)+u_{k}\varphi_{2}(x,y)+u_{jk}\Psi_{0}(x,y)+u_{ki}\Psi_{1}(x,y)+u_{ij}\Psi_{2}(x,y)

其中\varphi_{0},\varphi_{1},\varphi_{2},\Psi_{0},\Psi_{1},\Psi_{2}为待定基函数,满足以下性质:

\varphi_{0}(P_{i})=1,\varphi_{0}(P_{j})=0,\varphi_{0}(P_{k})=0,\varphi_{0}(P_{jk})=0,\varphi_{0}(P_{ki})=0,\varphi_{0}(P_{ij})=0,

\varphi_{1}(P_{i})=0,\varphi_{1}(P_{j})=1,\varphi_{1}(P_{k})=0,\varphi_{1}(P_{jk})=0,\varphi_{1}(P_{ki})=0,\varphi_{1}(P_{ij})=0,

\varphi_{2}(P_{i})=0,\varphi_{2}(P_{j})=0,\varphi_{2}(P_{k})=1,\varphi_{2}(P_{jk})=0,\varphi_{2}(P_{ki})=0,\varphi_{2}(P_{ij})=0,

\Psi_{0}(P_{i})=0,\Psi_{0}(P_{j})=0,\Psi_{0}(P_{k})=0,\Psi_{0}(P_{jk})=1,\Psi_{0}(P_{ki})=0,\Psi_{0}(P_{ij})=0,

\Psi_{1}(P_{i})=0,\Psi_{1}(P_{j})=0,\Psi_{1}(P_{k})=0,\Psi_{1}(P_{jk})=1,\Psi_{1}(P_{ki})=1,\Psi_{1}(P_{ij})=0,

\Psi_{2}(P_{i})=0,\Psi_{2}(P_{j})=0,\Psi_{2}(P_{k})=0,\Psi_{2}(P_{jk})=1,\Psi_{2}(P_{ki})=0,\Psi_{2}(P_{ij})=1. 

        利用重心坐标,很容易将上述基函数表示出来,即有分别对应于三角形单元3个顶点P_{i},P_{j},P_{k}的基函数:

\varphi_{0}(x,y)=\lambda_{0}(2\lambda_{0}-1),\varphi_{1}(x,y)=\lambda_{1}(2\lambda_{1}-1),\varphi_{2}(x,y)=\lambda_{2}(2\lambda_{2}-1)

及对应于三角形3条边中点P_{jk},P_{ki},P_{ij}的 基函数:

\Psi_{0}=4\lambda_{1}\lambda_{2},\Psi_{1}=4\lambda_{2}\lambda_{0},\Psi_{2}=4\lambda_{0}\lambda_{1}

至此,数值解 u_{h}在单元e上的表达式就确定为:

u_{h}(x,y)|_{e}=u_{i}\lambda_{0}(2\lambda_{0}-1)+u_{j}\lambda_{1}(2\lambda_{1}-1)+u_{k}\lambda_{2}(2\lambda_{2}-1)+4u_{jk}\lambda_{1}\lambda_{2}+4u_{ki}\lambda_{2}\lambda_{0}+4u_{ij}\lambda_{0}\lambda_{1}

        综上,有限元空间X_{h}由一个三元组(e,V_{h},\sum)确定。具体的,设\tau_{h}是区域Ω的一个剖分,e是剖分\tau_{h}中的单元,参数h定义为所有单元的最大直径,即h=\underset{e\in\tau_{h}}{max}(diam(e))V_{h}是选定的分片多项式函数空间,\sum是每个e上用于唯一确定V_{h}内的多项式函数所需要的条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/17008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的管理员用户名为root,密码默认为空,如何修改root密码?

MySQL的管理员用户名为root,密码默认为空。1、修改 root密码 MYSQL配置好后,启动成功,默认密码是空,但是为了安全,设置密码(mysql有 一个默认的用户名为root,密码自己定。) …

类 和 对象(二)

构造方法 接上篇,若每次都想下面的setDate方法给对象初始化,未免比较麻烦,那有什么方法可以让初始化更加简便呢? public void setDate(int year, int month, int day){this.year year;this.month month;this.day day;}答&#…

文献分享《Microbiome and cancer》

人类微生物群构成了一个复杂的多王国群落,与宿主在多个身体部位共生相互作用。宿主-微生物群的相互作用影响多 种生理过程和各种多因素的疾病条件。在过去的十年中,微生物群落被认为会影响多种癌症类型的发展、进展、转移 形成和治疗反应。虽然微生物对癌…

C++ final 和 override

final 和 override 是 C11 引入的两个关键字,它们的主要作用如下:final:用于指定一个类不能被继承,或者一个虚函数不能被子类重写。这有助于保护类的设计,防止意外的修改。override:用于显式地指出一个成员…

Linux Kernel入门到精通系列讲解(QEMU-虚拟化篇) 2.4 创建Virtio和fw_cfg虚拟化环境

1. 概述 到这个阶段,我们已经把U-boot给跑起来了,如果感兴趣的小伙伴可以去看看。 什么是virtio? QEMU virtio是QEMU(Quick EMUlator)虚拟化技术中用于提高I/O性能的一种机制。QEMU是一个开源的虚拟化软件,可以模拟完整的计算机系统,包括CPU、内存和各种I/O设备。QEMU v…

2024年短视频评论区批量爬取采集软件

一、背景说明 前言 评论区引流,顾名思义,是通过在视频下方进行留言评论、回复评论,吸引用户的注意,从而和你的账号产生互动、交易。比如,在一个关于健身的视频下方,留言分享自己的健身经验或者提出问题。…

使用 SwanLab 进行可视化 MNIST 手写体识别训练

使用 SwanLab 进行可视化 MNIST 手写体识别训练 在线演示demo 本案例主要: 使用pytorch进行CNN(卷积神经网络)的构建、模型训练与评估使用swanlab跟踪超参数、记录指标和可视化监控整个训练周期 一、相关简介 SwanLab SwanLab是一款开源…

gRPC - Protocol Buffer 编译器安装

文章目录 Protocol Buffer 编译器安装如何安装 Protocol Buffer 编译器使用包管理器安装Linux 上,使用 apt 或 apt-get,例如:macOS 上,使用 Homebrew: 安装预编译的二进制文件(任何操作系统)其他…

凭借这点高效备考HCIA,一般人我不告诉他

在这个信息爆炸的时代,备考HCIA认证时,利用好在线资源可以大大提升学习效率。 以下是一些只有内行人才知道的高效备考策略,通过这些方法,你可以事半功倍,轻松拿下HCIA认证。 01 找到最适合你的学习方式 每个人的学习方…

Linux中ftp配置

一、ftp协议 1、端口 ftp默认使用20、21端口 20端口用于建立数据连接 21端口用于建立控制连接 2、ftp数据连接模式 主动模式:服务器主动发起数据连接 被动模式:服务器被动等待数据连接 二、ftp安装 yum install -y vsftpd #---下…

使用httpx异步获取高校招生信息:一步到位的代理配置教程

概述 随着2024年中国高考的临近,考生和家长对高校招生信息的需求日益增加。了解各高校的专业、课程设置和录取标准对于高考志愿填报至关重要。通过爬虫技术,可以高效地从各高校官网获取这些关键信息。然而,面对大量的请求和反爬机制的挑战&a…

蓝桥杯物联网竞赛_STM32L071KBU6_字符串处理

前言: 个人感觉国赛相较于省赛难度上升的点在于对于接收的字符串的处理,例如串口发送的字符串一般包含字母字符串 数字字符串,亦或者更复杂,对于LORA也是如此,传递的字符串如#9#1亦或者#1a#90,#1#12,如何…

4.每日LeetCode-数组类,斐波那契数(Go,Java,Python)

题目 题号:509斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0…

剖析【C++】——类与对象(上)超详解——小白篇

目录 1.面向过程和面向对象的初步认识 1.面向过程(Procedural Programming) 2.面向对象(Object-Oriented Programming) 概念: 特点: 总结 2.C 类的引入 1.从 C 语言的结构体到 C 的类 2.C 中的结构…

调用萨姆索诺夫函数:深入探索函数的参数与返回值

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、萨姆索诺夫函数的引入与调用 二、如何获取函数的返回值 三、无参数与无返回值的函数调…

帝国CMS验证码不显示怎么回事呢?

帝国CMS验证码有时候会不显示或打叉,总结自己的解决方法。 1、检查服务器是否开启GD库 测试GD库是否开启的方法:浏览器访问:/e/showkey/index.php,如果出现一堆乱码或报错,证明GD库没有开启,开启即可。 2…

聊聊2024上半年软考高项

今年和去年机考区别: 去年高项分了三个批次,其中有一部分人不是在周末考的试;今年分了两个批次,时间是25、26号;仍然是联考的形式。去年是综合知识在上午,案例分析和论文在下午;今年是综合知识…

[随笔] 在CSDN的6周年纪念日随笔

纪念 转眼已过6年,大一的时候学习编程,潜水 CSDN 学习各类博文,才学浅薄就没有主动写博文记录自己的学习历程。 过了段时间刚刚到了大二,很喜欢 Todolist,意气风发的写下《一份清爽的编程计划》,哈哈。 …

一文读懂npm i的命令以及作用

目录 1. 基本知识2. 常见用法 1. 基本知识 npm i 是 Node Package Manager (npm) 的一个命令,用于安装 Node.js 项目依赖的包 是 npm install 的简写形式,功能完全相同 详细解析 npm: npm 是 Node.js 的包管理工具,用于安装、共…

数据结构-队列(带图详解)

目录 队列的概念 画图理解队列 代码图理解 代码展示(注意这个队列是单链表的结构实现) Queue.h(队列结构) Queue.c(函数/API实现) main.c(测试文件) 队列的概念 队列(Queue)是一种基础的数据结构,它遵循先进先出(First In …