【NA】代数方程求根算法

  • 前面说过,对于非线性方程 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)=a0x0+a1x1++anxn=i=0naixi=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=xkf(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)=a0x0+a1x1++anxn其中系数均为实数,以一次式 ( x − x 0 ) (x-x_0) (xx0) 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)+(xx0)p(x)(1)因为等式两边次数需要一致,所以 p ( x ) p(x) p(x) n − 1 n-1 n1 次多项式,设为 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)=b0x0+b1x1++bn1xn1(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} a0x0+a1x1++anxn=f(x0)+i=0n1bixi+1x0i=0n1bixi=f(x0)x0b0+i=1n1(bi1x0bi)xi+bn1xn对应次数的系数应该相等,所以有 a 0 = f ( x 0 ) − x 0 ⋅ b 0 a_0=f(x_0)-x_0·b_0 a0=f(x0)x0b0 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=bi1x0bi , i[1,n1] a n = b n − 1 a_n=b_{n-1} an=bn1将上述三公式变形,得到 b n − 1 = a n b_{n-1}=a_n bn1=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+x0bi+1 , i[0,n2] f ( x 0 ) = a 0 + x 0 ⋅ b 0 (3) f(x_0)=a_0+x_0·b_0\tag{3} f(x0)=a0+x0b0(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)+(xx0)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)=c0x0+c1x1++cn2xn2(4)和上面推导出 f ( x 0 ) f(x_0) f(x0) 的过程一样,我们可以得到 c n − 2 = b n − 1 c_{n-2}=b_{n-1} cn2=bn1 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+x0ci+1 , i[0,n3] f ′ ( x 0 ) = b 0 + x 0 ⋅ c 0 (5) f'(x_0)=b_0+x_0·c_0\tag{5} f(x0)=b0+x0c0(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=0naixi这类多项式函数重写为 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)=((anx+an1)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=0naixi若能从中分离出一个二次因式 ω ∗ ( x ) = x 2 + u ∗ x + v ∗ \omega^*(x)=x^2+u^*x+v^* ω(x)=x2+ux+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 n2 次多项式函数, r ( x ) r(x) r(x) 是一次函数,不妨设为 r ( x ) = r 0 + r 1 ⋅ x r(x)=r_0+r_1·x r(x)=r0+r1x于是可以将 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)+r1x+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)+ugΔu+vgΔv=0h(u,v)+uhΔu+vhΔ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=0n2bixi f ( x ) = ∑ i = 0 n a i ⋅ x i f(x)=\sum^n_{i=0}a_i·x^i f(x)=i=0naixi代入 ( 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=0naixi=r0+r1x+(x2+ux+v)i=0n2bixi比较等式两边相等次数项系数,可得 a n = b n − 2 a_n=b_{n-2} an=bn2 a n − 1 = u ⋅ b n − 2 + b n − 3 a_{n-1}=u·b_{n-2}+b_{n-3} an1=ubn2+bn3 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=vbi+ubi1+bi2 , i[2,n2] a 1 = v ⋅ b 1 + u ⋅ b 0 + r 1 a_1=v·b_1+u·b_0+r_1 a1=vb1+ub0+r1 a 0 = v ⋅ b 0 + r 0 a_0=v·b_0+r_0 a0=vb0+r0将其变形则得到 b n − 2 = a n b_{n-2}=a_n bn2=an b n − 3 = a n − 1 − u ⋅ b n − 2 b_{n-3}=a_{n-1}-u·b_{n-2} bn3=an1ubn2 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+2vbi+2ubi+1 , i[0,n4] r 1 = a 1 − v ⋅ b 1 − u ⋅ b 0 r_1=a_1-v·b_1-u·b_0 r1=a1vb1ub0 r 0 = a 0 − v ⋅ b 0 r_0=a_0-v·b_0 r0=a0vb0

∂ g ∂ v , ∂ h ∂ v \frac{\partial g}{\partial v},\frac{\partial h}{\partial v} vg,vh

  • ( 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)vp+s1x+s0 s 1 = ∂ h ∂ v s_1=\frac{\partial h}{\partial v} s1=vh s 0 = ∂ g ∂ v s_0=\frac{\partial g}{\partial v} s0=vg
  • 因此可以将 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)vps1xs0(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 n4 次多项式 ∂ p ∂ v \frac{\partial p}{\partial v} vp,余数为 s 1 ⋅ x + s 0 s_1·x+s_0 s1x+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 vp=i=0n4cixi采用和上面一致的比较相等次数项系数的方法,可以得到 s 0 , s 1 . s_0,s_1. s0,s1.

∂ g ∂ u , ∂ h ∂ u \frac{\partial g}{\partial u},\frac{\partial h}{\partial u} ug,uh

  • ( 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=xp(x)+(x2+ux+v)up+uhx+ug 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} xp(x)=(x2+ux+v)upuhxug另外根据 ( 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 xp(x)=(x2+ux+v)xvp(s1xs0)x=(x2+ux+v)(xvp+s1)+us0x+s1x+vs1对比可知 ∂ h ∂ u = − ( u s 0 + s 1 ) \frac{\partial h}{\partial u}=-(us_0+s_1) uh=(us0+s1) ∂ g ∂ u = − v s 1 \frac{\partial g}{\partial u}=-vs_1 ug=vs1

  • 关于 ∂ f ∂ u = ∂ f ∂ v = 0 \frac{\partial f}{\partial u}=\frac{\partial f}{\partial v}=0 uf=vf=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) 的取值,但不会影响整个函数值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值