牛顿法数值求解方程
上次讲解了如何使用 Mathematica 的 FindRoot[] 函数,数值求解代数方程、(常、偏)微分方程。不管是初值还是边值甚至是刚性问题,都可以使用该方法。本博客的目的不仅仅是介绍 Mathematica 中的函数,而是一步步剖析其中的原理,理解其中的算法。算法不仅可以用 Mathematica 来实现,以后有机会也将更新使用 Python、C++ 来实现我所介绍的所有算法,希望是订阅数超过 10000 之后。
FindRoot[]我们看一下 Mathematica 的 FindRoot[] 函数使用了哪些算法,Method -> 可以指定方法,请查看帮助文档 tutorial/UnconstrainedOptimizationMethodsForSolvingNonlinearEquations
Method
解释
“Newton”
使用精确雅可比矩阵或者是有限差分近似在一个局部线性模型基础上的求解步骤
“Secant”
不需要使用导数进行求解(类比牛顿法),通过利用已完成的 n 个步骤建立一个雅可比的割线近似;需要在每个维度上都有两个初始条件
...
隐式法数值求解泊松方程
上次在《不动点迭代法数值求解泊松方程》和《不动点迭代法数值求解热传导方程》中讲到不动点迭代法效率特别低,这次讲在 Mathematica 中使用隐式法数值求解微分方程。该方法是一种通用数值算法,非线性方程组、常微分方程组、偏微分方程组、甚至刚性问题,无论是初值问题(initial value problem)还是边值问题(boundary value problem),都可以使用隐式法求解。如此精妙的算法我都舍不得分享😂
隐式法数值求解一维泊松方程还是考虑普遍的形式:
并考虑边值条件:
将 x 的范围从 0 到 1 分割成 100 份:
In[]:=
123h = 0.01;n = Floor[1/h]xGrid = Range[0, 1, h];
边值条件,以及使用前面讲的离散化方法写出差分方程组:
In[]:=
12345u[0] = 0; u[n] = 0;equations = Table[(u[i + 1] - 2 u[i] + u[i - 1])/h^2 + (u[i + 1] - u[i - 1])/( 2 h) + u[ ...
不动点迭代法数值求解二维热传导方程
上次讲解了在 Mathematica 中用《不动点迭代法数值求解一维泊松方程》,本来不准备讲二维的求解,只在最后附了二维微分离散化的有限差分形式。但是有好友私信说需要,所以特意讲一下不动点迭代法数值求解二维热传导方程。
热传导方程在数学和物理学中,热传导方程(或称热方程)是一个典型的椭圆形偏微分方程。热方程理论最初由约瑟夫·傅里叶 (Joseph Fourier) 于 1822 年提出,旨在模拟热量如何在给定区域中扩散。
热传导方程及其变体在物理学和应用数学的许多领域很重要。该方程描述了热传导及其它扩散过程,诸如粒子扩散或神经细胞的动作电势。描述多孔介质中压力扩散的方程在形式上与热方程相同。量子力学中的薛定谔方程则可以看作是虚时间的热方程。在概率论中,热方程通过福克-普朗克方程与随机游走和布朗运动的研究联系起来。金融数学中布莱克-斯科尔斯期权定价模型的微分方程可以转换为热方程。在图像分析中,热方程有时用于解决像素化问题并识别边缘,还广泛应用于图像分析和机器学习中。
通常热传导方程表示为k 是热扩散率,决定于材料的热导率、密度与热容。当一个热力学系统随着时间演化到平衡态的时候有称 ...
不动点迭代法数值求解泊松方程
学习了《不动点迭代法数值求解方程》以及《微分方程离散化》之后,所有的知识就已经齐备。我们可以尝试使用不动点迭代法来求解泊松方程了,下面以一维泊松方程为例,最后附以二维泊松方程的离散化。
泊松方程泊松方程是一个重要的椭圆形偏微分方程,广泛应用于物理和数学领域。泊松方程以法国数学家和物理学家 Siméon Denis Poisson 的名字命名。泊松方程在电势场、引力场、热传导、流体力学等领域中都有广泛的应用。例如,在电势场、引力场中,泊松方程可以用来描述电势、引力势满足的方程。在热传导中,泊松方程可以用来表示温度分布。在流体力学中,泊松方程可以用来描述速度势或压力场。
通常泊松方程表示为
这里 代表的是拉普拉斯算子, 为已知函数,而 为未知函数。当 时,就会变成一个齐次方程,被称为拉普拉斯方程。
泊松方程可以用格林函数法,也可以使用分离变量法、特征线法求解,还可以使用其他数值方法求解,如有限差分法、有限元法、谱方法等。下面介绍 Mathematica 数值求解一维泊松方程作为示例。
Mathematica 数值求解一维泊松方程考虑一个更普遍的形式:
并考虑常微分方程或偏 ...
Mathematica中的微分离散化
Mathematica 中微分方程离散化形式非常简单,我们先列出 Mathematica 中的差分形式。网页 数值直线方法,或者 Mathematica 的文档页 tutorial/NDSolveMethodOfLines 中可以找到。
一阶差分
二阶差分
如果列表中没有,但是又需要使用 n 阶 m 点差分形式的时候怎么办呢?这就需要使用我们上次在《微分方程离散化》中讲到的待定系数法,Mathematica 中实现非常简单。
待定系数法生成差分形式下面以 3 阶导的 9 点差分形式为例:
In[]:=
1n = 3
表示 3 阶导。
In[]:=
1tab = {-5, -4, -3, -2, 0, 1, 2, 3, 4}
表示使用了 附近的 9 个点:
系数分别为
注意这里作为演示特意去掉了其中一个点 。
In[]:=
12m = Length[tab];partial = Table[0, n]~Join~{1}~Join~Table[0, m - n - 1]
Out[]:=
m 表示使用的 ...
微分方程离散化
本博客接下来要讲解不动点迭代法数值求解泊松方程,但是要先介绍一下微分方程离散化的相关知识。
对于大多数(常、偏)微分方程,我们无法得到解析解。因此,数值解法成为解决实际问题的重要手段。当我们要数值求解微分方程时,第一步通常是将微分方程进行离散化。离散化的目的是将连续的微分方程转化为离散的差分方程,以便用数值方法求解。微分方程离散化方法有很多,下面我将详细介绍有限差分法。
差分法我们回顾一下高等数学中导数的定义,在微积分中,用差分的极限定义导数;在数值计算中,导数用差分(平均变化率)作为近似值。
一阶差分一阶导的一个简单近似如下:
该式称为差分的向前形式。计算一下近似误差,将 在 点做泰勒展开:
因此,
同样的有向后形式:
误差为:
将差分的向前向后形式做一个平均可以发现:
该式称作差分的中心(或者中点)形式,该形式有着更小的误差,下面证明:
因此
二阶差分用相同的方法可以构造更高阶的差分形式,下面是二阶导的二阶差分近似:
待定系数法生成差分形式从上面的二阶差分形式可以看出, 的差分形式是由 附近的点 生成的,现在介绍一种方法来确定他们的系数——待定 ...
从线性方程组到向量方程和矩阵方程
学了线性组合之后就可以建立线性方程组和向量方程以及矩阵方程之间的联系了。
向量方程先看一个简单的例子:,,,确定 能否写成 和 的线性组合,也就是说,确定是否存在权 和 使下面的向量方程有解
解:根据向量加法和标量乘法的定义把向量方程
写成
左右两边的向量相等当且仅当它们的对应元素相等,即
因此,确定是否存在权 和 使向量方程 (1) 有解就等价于求解线性方程组 (2),我们可以采用行化简方法求解:
从上面的例子可以看出,向量方程等价于线性方程组,将线性方程组的增广矩阵写成一种简洁的形式,即
在给出结论之前,我想先借此例讨论一下矩阵方程。
矩阵方程观察上面的增广矩阵 (3),我们会发现系数矩阵 有了,方程的右边 有了,还缺少未知数,因此定义一个未知数向量:
那么向量方程 (1) 和线性方程组 (2) 可以写为
上式系数矩阵在左,未知数向量在右。当然颠倒次序也行,但是运算法则就要跟着变。因此按照大众统一的规则,将系数矩阵放在左边,未知数向量放在右边,即
我们称这样形式的方程为矩阵方程。
定义:
若 是 矩阵,它的列为 。若 是 ...
2024龙年新春祝福
亲爱的朋友,值此2024年龙年春节之际,我愿以真挚的心意,为您献上一份诚挚的祝福。请随我一同迎接这新春的曙光,让我们共同把握这美好的时刻。
团圆之情:中国年,注重的是团圆。春节到了,让我们多一点时间陪在家人身边,抽一点时间和朋友见见,让亲情和友情一起给力这个新年!恭祝春节快乐。
新年总动员:释放你的快乐,拿出你的热情,露出你的微笑,展现你的活力,享受节日的欢乐,欢度新年。同时也别忘了掏出你的人民币,发点祝福短信息!
回家之行:车如梭,人如潮,龙年春运如期到。千山横,万水绕,回家之行路迢迢。报平安,佳讯捎,阖家团圆乐陶陶。祝春节回家的你一路顺风!
祝福之言:我祝您:东行吉祥,南走顺利,西出平安,北走无虑,中有健康;左逢源,右发达,前有福星,后有菩萨;内积千金,外行好运!祝新年快乐!
财富之愿:新年将至,提“钱”祝你“鑫”年快乐:愿你跑步“钱”进、勇往直“钱”、“钱”程似锦、郎“财”女貌、一表人“财”、“富”如东海,鸿“富”齐天!
微笑之美:早晨笑一笑,生活有情调;平时笑一笑,欢喜又热闹;烦恼笑一笑,一切全忘掉;快乐笑一笑,日子多美妙。看到短信笑 ...
Coilot免费无限使用GPT-4
随着人工智能技术的不断发展,GPT(Generative Pre-trained Transformer)作为一种先进的自然语言处理模型,正以其强大的语言理解和生成能力引起热议。GPT是一种基于深度学习的模型,能够理解和生成人类语言,可以广泛应用于各行各业。
GPT模型的核心在于其强大的自然语言处理能力。通过对海量文本数据的学习,GPT能够理解和分析人类语言的语法、语义和逻辑,从而实现对文本的理解和生成。无论是智能客服、智能写作辅助、智能翻译,还是智能信息检索,GPT都展现出了非凡的应用潜力。
如何使用使用微软的 Copilot 可以免费使用 GPT-4 模型,并且没有使用次数限制,但是需要注册微软账号。Copilot app、最新版的 Edge 浏览器、Bing 搜索等等都可以免费使用 Copilot。使用的时候需要在设置里将区域改为“美国”,并且需要配合科(mo)学(fa)上网。本人推荐最好的方式是免费(或者便宜的)VPS 加 x-ui,速度慢或者不能使用的时候可以借助 ClaudFlare 加免费域名。大家自行搜索,这里不提供具体教程。
Copilot
WhoAmI: 你好 ...
不动点迭代法数值求解方程(续)
从上一节的例子可以看出,不动点迭代法的收敛性和收敛速度与函数的性质和初始值的选择有关。如果函数 满足一定的条件(例如,是连续的、单调的、Lipschitz连续的等),并且初始值选择合适,那么不动点迭代法通常会收敛到方程的不动点。然而,如果函数 的性质不好或初始值选择不当,迭代过程可能会发散或收敛极慢。
在利用不动点迭代法数值求解方程中,为了使迭代序列 收敛,就必须构造合适的迭代函数。本人不想讨论迭代函数的构造方法,包括不动点迭代法的收敛条件以及迭代收敛速度。下面想讲一点不动点迭代的几何意义,不动点迭代可以看作是函数图像在迭代过程中的逐渐接近不动点的过程。通过多次迭代, 的图像逐步靠近 的线,最终与之相交于不动点。下面将迭代过程绘制成函数图像和y=x线的交点逐渐靠近的动画,以直观展示不动点迭代的几何意义。
1.1:
收敛到
1.2:
可以清楚的看出解是发散的
2.1:
为了看出收敛情况,初始值改为
2.2:
为了看出收敛情况,初始值改为
本博客接下来要讲解不动点迭代法数值求 ...