在许多实际问题中,问题的解决常常归结为解非线性代数方程组
F ( X ) = 0 , F(X)=0, F(X)=0,
这里
X = ( x 1 , x 2 , ⋯   , x n ) T ( x i ∈ [ a i , b i ] ) X=(x_1,x_2,\cdots,x_n)^T(x_i\in[a_i,b_i]) X=(x1,x2,⋯,xn)T(xi∈[ai,bi])
F ( X ) = ( f 1 ( X ) , f 2 ( X ) , ⋯   , f n ( X ) ) T ∈ R n F(X)=(f_1(X),f_2(X),\cdots,f_n(X))^T\in R^n F(X)=(f1(X),f2(X),⋯,fn(X))T∈Rn
该方程组的标量情形可简化为
f ( x ) = 0 , x ∈ [ a , b ] f(x)=0,\quad x\in[a,b] f(x)=0,x∈[a,b]
一般而言,非线性方程的精确求解非常困难。因此,人们常常需要借助各种数值方法对其进行求解。
方法就是大家一直以来学的那些,我在这里就只增加一个在进行了 k k k 步之后就可以达到精度的公式:
k > ln ( b − a ) − l n ( 2 ε ) ln 2 k>\frac{\ln(b-a)-ln(2\varepsilon)}{\ln2} k>ln2ln(b−a)−ln(2ε)
其中 ε \varepsilon ε 代表精度, f ( x ) ∈ C ( [ a , b ] ) f(x)\in C([a,b]) f(x)∈C([a,b]).
选择适合的点 ( x 0 , f ( x 0 ) ) , (x_0,f(x_0)), (x0,f(x0)), 由切线
l 1 : y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) l_1:y=f(x_0)+f^\prime(x_0)(x-x_0) l1:y=f(x0)+f′(x0)(x−x0)
其与 x x x 轴相交的点
x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\frac{f(x_0)}{f^\prime(x_0)} x1=x0−f′(x0)f(x0)
再以 ( x 1 , f ( x 1 ) ) (x_1,f(x_1)) (x1,f(x1)) 引切线 ⋯ ⋯ \cdots\cdots ⋯⋯ 可得其一般表达式为
x k = x k − 1 − f ( k − 1 ) f ′ ( k − 1 ) , k = 1 , 2 , ⋯ x_k=x_{k-1}-\frac{f(k-1)}{f^\prime(k-1)},\quad k=1,2,\cdots xk=xk−1−f′(k−1)f(k−1),k=1,2,⋯
弦截法是以领域 S ( x ∗ , δ ) S(x^*,\delta) S(x∗,δ) 的两个点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0)) , ( x 1 , f ( x 1 ) ) (x1,f(x_1)) (x1,f(x1)) 为端点作弦。既然是弦,自然会想到斜率,也就和我们的Newton迭代法有了相似之处,我们有理由这么看
f ′ ( x ) = f ( x k ) − f ( x k − 1 ) x k − x k − 1 f^\prime(x)=\frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}} f′(x)=xk−xk−1f(xk)−f(xk−1)
于是我们就由Newton迭代法导出了弦截法
x k + 1 = x k − x k − x k − 1 f ( x k ) − f ( x k − 1 ) f ( x k ) x_{k+1}=x_k-\frac{x_k-x_{k-1}}{f(x_k)-f(x_{k-1})}f(x_k) xk+1=xk−f(xk)−f(xk−1)xk−xk−1f(xk)
当{ x k { x_k } xk }充分接近精确解 x ∗ x^* x∗ , 则 x k − x k − 1 x_k-x_{k-1} xk−xk−1 与 f ( x k ) f(x_k) f(xk) 均充分接近于零。因此,我们可以近似地认为 x k − x k − 1 ≈ f ( x k ) x_k-x_{k-1}\approx f(x_k) xk−xk−1≈f(xk) , 结合弦截法,得出
x k + 1 = x k − f 2 ( x k ) f ( x k ) − f ( x k − f ( x k ) ) x_{k+1}=x_k-\frac{f^2(x_k)}{f(x_k)-f(x_k-f(x_k))} xk+1=xk−f(xk)−f(xk−f(xk))f2(xk)
我们可以等价的将方程
f ( x ) = 0 , x ∈ [ a , b ] f(x)=0,\quad x\in[a,b] f(x)=0,x∈[a,b]
写成
x = φ ( x ) , x ∈ [ a , b ] x=\varphi(x),\quad x\in[a,b] x=φ(x),x∈[a,b]
于是有
x k + 1 = φ ( x k ) , k = 0 , 1 , 2 , ⋯ x_{k+1}=\varphi(x_k),\quad k=0,1,2,\cdots xk+1=φ(xk),k=0,1,2,⋯
但我们变化的形式也是有讲究的,例如:
x 3 − x − 1 = 0 x^3-x-1=0 x3−x−1=0
是应该化成 x = x 3 − 1 x=x^3-1 x=x3−1 还是 x = x + 1 3 x=\sqrt[3]{x+1} x=3x+1 ???
因为我们每一步都带有偏差,所以本能的就应该认为 x = x + 1 3 x=\sqrt[3]{x+1} x=3x+1 是可以一步一步将这个偏差给缩小的操作。在此我们可以得到Picard迭代应该满足的两个条件:
( 1 ) 对 任 意 x ∈ [ a , b ] 有 a ≤ φ ( x ) ≤ b ; (1) 对任意x\in[a,b]有a\leq \varphi(x) \leq b; (1)对任意x∈[a,b]有a≤φ(x)≤b;
( 2 ) 存 在 正 数 去 q < 1 , 使 对 任 意 x ∈ [ a , b ] 有 ∣ φ ′ ( x ) ∣ ≤ q ≤ 1 (2)存在正数去q<1,使对任意x\in[a,b]有|\varphi^\prime(x)|\leq q\leq 1 (2)存在正数去q<1,使对任意x∈[a,b]有∣φ′(x)∣≤q≤1
且有如下误差估计
∣ x ∗ − x k ∣ ≤ q 1 − q ∣ x k − x k − 1 ∣ |x^*-x_k|\leq \frac{q}{1-q}|x_k-x_{k-1}| ∣x∗−xk∣≤1−qq∣xk−xk−1∣