- 前面说过,对于非线性方程 f ( x ) = 0 f(x)=0 f(x)=0 若 f ( x ) f(x) f(x) 是多项式函数,那么上述方程被称为代数方程,已经完成的二分法、Aitken迭代法以及牛顿法都适用于代数方程的求解。但针对多项式函数的特殊性,可以寻求一些更加特殊、有效的算法。
文章目录
代数方程の牛顿法.
- 考虑代数方程 f ( x ) = a 0 ⋅ x 0 + a 1 ⋅ x 1 + ⋯ + a n ⋅ x n = ∑ i = 0 n a i ⋅ x i = 0 f(x)=a_0·x^0+a_1·x^1+\cdots+a_n·x^n=\sum^n_{i=0}a_i·x^i=0 f(x)=a0⋅x0+a1⋅x1+⋯+an⋅xn=i=0∑nai⋅xi=0应用牛顿迭代公式 x k + 1 = x k − f ( x k ) f ′ ( x k ) (Newton.1) x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}\tag{Newton.1} xk+1=xk−f′(xk)f(xk)(Newton.1)于是问题转化为计算函数 f ( x ) f(x) f(x) 在给定点 x k x_k xk 的函数值 f ( x k ) f(x_k) f(xk) 和导数值 f ′ ( x k ) . f'(x_k). f′(xk).
秦九韶算法.
- 考虑多项式
f
(
x
)
=
a
0
⋅
x
0
+
a
1
⋅
x
1
+
⋯
+
a
n
⋅
x
n
f(x)=a_0·x^0+a_1·x^1+\cdots+a_n·x^n
f(x)=a0⋅x0+a1⋅x1+⋯+an⋅xn其中系数均为实数,以一次式
(
x
−
x
0
)
(x-x_0)
(x−x0) 除
f
(
x
)
f(x)
f(x) 得到商
p
(
x
)
p(x)
p(x),显然余数为
f
(
x
0
)
f(x_0)
f(x0),即下面的等式成立
f
(
x
)
=
f
(
x
0
)
+
(
x
−
x
0
)
⋅
p
(
x
)
(1)
f(x)=f(x_0)+(x-x_0)·p(x)\tag{1}
f(x)=f(x0)+(x−x0)⋅p(x)(1)因为等式两边次数需要一致,所以
p
(
x
)
p(x)
p(x) 是
n
−
1
n-1
n−1 次多项式,设为
p
(
x
)
=
b
0
⋅
x
0
+
b
1
⋅
x
1
+
⋯
+
b
n
−
1
⋅
x
n
−
1
(2)
p(x)=b_0·x^0+b_1·x^1+\cdots+b_{n-1}·x^{n-1}\tag{2}
p(x)=b0⋅x0+b1⋅x1+⋯+bn−1⋅xn−1(2)将其代入
(
1
)
(1)
(1) 式,可得
a 0 ⋅ x 0 + a 1 ⋅ x 1 + ⋯ + a n ⋅ x n = f ( x 0 ) + ∑ i = 0 n − 1 b i ⋅ x i + 1 − x 0 ⋅ ∑ i = 0 n − 1 b i ⋅ x i = f ( x 0 ) − x 0 ⋅ b 0 + ∑ i = 1 n − 1 ( b i − 1 − x 0 ⋅ b i ) ⋅ x i + b n − 1 ⋅ x n \begin{aligned} a_0·x^0+a_1·x^1+\cdots+a_n·x^n&=f(x_0)+\sum^{n-1}_{i=0}b_i·x^{i+1}-x_0·\sum^{n-1}_{i=0}b_i·x^i\\ &=f(x_0)-x_0·b_0+\sum^{n-1}_{i=1}(b_{i-1}-x_0·b_{i})·x^i+b_{n-1}·x^n \end{aligned} a0⋅x0+a1⋅x1+⋯+an⋅xn=f(x0)+i=0∑n−1bi⋅xi+1−x0⋅i=0∑n−1bi⋅xi=f(x0)−x0⋅b0+i=1∑n−1(bi−1−x0⋅bi)⋅xi+bn−1⋅xn对应次数的系数应该相等,所以有 a 0 = f ( x 0 ) − x 0 ⋅ b 0 a_0=f(x_0)-x_0·b_0 a0=f(x0)−x0⋅b0 a i = b i − 1 − x 0 ⋅ b i , i ∈ [ 1 , n − 1 ] a_i=b_{i-1}-x_0·b_i~,~i\in[1,n-1] ai=bi−1−x0⋅bi , i∈[1,n−1] a n = b n − 1 a_n=b_{n-1} an=bn−1将上述三公式变形,得到 b n − 1 = a n b_{n-1}=a_n bn−1=an b i = a i + 1 + x 0 ⋅ b i + 1 , i ∈ [ 0 , n − 2 ] b_{i}=a_{i+1}+x_0·b_{i+1}~,~i\in[0,n-2] bi=ai+1+x0⋅bi+1 , i∈[0,n−2] f ( x 0 ) = a 0 + x 0 ⋅ b 0 (3) f(x_0)=a_0+x_0·b_0\tag{3} f(x0)=a0+x0⋅b0(3) ( 3 ) (3) (3) 式提供了快速计算 f ( x 0 ) f(x_0) f(x0) 的方法,称为秦九韶算法,也叫Horner算法。 - 对 ( 1 ) (1) (1) 式求导,得 f ′ ( x ) = p ( x ) f'(x)=p(x) f′(x)=p(x)因此有 f ′ ( x 0 ) = p ( x 0 ) f'(x_0)=p(x_0) f′(x0)=p(x0),也就是说一阶导数值是多项式 p ( x ) p(x) p(x) 在 x 0 x_0 x0 的值,再次应用上述秦九韶算法,将 p ( x ) p(x) p(x) 表示如下 p ( x ) = p ( x 0 ) + ( x − x 0 ) ⋅ q ( x ) p(x)=p(x_0)+(x-x_0)·q(x) p(x)=p(x0)+(x−x0)⋅q(x) q ( x ) = c 0 ⋅ x 0 + c 1 ⋅ x 1 + ⋯ + c n − 2 ⋅ x n − 2 (4) q(x)=c_0·x^0+c_1·x^1+\cdots+c_{n-2}·x^{n-2}\tag{4} q(x)=c0⋅x0+c1⋅x1+⋯+cn−2⋅xn−2(4)和上面推导出 f ( x 0 ) f(x_0) f(x0) 的过程一样,我们可以得到 c n − 2 = b n − 1 c_{n-2}=b_{n-1} cn−2=bn−1 c i = b i + 1 + x 0 ⋅ c i + 1 , i ∈ [ 0 , n − 3 ] c_i=b_{i+1}+x_0·c_{i+1}~,~i\in[0,n-3] ci=bi+1+x0⋅ci+1 , i∈[0,n−3] f ′ ( x 0 ) = b 0 + x 0 ⋅ c 0 (5) f'(x_0)=b_0+x_0·c_0\tag{5} f′(x0)=b0+x0⋅c0(5)由此得到了一阶导数值 f ′ ( x 0 ) f'(x_0) f′(x0),从而可以使用牛顿迭代公式求解方程的近似解。
- 直观来看,秦九韶算法所做的事情就是将形如
p
(
x
)
=
∑
i
=
0
n
a
i
⋅
x
i
p(x)=\sum^n_{i=0}a_i·x^i
p(x)=i=0∑nai⋅xi这类多项式函数重写为
p
(
x
)
=
(
⋯
(
a
n
⋅
x
+
a
n
−
1
)
x
+
⋯
)
x
+
a
0
p(x)=(\cdots(a_n·x+a_{n-1})x+\cdots)x+a_0
p(x)=(⋯(an⋅x+an−1)x+⋯)x+a0最终所需要的乘法此时仅为
n
n
n 次,而原本计算单个
x
n
x^n
xn 就需要
n
n
n 次乘法。秦九韶算法在很多国外教材中被称为霍纳规则Horner’s rule,下图是Anany 182-183中的描述:
- 至此,我们完成了对于代数方程的牛顿迭代公式 ( N e w t o n . 1 ) (Newton.1) (Newton.1) 的具体化。
贝尔斯多夫方法.
- 给定多项式函数 f ( x ) = ∑ i = 0 n a i ⋅ x i f(x)=\sum^n_{i=0}a_i·x^i f(x)=i=0∑nai⋅xi若能从中分离出一个二次因式 ω ∗ ( x ) = x 2 + u ∗ x + v ∗ \omega^*(x)=x^2+u^*x+v^* ω∗(x)=x2+u∗x+v∗此二次因式的零点即确定了一对共轭复根。Bairstov方法的策略就是从这对共轭复根出发,通过适当的迭代收敛到精确解,通常情况下,二次因式也可以是某个近似的二次因式 ω ( x ) = x 2 + u x + v (6) \omega(x)=x^2+ux+v\tag{6} ω(x)=x2+ux+v(6)
- 用二次因式 ω ( x ) \omega(x) ω(x) 除 f ( x ) f(x) f(x),记商为 p ( x ) p(x) p(x),余项为 r ( x ) r(x) r(x),显然 p ( x ) p(x) p(x) 是 n − 2 n-2 n−2 次多项式函数, r ( x ) r(x) r(x) 是一次函数,不妨设为 r ( x ) = r 0 + r 1 ⋅ x r(x)=r_0+r_1·x r(x)=r0+r1⋅x于是可以将 f ( x ) f(x) f(x) 表示如下: f ( x ) = ω ( x ) ⋅ p ( x ) + r ( x ) = ( x 2 + u x + v ) ⋅ p ( x ) + r 1 ⋅ x + r 0 (7) f(x)=\omega(x)·p(x)+r(x)=(x^2+ux+v)·p(x)+r_1·x+r_0\tag{7} f(x)=ω(x)⋅p(x)+r(x)=(x2+ux+v)⋅p(x)+r1⋅x+r0(7)通过比较等号两边相同次数项系数,可以发现 r 0 , r 1 r_0,r_1 r0,r1 是 u , v u,v u,v 的函数,分别记为 r 0 = g ( u , v ) r_0=g(u,v) r0=g(u,v) r 1 = h ( u , v ) r_1=h(u,v) r1=h(u,v)贝尔斯多夫方法的策略就是逐步修改 u , v u,v u,v 的值,使得余项 r 0 , r 1 r_0,r_1 r0,r1 变得很小。
- 考察方程组 { r 0 = g ( u , v ) = 0 r 1 = h ( u , v ) = 0 \left\{ \begin{aligned} &r_0=g(u,v)=0\\ &r_1=h(u,v)=0 \end{aligned} \right. {r0=g(u,v)=0r1=h(u,v)=0假设上述方程组有解 ( u ∗ , v ∗ ) (u^*,v^*) (u∗,v∗),将上述方程组左边使用多元函数Taylor展开在 ( u , v ) (u,v) (u,v) 展开到一次项(注意这里的 u , v u,v u,v 代表的是本次迭代时的值),则有 { g ( u , v ) + ∂ g ∂ u ⋅ Δ u + ∂ g ∂ v ⋅ Δ v = 0 h ( u , v ) + ∂ h ∂ u ⋅ Δ u + ∂ h ∂ v ⋅ Δ v = 0 (8) \left\{ \begin{aligned} &g(u,v)+\frac{\partial g}{\partial u}·\Delta u+\frac{\partial g}{\partial v}·\Delta v=0\\ &h(u,v)+\frac{\partial h}{\partial u}·\Delta u+\frac{\partial h}{\partial v}·\Delta v=0 \end{aligned} \right.\tag{8} ⎩⎪⎪⎨⎪⎪⎧g(u,v)+∂u∂g⋅Δu+∂v∂g⋅Δv=0h(u,v)+∂u∂h⋅Δu+∂v∂h⋅Δv=0(8)对于方程组 ( 8 ) (8) (8) 计算出 ( Δ u , Δ v ) (\Delta u,\Delta v) (Δu,Δv)即可得到改进的二次因式 ω ( x ) = x 2 + ( u + Δ u ) x + ( v + Δ v ) \omega(x)=x^2+(u+\Delta u)x+(v+\Delta v) ω(x)=x2+(u+Δu)x+(v+Δv)于是目前的关键问题就是如何计算出 ( 8 ) (8) (8) 式中的 6 6 6 个系数。
r 0 = g ( u , v ) ; r 1 = h ( u , v ) r_0=g(u,v);r_1=h(u,v) r0=g(u,v);r1=h(u,v)
- 设 p ( x ) = ∑ i = 0 n − 2 b i ⋅ x i p(x)=\sum^{n-2}_{i=0}b_i·x^i p(x)=i=0∑n−2bi⋅xi f ( x ) = ∑ i = 0 n a i ⋅ x i f(x)=\sum^n_{i=0}a_i·x^i f(x)=i=0∑nai⋅xi代入 ( 7 ) (7) (7) 式可得 ∑ i = 0 n a i ⋅ x i = r 0 + r 1 ⋅ x + ( x 2 + u x + v ) ⋅ ∑ i = 0 n − 2 b i ⋅ x i \sum^n_{i=0}a_i·x^i=r_0+r_1·x+(x^2+ux+v)·\sum^{n-2}_{i=0}b_i·x^i i=0∑nai⋅xi=r0+r1⋅x+(x2+ux+v)⋅i=0∑n−2bi⋅xi比较等式两边相等次数项系数,可得 a n = b n − 2 a_n=b_{n-2} an=bn−2 a n − 1 = u ⋅ b n − 2 + b n − 3 a_{n-1}=u·b_{n-2}+b_{n-3} an−1=u⋅bn−2+bn−3 a i = v ⋅ b i + u ⋅ b i − 1 + b i − 2 , i ∈ [ 2 , n − 2 ] a_i=v·b_i+u·b_{i-1}+b_{i-2}~,~i\in[2,n-2] ai=v⋅bi+u⋅bi−1+bi−2 , i∈[2,n−2] a 1 = v ⋅ b 1 + u ⋅ b 0 + r 1 a_1=v·b_1+u·b_0+r_1 a1=v⋅b1+u⋅b0+r1 a 0 = v ⋅ b 0 + r 0 a_0=v·b_0+r_0 a0=v⋅b0+r0将其变形则得到 b n − 2 = a n b_{n-2}=a_n bn−2=an b n − 3 = a n − 1 − u ⋅ b n − 2 b_{n-3}=a_{n-1}-u·b_{n-2} bn−3=an−1−u⋅bn−2 b i = a i + 2 − v ⋅ b i + 2 − u ⋅ b i + 1 , i ∈ [ 0 , n − 4 ] b_i=a_{i+2}-v·b_{i+2}-u·b_{i+1}~,~i\in[0,n-4] bi=ai+2−v⋅bi+2−u⋅bi+1 , i∈[0,n−4] r 1 = a 1 − v ⋅ b 1 − u ⋅ b 0 r_1=a_1-v·b_1-u·b_0 r1=a1−v⋅b1−u⋅b0 r 0 = a 0 − v ⋅ b 0 r_0=a_0-v·b_0 r0=a0−v⋅b0
∂ g ∂ v , ∂ h ∂ v \frac{\partial g}{\partial v},\frac{\partial h}{\partial v} ∂v∂g,∂v∂h
- 将 ( 7 ) (7) (7) 对 v v v 求导,得到 0 = p ( x ) + ( x 2 + u x + v ) ∂ p ∂ v + s 1 x + s 0 0=p(x)+(x^2+ux+v)\frac{\partial p}{\partial v}+s_1x+s_0 0=p(x)+(x2+ux+v)∂v∂p+s1x+s0 s 1 = ∂ h ∂ v s_1=\frac{\partial h}{\partial v} s1=∂v∂h s 0 = ∂ g ∂ v s_0=\frac{\partial g}{\partial v} s0=∂v∂g
- 因此可以将 p ( x ) p(x) p(x) 表示为 p ( x ) = − ( x 2 + u x + v ) ∂ p ∂ v − s 1 ⋅ x − s 0 (9) p(x)=-(x^2+ux+v)\frac{\partial p}{\partial v}-s_1·x-s_0\tag{9} p(x)=−(x2+ux+v)∂v∂p−s1⋅x−s0(9) ( 9 ) (9) (9) 的意义在于,用 ω ( x ) = x 2 + u x + v \omega(x)=x^2+ux+v ω(x)=x2+ux+v 除 p ( x ) p(x) p(x),可以得到商为 n − 4 n-4 n−4 次多项式 ∂ p ∂ v \frac{\partial p}{\partial v} ∂v∂p,余数为 s 1 ⋅ x + s 0 s_1·x+s_0 s1⋅x+s0,上面的表述中忽略了负号。
- 设 ∂ p ∂ v = ∑ i = 0 n − 4 c i ⋅ x i \frac{\partial p}{\partial v}=\sum^{n-4}_{i=0}c_i·x^i ∂v∂p=i=0∑n−4ci⋅xi采用和上面一致的比较相等次数项系数的方法,可以得到 s 0 , s 1 . s_0,s_1. s0,s1.
∂ g ∂ u , ∂ h ∂ u \frac{\partial g}{\partial u},\frac{\partial h}{\partial u} ∂u∂g,∂u∂h
- 将 ( 7 ) (7) (7) 对 u u u 求导,得到 0 = x ⋅ p ( x ) + ( x 2 + u x + v ) ∂ p ∂ u + ∂ h ∂ u ⋅ x + ∂ g ∂ u 0=x·p(x)+(x^2+ux+v)\frac{\partial p}{\partial u}+\frac{\partial h}{\partial u}·x+\frac{\partial g}{\partial u} 0=x⋅p(x)+(x2+ux+v)∂u∂p+∂u∂h⋅x+∂u∂g即 x ⋅ p ( x ) = − ( x 2 + u x + v ) ∂ p ∂ u − ∂ h ∂ u ⋅ x − ∂ g ∂ u x·p(x)=-(x^2+ux+v)\frac{\partial p}{\partial u}-\frac{\partial h}{\partial u}·x-\frac{\partial g}{\partial u} x⋅p(x)=−(x2+ux+v)∂u∂p−∂u∂h⋅x−∂u∂g另外根据 ( 9 ) (9) (9) 式可知 x ⋅ p ( x ) = − ( x 2 + u x + v ) ⋅ x ⋅ ∂ p ∂ v − ( s 1 ⋅ x − s 0 ) ⋅ x = − ( x 2 + u x + v ) ⋅ ( x ⋅ ∂ p ∂ v + s 1 ) + u s 0 ⋅ x + s 1 ⋅ x + v ⋅ s 1 x·p(x)=-(x^2+ux+v)·x·\frac{\partial p}{\partial v}-(s_1·x-s_0)·x=-(x^2+ux+v)·\bigg(x·\frac{\partial p}{\partial v}+s_1\bigg)+us_0·x+s_1·x+v·s_1 x⋅p(x)=−(x2+ux+v)⋅x⋅∂v∂p−(s1⋅x−s0)⋅x=−(x2+ux+v)⋅(x⋅∂v∂p+s1)+us0⋅x+s1⋅x+v⋅s1对比可知 ∂ h ∂ u = − ( u s 0 + s 1 ) \frac{\partial h}{\partial u}=-(us_0+s_1) ∂u∂h=−(us0+s1) ∂ g ∂ u = − v s 1 \frac{\partial g}{\partial u}=-vs_1 ∂u∂g=−vs1
- 关于 ∂ f ∂ u = ∂ f ∂ v = 0 \frac{\partial f}{\partial u}=\frac{\partial f}{\partial v}=0 ∂u∂f=∂v∂f=0因为 f ( x ) f(x) f(x) 的取值是和 u , v u,v u,v 无关的,在 ( 7 ) (7) (7) 式中改变 u , v u,v u,v 会影响到 r 1 = g ( u , v ) , r 0 = h ( u , v ) r_1=g(u,v),r_0=h(u,v) r1=g(u,v),r0=h(u,v) 的取值,但不会影响整个函数值。