非线性方程求解:弦截法和抛物线法
牛顿迭代法虽然具有收敛速度快的优点,但每迭代一次都要计算函数导数,
而有些函数的导数计算十分麻烦。
弦截法和抛物线法便是为了避免上述不便而提出的方法.
一、弦截法:
牛 顿 迭 代 公 式 : x k + 1 = x k − f ( x k ) f ′ ( x k ) 牛顿迭代公式:\\ x_{k+1}=x_k-\frac{f(x_k)}{f^{'}(x_k)}\\ 牛顿迭代公式:xk+1=xk−f′(xk)f(xk)
替换牛顿公式中的f’(x),便得到迭代公式:
x
k
+
1
=
x
k
−
f
(
x
k
)
(
x
k
−
x
k
−
1
)
f
(
x
k
)
−
f
(
x
k
−
1
)
这
就
是
弦
截
迭
代
公
式
.
x_{k+1}=x_k-\frac{f(x_k)(x_k-x_{k-1})}{f(x_k)-f(x_{k-1})}\\ 这就是弦截迭代公式.
xk+1=xk−f(xk)−f(xk−1)f(xk)(xk−xk−1)这就是弦截迭代公式.
算法流程:
注意,弦截迭代发要用到前两步的结果:
x k 和 x k − 1 . x_{k}和x_{k-1}. xk和xk−1.
二、抛物线法
根据牛顿多项式插值公式:
N
n
(
x
)
=
a
0
+
a
1
(
x
−
x
0
)
+
a
2
(
x
−
x
0
)
(
x
−
x
1
)
+
.
.
.
+
a
n
(
x
−
x
0
)
(
x
−
x
1
)
⋯
(
x
−
x
n
−
1
)
N_n(x)=a_0+a_1(x-x_0)+a_2(x-x_0)(x-x_1)+...+a_n(x-x_0)(x-x_1)\cdots(x-x_{n-1})
Nn(x)=a0+a1(x−x0)+a2(x−x0)(x−x1)+...+an(x−x0)(x−x1)⋯(x−xn−1)
取三次牛顿插值公式得:
N
2
(
x
)
=
f
(
x
k
)
+
f
[
x
k
,
x
k
−
1
]
(
x
−
x
k
)
+
f
[
x
k
,
x
k
−
1
,
x
k
−
2
]
(
x
−
x
k
)
(
x
−
x
k
−
1
)
N_2(x)=f(x_k)+f[x_k,x_{k-1}](x-x_k)+f[x_k,x_{k-1},x_{k-2}](x-x_k)(x-x_{k-1})
N2(x)=f(xk)+f[xk,xk−1](x−xk)+f[xk,xk−1,xk−2](x−xk)(x−xk−1)
令上式等于0,得到:
x
k
+
1
=
x
k
−
2
f
(
x
k
)
ω
±
ω
−
4
f
(
x
k
)
f
[
x
k
,
x
k
−
1
,
x
k
−
2
]
式
中
:
x_{k+1}=x_k-\frac{2f(x_k)}{\omega±\sqrt{\omega-4f(x_k)f[x_k,x_{k-1},x_{k-2}]}}\\ 式中:\\
xk+1=xk−ω±ω−4f(xk)f[xk,xk−1,xk−2]2f(xk)式中:
{ f [ x k , x k − 1 ] = f ( x k ) − f ( x k − 1 ) x k − x k − 1 f [ x k , x k − 1 , x k − 2 ] ( x k − x k − 1 ) = f [ x k , x k − 1 ] − f [ x k − 2 , x k − 2 ] x k − x k − 2 ω = f [ x k , x k − 1 ] + f [ x k , x k − 1 , x k − 2 ] ( x k − x k − 1 ) \begin{cases} f[x_k,x_{k-1}]=\frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}} \\ \\ f[x_k,x_{k-1},x_{k-2}](x_k-x_{k-1})= \frac{f[x_k,x_{k-1}]-f[x_{k-2},x_{k-2}]}{x_k-x_{k-2}}\\ \\ \omega=f[x_k,x_{k-1}]+f[x_k,x_{k-1},x_{k-2}](x_k-x_{k-1})\\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧f[xk,xk−1]=xk−xk−1f(xk)−f(xk−1)f[xk,xk−1,xk−2](xk−xk−1)=xk−xk−2f[xk,xk−1]−f[xk−2,xk−2]ω=f[xk,xk−1]+f[xk,xk−1,xk−2](xk−xk−1)