非线性方程的数值解

二分法

求解 f ( x ) = 0 f(x)=0 f(x)=0,首先取一段区间 [ a , b ] [a,b] [a,b],若 f ( a ) f ( b ) ≤ 0 f(a)f(b)\le0 f(a)f(b)0,说明 [ a , b ] [a,b] [a,b] 区间上存在零点。通过不断地把函数零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值。

假设 a 0 = a a_0=a a0=a b 0 = b b_0=b b0=b,第 k k k 步迭代的零点区间为 [ a k , b k ] [a_k,b_k] [ak,bk],近似解为 x k = a k + b k 2 x_k=\frac{a_k+b_k}{2} xk=2ak+bk,精确解为 x ∗ ∈ [ a k , b k ] x^\ast\in[a_k,b_k] x[ak,bk]。则 ∣ x k − x ∗ ∣ = ∣ a k + b k 2 − x ∗ ∣ ≤ b k − a k 2 = b k − 1 − a k − 1 2 2 = ⋯ = b 0 − a 0 2 k + 1 = b − a 2 k + 1 |x_k-x^\ast|=\left|\frac{a_k+b_k}{2}-x^\ast\right|\le\frac{b_k-a_k}{2}=\frac{b_{k-1}-a_{k-1}}{2^2}=\cdots=\frac{b_0-a_0}{2^{k+1}}=\frac{b-a}{2^{k+1}} xkx=2ak+bkx2bkak=22bk1ak1==2k+1b0a0=2k+1ba,对于给定的精度 ε \varepsilon ε,可估计二分法所需的步数 b − a 2 k + 1 ≤ ε \frac{b-a}{2^{k+1}}\le\varepsilon 2k+1baε,即 k ≥ log ⁡ 2 b − a ε − 1 k\ge\log_2\frac{b-a}{\varepsilon}-1 klog2εba1,取 k = ⌈ log ⁡ 2 b − a ε ⌉ − 1 k=\left\lceil\log_2\frac{b-a}{\varepsilon}\right\rceil-1 k=log2εba1

这里并不打算花费过多笔墨介绍二分法,二分法原理简单,其用途不仅仅于求解非线性方程;二分法在算法竞赛中也有广泛的应用,许多具有单调性的讨论都可用二分法解决。

试值法

由于二分法收敛速度相对较慢,因此试值法对他进行了改进。

若在区间 [ a , b ] [a,b] [a,b] 上有 f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0,则考虑经过 ( a , f ( a ) ) (a,f(a)) (a,f(a)) ( b , f ( b ) ) (b,f(b)) (b,f(b)) 的割线与 x x x 轴的交点 ( c , 0 ) (c,0) (c,0) 为更好的近似值。割线方程为 y − f ( b ) = f ( b ) − f ( a ) b − a ( x − b ) y-f(b)=\frac{f(b)-f(a)}{b-a}(x-b) yf(b)=baf(b)f(a)(xb),令 y = 0 y=0 y=0 c = b − f ( b ) ( b − a ) f ( b ) − f ( a ) c=b-\frac{f(b)(b-a)}{f(b)-f(a)} c=bf(b)f(a)f(b)(ba)

f ( a ) f ( c ) < 0 f(a)f(c)<0 f(a)f(c)<0,则在 [ a , c ] [a,c] [a,c] 内有一个零点;若 f ( b ) f ( c ) < 0 f(b)f(c)<0 f(b)f(c)<0,则 [ c , b ] [c,b] [c,b] 内有一个零点。

不动点迭代

对于非线性方程 f ( x ) = 0 f(x)=0 f(x)=0,将其等价变换为 x = g ( x ) x=g(x) x=g(x) g g g 的不动点 x ∗ x^\ast x 就是 f ( x ) = 0 f(x)=0 f(x)=0 的解。从一个初始值 x 0 x_0 x0 出发,令 x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk),不断迭代;若 { x k } \{x_k\} {xk} 收敛,即存在 x ∗ x^\ast x 使得 lim ⁡ k → ∞ x k = x ∗ \lim\limits_{k\to\infty}x_k=x^\ast klimxk=x;根据迭代数列的产生方式, lim ⁡ k → ∞ x k + 1 = lim ⁡ k → ∞ g ( x k ) \lim\limits_{k\to\infty}x_{k+1}=\lim\limits_{k\to\infty}g(x_k) klimxk+1=klimg(xk),可知 x ∗ = g ( x ∗ ) x^\ast=g(x^\ast) x=g(x) x ∗ x^\ast x 就是 g g g 的不动点。

不动点存在性

g ∈ C [ a , b ] g\in C[a,b] gC[a,b]。如果对于所有 x ∈ [ a , b ] x\in[a,b] x[a,b],映射 y = g ( x ) y=g(x) y=g(x) 的范围满足 y ∈ [ a , b ] y\in[a,b] y[a,b],则函数 g g g [ a , b ] [a,b] [a,b] 内有一个不动点;此外,设 g ′ ( x ) g'(x) g(x) 定义在 ( a , b ) (a,b) (a,b) 内,且对于所有 x ∈ ( a , b ) x\in(a,b) x(a,b),存在常数 0 ≤ K < 1 0\le K<1 0K<1,使得 ∣ g ′ ( x ) ∣ ≤ K < 1 |g'(x)|\le K<1 g(x)K<1,则函数 g g g [ a , b ] [a,b] [a,b] 内有唯一的不动点。

证明 f ( x ) = g ( x ) − x f(x)=g(x)-x f(x)=g(x)x,故 f ( a ) = g ( a ) − a ≥ 0 f(a)=g(a)-a\ge0 f(a)=g(a)a0 f ( b ) = g ( b ) − b ≤ 0 f(b)=g(b)-b\le0 f(b)=g(b)b0,所以 [ a , b ] [a,b] [a,b] 上存在 f f f 的零点,即 [ a , b ] [a,b] [a,b] 上存在 g g g 的不动点。假设在 [ a , b ] [a,b] [a,b] 上有两个不动点 P 1 , P 2 P_1,P_2 P1,P2,根据中值定理,存在 ξ ∈ ( a , b ) \xi\in(a,b) ξ(a,b) g ′ ( ξ ) = g ( P 1 ) − g ( P 2 ) P 1 − P 2 = 1 g'(\xi)=\frac{g(P_1)-g(P_2)}{P_1-P_2}=1 g(ξ)=P1P2g(P1)g(P2)=1,这与 ∣ g ′ ( x ) ∣ < 1 |g'(x)|<1 g(x)<1 矛盾,故存在唯一不动点。

收敛阶

不动点迭代中,若迭代数列收敛,且对于真实值 x ∗ x^\ast x g ( x ∗ ) ≠ 0 g(x^\ast)\neq 0 g(x)=0。则 e k + 1 = x k + 1 − x ∗ = g ( x k ) − g ( x ∗ ) e_{k+1}=x_{k+1}-x^\ast=g(x_k)-g(x^\ast) ek+1=xk+1x=g(xk)g(x),由中值定理,存在 ξ ∈ ( min ⁡ ( x k , x ∗ ) , max ⁡ ( x k , x ∗ ) ) \xi\in(\min(x_k,x^\ast),\max(x_k,x^\ast)) ξ(min(xk,x),max(xk,x)) 使得 g ′ ( ξ ) = g ( x k ) − g ( x ∗ ) x k − x ∗ g'(\xi)=\frac{g(x_k)-g(x^\ast)}{x_k-x^\ast} g(ξ)=xkxg(xk)g(x),故 e k + 1 = g ′ ( ξ ) ⋅ e k e_{k+1}=g'(\xi)\cdot e_k ek+1=g(ξ)ek。于是 lim ⁡ k → ∞ ∣ e k + 1 e k ∣ = g ′ ( x ∗ ) ≠ 0 \lim\limits_{k\to\infty}|\frac{e_{k+1}}{e_k}|=g'(x^\ast)\neq 0 klimekek+1=g(x)=0,不动点迭代是线性收敛的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值