FEALPy 算例:微分、变分到有限元求解非线性方程
以下文章来源于算海扬帆 ,作者陈春雨
简介
核心开发者:魏华祎 开发单位:湘潭大学 编程语言:Python 开源类型:GNU General Public License 邮箱:weihuayi@xtu.edu.cn 托管网址: https://github.com/weihuayi/fealpy https://gitlab.com/weihuayi/fealpy https://github.com/deepmodeling/fealpy https://gitee.com/whymath/fealpy 帮助文档: https://www.weihuayi.cn/fealpy/docs/zh/quick-start 下载页面: https://code.koushare.com/#/code/codeDetail?codeId=217 (请复制链接至浏览器打开,或点击左下方“阅读原文”跳转)
变分是一个非常强大的数学工具, 在计算数学理论和算法设计中有很多应用.冯康院士借助变分原理奠定了有限元计算方法的严格数学理论, 为后世有限元计算方法的实际应用提供了理论保证, 是近代中国数学的巨大创新.
在笔者学习的过程中发现很多资料中只讲了变分的计算, 没有说明计算出来的变分是什么?但是事实上变分就是无穷维Hilbert空间上的微分. 所以本文从微分出发,讲一讲微分与变分之间的联系, 最后使用 FEALPy, 基于变分求解一个非线性抛物方程.
一、微分
定义: 设函数 为在 邻域有定义的函数, 若存在 , 使得
则称 在 处可微, 微分为
在梅加强版的数学分析中, 将 的线性映射称为 在 处的微分. 对于 上的函数 可以类似定义:
定义: 设函数 为在 周围有定义的函数, 若存在 , 使得
则称 在 处可微, 微分为
在梅加强版的数学分析中, 将 的线性映射称为 在 处的微分.
注: 为什么要说微分 是一个线性映射呢? 这里引用[1]中的解释: 首先看微分 是做什么用的, 告诉你: “我是一个无穷小增量, 你要问增量是多大, 你得给我一个方向 (向量) , 我告诉你在这个方向上的增量是多少 (实数) ”, 所以本身微分就是向量到实数的映射. 更多关于这个的讨论见[1]
二、变分
对于变分, 常见的定义是这样: 令 , 定义如下泛函:
, 关于 的变分为:
这样的定义其实并不好, 因为它只告诉了我们变分如何计算, 但是计算出来的 “变分”是什么? 这个定义就无法回答. 要回答这个问题, 我们还是要回到微分的定义, 从微分出发看变分应该是个什么.
正如前面所说: 我们希望 上的函数 的微分存在, 就要存在一个 , 使得
类似的, 对于一个空间 上的泛函 , 我们可以这样写:
那么问题来了, 是什么? 是通常的函数么? 很显然不是, 因为 是实数, 那么 也应该是实数, 所以 只能是一个泛函!而且与前面微分的对比, 还要是一个线性泛函, 定义在 上. 所以变分应该如下定义.
定义: 设 为 Banach 空间 上的一个泛函, 若能找到 上的一个线性泛函 , 使得:
对于任意的 成立, 则称 是 在 处的变分, 记为 .
可以证明变分有以下性质:
上的泛函是 到 上的映射, 更进一步, 对于 到任意其他 Banach 空间 上的的映射也可以有类似的定义[2].
定义: 设 是两个 Banach 空间, 对于一个算子 若存在一个线性算子 满足: 使得
对于任意的 成立, 则称 是 在 处的 Fr'echet 微分, 记为
同样, Fr'echet 微分也有以下性质:
为了方便叙述, 将 Fr'echet 微分与变分不加以区分, 将 Fr'echet 微分也当作变分.
三、牛顿迭代算法
变分应用非常广泛, 像求最速下降曲线方程, 测地线方程等, 很多资料中都有讲, 本文主要讲变分在计算数学中的一个应用: 非线性问题的线性化.
考虑非线性问题:
任选初值 , 记 在 处的变分为 , 令 , 则有
舍去高阶项后得到一个以 为未知量的线性问题:
令 , 就得到一个 的逼近, 代替 重复上面的过程就可以得到一个 ,以此类推就能得到一个函数列 , 当 满足某些性质 (本文不再展开) 时就有 , 这就是通过牛顿迭代求解非线性方程的过程.
四、有限元求解非线性抛物方程
现在我们使用上述的牛顿迭代法求解一个非线性抛物方程, 考虑问题:
其中
(1) 时间离散
首先时间区域离散, 将
记
令
则
(2) 迭代求解
假设已知第
这时有一个困难:
这是一个线性方程, 已经可以使用有限元方法求解了, 但是在此之前我们得先计算
其中
所以:
(3) 空间离散
令等式
使用分部积分上式转化为:
那么线性问题
令
(4) 有限元求解
记
则有限元问题
其中:
(5) 程序实现
程序实现见https://github.com/weihuayi/fealpy/tree/master/example/NonLinearParabolic_example.py
(6) 数值结果:
五、总结
六、参考文献
[1]梁灿彬, 周彬. 微分几何入门与广义相对论.上册.第2版[M]. 科学出版社, 2009. [2]Fr'echet derivative: https://en.wikipedia.org/wiki/Fr%C3%A9chet_derivative
推荐阅读
【科学代码】SPaMD: 材料原子级建模、模拟、分析和表征>>
【科学代码】VaspCZ:一个提高效率的VASP计算辅助程序>>
【科学代码】计算全同玻色体系的格林函数、密度分布和相变等热力学和基态性质的C++代码>>
编辑:黄琦
蔻享学术 平台介绍
蔻享学术平台,国内领先的一站式科学资源共享平台,依托国内外一流科研院所、高等院校和企业的科研力量,聚焦前沿科学,以优化科研创新环境、传播和服务科学、促进学科交叉融合为宗旨,打造优质学术资源的共享数据平台。
识别二维码,
下载 蔻享APP 查看最新资源数据。
点击阅读原文,查看更多精彩!