计算方法(二):非线性方程求根

非线性方程求根

主要讨论单变量非线性方程
f ( x ) = 0                                 ( 2.1 ) f(x)=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2.1) f(x)=0                               (2.1)的求根问题 x ∈ R    ,    f ( x ) ∈ C [ a , b ] x\in R\ \ ,\ \ f(x)\in C[a,b] xR  ,  f(x)C[a,b].

(1)“根在哪里”,即确定根所在的区间,进行根的隔离。

(2)“根的求法”,通过数值方法,近似求解,并保证精度要求。

f ( x ) ∈ C [ a , b ] f(x)\in C[a,b] f(x)C[a,b] f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0 ,根据闭区间上连续函数性质可知 f ( x ) = 0 f(x)=0 f(x)=0 ( a , b ) (a,b) (a,b) 内至少有一个实根,称 [ a , b ] [a,b] [a,b] 为方程(2.1)的有根区间

二分法

f ( x ) ∈ C [ a , b ] f(x)\in C[a,b] f(x)C[a,b] f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0 ,根据连续函数性质可知 f ( x ) = 0 f(x)=0 f(x)=0 ( a , b ) (a,b) (a,b) 内至少有一个实根 x ∗ x^* x

考察有根区间 [ a , b ] [a,b] [a,b] ,取中点 x 0 = a + b 2 x_0=\frac{a+b}{2} x0=2a+b 将区间分为两半。若 f ( x 0 ) = 0 f(x_0)=0 f(x0)=0 ,则 x 0 x_0 x0 f ( x ) = 0 f(x)=0 f(x)=0 的实根 x ∗ x^* x 。若 f ( x 0 ) ≠ 0 f(x_0)\neq0 f(x0)=0 ,检查 f ( x 0 ) f(x_0) f(x0) f ( a ) f(a) f(a) 是否同号,即不等式:
f ( a ) f ( x 0 ) < 0 f(a)f(x_0)<0 f(a)f(x0)<0是否成立。如果成立,说明所求的根 x ∗ x^* x x 0 x_0 x0 的左侧,这时令 a 1 = a , b 1 = x 0 a_1=a,b_1=x_0 a1=a,b1=x0 ;否则 x ∗ x^* x 必在 x 0 x_0 x0 右侧,这时令 a 1 = x 0 , b 1 = b a_1=x_0,b_1=b a1=x0,b1=b ,两种情况都能得到一个新的有根区间 [ a 1 , b 1 ] [a_1,b_1] [a1,b1] ,其长度仅为 [ a , b ] [a,b] [a,b] 的一半。

对缩小了的有根区间 [ a 1 , b 1 ] [a_1,b_1] [a1,b1] 用中点 x 1 = a 1 + b 1 2 x_1=\frac{a_1+b_1}{2} x1=2a1+b1再分成两半,然后判断 x 1 x_1 x1 是不是根,并用
f ( a ) f ( x 1 ) < 0 f(a)f(x_1)<0 f(a)f(x1)<0是否成立来判断所求的根 x ∗ x^* x x 1 x_1 x1 的哪一侧,从而又确定一个新的有根区间 [ a 2 , b 2 ] [a_2,b_2] [a2,b2] ,其长度是 [ a 1 , b 1 ] [a_1,b_1] [a1,b1] 的一半。

如此反复二分下去,可以得出一系列有根区间
[ a , b ] ⊃ [ a 1 , b 1 ] ⊃ [ a 2 , b 2 ] ⊃ ⋯ ⊃ [ a k , b k ] ⊃ ⋯ [a,b]\supset[a_1,b_1]\supset[a_2,b_2]\supset\cdots\supset[a_k,b_k]\supset\cdots [a,b][a1,b1][a2,b2][ak,bk]其中区间每个区间都是前一个区间的一半,从而 [ a k , b k ] [a_k,b_k] [ak,bk] 的长度为
b k − a k = b − a 2 k b_k-a_k=\frac{b-a}{2^k} bkak=2kba k → ∞ k\rightarrow\infty k 时,此区间长度趋于零,如果二分过程无限地继续下去,这些区间最终必收缩于一点 x ∗ x^* x,为所求的根。

每次二分后,取有根区间 [ a n , b n ] [a_n,b_n] [an,bn] 的中点 x n = a n + b n 2 x_n=\frac{a_n+b_n}{2} xn=2an+bn 作为根的近似值,可以得到一个近似根的序列 x 0 , x 1 , x 2 , ⋯ x_0,x_1,x_2,\cdots x0,x1,x2,该序列必以根 x ∗ x^* x 为极限。

给定一个预定的精度 ε \varepsilon ε ,由 x ∗ ∈ [ a n , b n ] x^*\in [a_n,b_n] x[an,bn] ,可得
∣ x ∗ − x n ∣ ≤ 1 2 ( b n − a n ) = 1 2 n + 1 ( b − a ) |x^*-x_n|\leq\frac{1}{2}(b_n-a_n)=\frac{1}{2^{n+1}}(b-a) xxn21(bnan)=2n+11(ba)只要 n n n 充分大,使得
1 2 n + 1 ( b − a ) < ε      ,    即   n > [ ln ⁡ b − a ε / ln ⁡ 2 ] \frac{1}{2^{n+1}}(b-a)<\varepsilon\ \ \ \ , \ \ 即\ n>[\ln\frac{b-a}{\varepsilon}/\ln2] 2n+11(ba)<ε    ,   n>[lnεba/ln2]就有
∣ x ∗ − x n ∣ < ε |x^*-x_n|<\varepsilon xxn<ε x n x_n xn 就是一个满足精度要求的近似根。

注:在实际计算中,若 ∣ f ( x n ) ∣ |f(x_n)| f(xn) 很小: ∣ f ( x n ) ∣ < δ |f(x_n)|<\delta f(xn)<δ δ \delta δ 为给定的误差限),则 x n x_n xn 就可作为近似根。

二分法的优点算法简单,且总是收敛的缺点事先要确定有根区间,且收敛较慢,且不能用于求复根或偶数重根,一般不单独将其用于求根,只用其求根的一个较好的近似值。

迭代法

不动点迭代法(简单迭代法)

将方程 f ( x ) = 0 f(x)=0 f(x)=0 转化为:
x = g ( x ) x=g(x) x=g(x) x ∗ x^* x 满足 f ( x ∗ ) = 0 f(x^*)=0 f(x)=0,则 x ∗ = g ( x ∗ ) x^*=g(x^*) x=g(x) ,称 x ∗ x^* x 为函数 g ( x ) g(x) g(x) 的一个不动点

选择初始近似值 x 0 x_0 x0,代入得: x 1 = g ( x 0 ) x_1=g(x_0) x1=g(x0)

反复迭代: x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk) k = 0 , 1 , 2 , ⋯ k=0,1,2,\cdots k=0,1,2,,称 g ( x ) g(x) g(x)迭代函数,可得一个迭代序列{ x k x_k xk }

若对于 x 0 ∈ [ a , b ] x_0\in[a,b] x0[a,b],该迭代序列有极限: lim ⁡ k → ∞ x k = x ∗ \lim_{k\rightarrow\infty}x_k=x^* limkxk=x,则称迭代法收敛,且 x ∗ = g ( x ∗ ) x^*=g(x^*) x=g(x) g ( x ) g(x) g(x) 的不动点。若迭代序列发散,则称迭代法发散

不动点迭代法的基本思想:将隐式方程 f ( x ) = 0 f(x)=0 f(x)=0 化为显式的计算公式 x = g ( x ) x=g(x) x=g(x) ,然后通过迭代,求方程近似根。

迭代法几何意义: 方程 x = g ( x ) x=g(x) x=g(x) 的求根问题在 x y xy xy 平面上就是要确定曲线 x = g ( x ) x=g(x) x=g(x) 与直线 y = x y=x y=x 的交点 P ∗ P^* P

迭代法收敛的充分条件

压缩映照: 在区间[a,b]上定义的函数 g ( x ) g(x) g(x),若存在常数 L , 0 ≤ L ≤ 1 L,0\leq L\leq 1 L,0L1,使得 ∀ x , y ∈ [ a , b ] \forall x,y\in[a,b] x,y[a,b],都有:
∣ g ( x ) − g ( y ) ∣ ≤ L ∣ x − y ∣ |g(x)-g(y)|\leq L|x-y| g(x)g(y)Lxy则称映照 g ( x ) g(x) g(x) 在区间 [ a , b ] [a,b] [a,b] 上是压缩的

不动点的存在唯一性及误差分析

定理1: g ( x ) ∈ C [ a , b ] g(x)\in C[a,b] g(x)C[a,b] 满足以下两个条件:(1)任意 x ∈ [ a , b ] x\in [a,b] x[a,b],有 g ( x ) ∈ [ a , b ] g(x)\in[a,b] g(x)[a,b];(2)存在常数 L , 0 ≤ L ≤ 1 L,0\leq L\leq 1 L,0L1,使对任意 x , y ∈ [ a , b ] x,y\in[a,b] x,y[a,b],有
∣ g ( x ) − g ( y ) ∣ ≤ L ∣ x − y ∣ |g(x)-g(y)|\leq L|x-y| g(x)g(y)Lxy则:(1) x = g ( x ) x=g(x) x=g(x) [ a , b ] [a,b] [a,b] 上存在唯一实根 x ∗ x^* x;(2)对任意初值 x 0 ∈ [ a , b ] x_0\in[a,b] x0[a,b],由 x k + 1 = g ( x k ) x_{k+1}=g(x_k) xk+1=g(xk) 得到的迭代序列 { x k {x_k} xk}收敛到 x = g ( x ) x=g(x) x=g(x) [ a , b ] [a,b] [a,b] 的唯一实根 x ∗ x^* x,并有误差估计:
∣ x ∗ − x k ∣ ≤ 1 1 − L ∣ x k + 1 − x k ∣ ∣ x ∗ − x k ∣ ≤ L k 1 − L ∣ x 1 − x 0 ∣ |x^*-x_k|\leq \frac{1}{1-L}|x_{k+1}-x_k|\\|x^*-x_k|\leq\frac{L^k}{1-L}|x_1-x_0| xxk1L1xk+1xkxxk1LLkx1x0

证明如下:

先证不动点存在性。
定 义 函 数 : φ ( x ) = g ( x ) − x 显 然 φ ( x ) ∈ C [ a , b ] 。 因 为 a ≤ g ( x ) ≤ b , 有 φ ( a ) = g ( a ) − a ≥ 0 , φ ( b ) = g ( b ) − b ≤ 0 由 连 续 函 数 性 质 可 知 存 在   x ∗ ∈ ( a , b ) , 使 得   φ ( x ∗ ) = 0 , 即   g ( x ∗ ) = x ∗ , 为 不 动 点 定义函数:\varphi(x)=g(x)-x\\显然\varphi(x)\in C[a,b]。因为a\leq g(x)\leq b,有\\\varphi(a)=g(a)-a\geq0,\varphi(b)=g(b)-b\leq0\\由连续函数性质可知存在\ x^*\in(a,b),使得 \ \varphi(x^*)=0,即\ g(x^*)=x^*,为不动点 :φ(x)=g(x)xφ(x)C[a,b]ag(x)bφ(a)=g(a)a0,φ(b)=g(b)b0 x(a,b),使 φ(x)=0, g(x)=x,
再证唯一性。
设   x 1 ∗   及   x 2 ∗ ∈ [ a , b ] 是   g ( x )   的 两 个 不 同 的 不 动 点 , 则 ∣ x 1 ∗ − x 2 ∗ ∣ = ∣ g ( x 1 ∗ ) − g ( x 2 ∗ ) ∣ ≤ L ∣ x 1 ∗ − x 2 ∗ ∣ < ∣ x 1 ∗ − x 2 ∗ ∣ , 矛 盾 设\ x_1^*\ 及\ x_2^*\in[a,b]是\ g(x)\ 的两个不同的不动点,则\\|x_1^*-x_2^*|=|g(x_1^*)-g(x_2^*)|\leq L|x_1^*-x_2^*|<|x_1^*-x_2^*|,矛盾  x1  x2[a,b] g(x) x1x2=g(x1)g(x2)Lx1x2<x1x2,
误差估计:
∣ x k − x ∗ ∣ = ∣ g ( x k − 1 ) − g ( x ∗ ) ∣ ≤ L ∣ x k − 1 − x ∗ ∣ ≤ ⋯ ≤ L k ∣ x 0 − x ∗ ∣ ∣ x k + 1 − x k ∣ = ∣ g ( x k ) − g ( x k − 1 ) ∣ ≤ L ∣ x k − x k − 1 ∣ ≤ L k ∣ x 1 − x 0 ∣ 于 是 , 对 任 意 正 整 数   p , 有 ∣ x k + p − x k ∣ ≤ ∣ x k + p − x k + p − 1 ∣ + ∣ x k + p − 1 − x k + p − 2 ∣ + ⋯ + ∣ x k + 1 − x k ∣ ≤ ( L k + p − 1 + L k + p − 2 + ⋯ + L k ) ∣ x 1 − x 0 ∣ 令   p → ∞ , 注 意 到   lim ⁡ p → ∞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值