计算方法1 函数求根

严格写就太累了,这个就当是随手的笔记得了。大概看看原理,不求甚解。

Fixpoint Theorem

定义函数 f 的不动点 r 为满足 f(r)=r 的所有取值

考虑函数 f,定义不动点迭代算法如下:

  1. 任取 XD(f)
  2. 计算 X=f(X)
  3. 重复步骤2 k

记出现的所有 X 按顺序构成数列 {xn},定理如下

f 是连续函数,且 limnxn=r,那么 f(r)=r

证明:

f(r)=f(limnxn)=limnf(xn)=limnxn+1=r

根据定义,r 是一个不动点

具体解释就是,当 k 充分大的时候,我们会得到一个充分接近 r 的近似解(极限的定义)

Convergence Theorem

不动点定理说的是:如果迭代收敛,那么收敛到不动点

收敛定理则给出了迭代收敛的一个充分条件,也就是挑出了一类特殊的可以收敛的函数,给了一个判别条件。

定义 en=|xnr|,若 limnen+1en=S<1,那么称这个迭代是线性收敛的,收敛率为 S

若函数 f 连续可导,并且 rf 的一个不动点,那么由 |f(r)|<1 可以推出 f 在以一个足够接近 r 的初值开始迭代时线性收敛,收敛率为 S

这句话很难理解,但是结合证明就不太难了:

考虑 xn+1=f(xn),那么有 en+1en=|f(xn)rxnr|=|f(xn)f(r)xnr|=|f(ξ)|,其中 ξ(xn,r),最后一个等号是微分中值定理

取极限就得到了一个 x=r 处的导数,根据条件有这个极限的绝对值小于 1

又因为 f 连续可导,所以 f 连续,所以存在邻域 U=(rδ,r+δ) 使得 x(rδ,r+δ) 都有 |f(x)|<1

结合比值就知道,在 U 内任取一个元素作为初值开始迭代,每次的误差会严格递减。又因为误差单调有下界,所以收敛,并且收敛率就是 |f(r)|<1

我们把这类收敛称为局部收敛

具体解释就是,如果函数连续可导并且不动点处的导数比较好,那么存在一个区间 U,如果我们在 U 内开始迭代时,就能线性收敛到不动点,并且收敛率是不动点处的导数。

但是定理反过来不成立,意思是一个并非局部收敛的函数可能在别的地方收敛到此,这是完全可行的。

这个定理可以是后验的,即先算出一个收敛的点,然后求导验证是否满足定理前提。

根的敏感性

假设 f 的计算存在误差,例如给定 x 时我们只能计算 f(x)+ϵg(x),其中 ϵ 是一个小常数,g 是一个关于 x 的误差函数。那么我们在求根 r 时引入的误差就会进一步被放大。

不妨设求得的数值根为 r+Δr,那么我们此时求得的实际上是带误差的函数的根,满足

f(r+Δr)+ϵg(r+Δr)=0

两边泰勒展开一下就有

f(r)+Δrf(r)+ϵg(r)+ϵΔrg(r)+O(Δr2)=0

舍去高阶无穷小就是

Δr=ϵg(r)f(r)f(r)+Δrg(r)

注意到 f(r)=0f 的根的定义,且 Δr 很小,因此上式约为

Δrϵg(r)f(r)

posted @   jjppp  阅读(246)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-03-07 CSAPP实验5: cachelab
点击右上角即可分享
微信分享提示