泰勒展开
当年,泰勒看到了一个奇妙的函数,要计算某个点的值十分困难,于是他想到:能不能构造一个类似的函数,但是容易求出某个点的值呢?
于是,他就发明出了泰勒展开,即对于函数 f ( x ) f(x) f(x),可以求出另一个用多项式表示函数 g ( x ) g(x) g(x),使得 g ( x ) g(x) g(x) 近似于 f ( x ) f(x) f(x)。
怎么构造呢?泰勒想到,要让这两个函数近似,那么得有一个点是重合的吧,不妨假设为 x = 0 x=0 x=0 时 f ( x ) f(x) f(x) 与 g ( x ) g(x) g(x) 重合,那么此时 g ( x ) = f ( 0 ) g(x)=f(0) g(x)=f(0)。
这样还不够,要让后面也尽可能重合,于是要让他们在 0 0 0 点的一阶导数相同,即 f ′ ( 0 ) = g ′ ( 0 ) f'(0)=g'(0) f′(0)=g′(0)。
同样的,如果让二阶导数也相同,那么重合率会更高,一直重复下去,一直延伸到某个 n n n 阶导也相同时,就能让 g ( x ) g(x) g(x) 拥有我们想要的精度了。
由于
g
(
x
)
g(x)
g(x) 是个多项式的形式,即
g
(
x
)
=
a
0
+
a
1
x
+
a
2
x
2
+
a
3
x
3
+
.
.
.
g(x)=a_0+a_1x+a_2x^2+a_3x^3+...
g(x)=a0+a1x+a2x2+a3x3+...,所以
g
(
x
)
g(x)
g(x) 的
k
k
k 阶导等于
a
k
k
!
a_kk!
akk!,而它的
k
k
k 阶导要和
f
(
0
)
f(0)
f(0) 的
k
k
k 阶导相同,所以有
a
k
k
!
=
f
k
(
0
)
a_kk!=f^k(0)
akk!=fk(0),即
a
k
=
f
k
(
0
)
k
!
a_k=\frac {f^k(0)} {k!}
ak=k!fk(0),带入
g
(
x
)
g(x)
g(x) 得到:
g
(
x
)
≈
f
(
0
)
0
!
+
f
1
(
0
)
1
!
x
+
f
2
(
0
)
2
!
x
2
+
f
3
(
0
)
3
!
x
3
+
.
.
.
+
f
n
(
0
)
n
!
g(x)\approx\frac {f(0)} {0!}+\frac {f^1(0)} {1!}x+\frac {f^2(0)} {2!}x^2+\frac {f^3(0)} {3!}x^3+...+\frac {f^n(0)} {n!}
g(x)≈0!f(0)+1!f1(0)x+2!f2(0)x2+3!f3(0)x3+...+n!fn(0)
如果无限展开下去,即 n n n 趋于 ∞ \infty ∞ 时,就可以将 ≈ \approx ≈ 换成 = = = 了。
并且,我们不一定要在
0
0
0 点展开,假设在
x
0
x_0
x0 处展开,那么就得到:
g
(
x
)
=
f
(
x
0
)
0
!
+
f
1
(
x
0
)
1
!
(
x
−
x
0
)
+
f
2
(
x
0
)
2
!
(
x
−
x
0
)
2
+
f
3
(
x
0
)
3
!
(
x
−
x
0
)
3
+
.
.
.
g(x)=\frac {f(x_0)} {0!}+\frac {f^1(x_0)} {1!}(x-x_0)+\frac {f^2(x_0)} {2!}(x-x_0)^2+\frac {f^3(x_0)} {3!}(x-x_0)^3+...
g(x)=0!f(x0)+1!f1(x0)(x−x0)+2!f2(x0)(x−x0)2+3!f3(x0)(x−x0)3+...
这就是泰勒公式了。
牛顿迭代
这个东西是用来求一个函数 f ( x ) f(x) f(x) 的零点的,但是不一定求得出来,而且如果有多个零点的话,只能求出 1 1 1 个,但是多做几次说不定就能全部求出来。
具体的思想是这样的:先随便找一个
x
x
x,求出点
(
x
,
f
(
x
)
)
(x,f(x))
(x,f(x)) 处的切线方程,由于在这个点附近,切线近似于函数
f
(
x
)
f(x)
f(x) 的图像,于是不妨直接考虑这条切线的根,然后以这个根作为下一次递归的
x
x
x,不断重复,就能不断逼近
f
(
x
)
f(x)
f(x) 的根了,就像这样:
也有求不出来的,就像
f
(
x
)
=
x
1
3
f(x)=x^{\frac 1 3}
f(x)=x31,无论从哪个位置出发,一定会不断远离零点:
对于当前位置
x
x
x,考虑求出下一个位置
x
′
x'
x′。由于点
(
x
,
f
(
x
)
)
(x,f(x))
(x,f(x)) 处的切线斜率为
f
′
(
x
)
f'(x)
f′(x),所以
x
′
=
x
−
f
(
x
)
f
′
(
x
)
x'=x-\dfrac {f(x)} {f'(x)}
x′=x−f′(x)f(x)。
而对于函数 f ( x ) = x 1 3 f(x)=x^{\frac 1 3} f(x)=x31,由于 f ′ ( x ) = 1 3 x − 2 3 f'(x)=\dfrac 1 3 x^{-\frac 2 3} f′(x)=31x−32,所以 x ′ = x − x 1 3 1 3 x − 2 3 = x − 3 x 1 3 − ( − 2 3 ) = x − 3 x = − 2 x x'=x-\frac {x^{\frac 1 3}} {\frac 1 3 x^{-\frac 2 3}}=x-3x^{\frac 1 3-(-\frac 2 3)}=x-3x=-2x x′=x−31x−32x31=x−3x31−(−32)=x−3x=−2x,所以会离零点 x = 0 x=0 x=0 越来越远。(参考上面的图也能发现这个结论)
多项式牛顿迭代
这个在多项式全家桶中用的很多,是用来求一个多项式的零点的。
假设此时要在模 x n x^n xn 意义下求 F ( x ) F(x) F(x) 的零点 G ( x ) G(x) G(x),设 G 0 ( x ) G_0(x) G0(x) 为 F ( x ) F(x) F(x) 在模 x ⌈ n 2 ⌉ x^{\lceil \frac n 2 \rceil} x⌈2n⌉ 意义下的零点。
将
F
(
x
)
F(x)
F(x) 在
G
0
(
x
)
G_0(x)
G0(x) 处进行泰勒展开,得到
F
(
G
(
x
)
)
≡
F
(
G
0
(
x
)
)
+
F
′
(
G
0
(
x
)
)
1
!
(
G
(
x
)
−
G
0
(
x
)
)
+
F
′
′
(
G
0
(
x
)
)
2
!
(
G
(
x
)
−
G
0
(
x
)
)
2
+
.
.
.
F(G(x))\equiv F(G_0(x))+\frac {F'(G_0(x))} {1!}(G(x)-G_0(x))+\frac {F''(G_0(x))} {2!}(G(x)-G_0(x))^2+...
F(G(x))≡F(G0(x))+1!F′(G0(x))(G(x)−G0(x))+2!F′′(G0(x))(G(x)−G0(x))2+...
由于 F ( G ( x ) ) ≡ 0 ( m o d x n ) F(G(x))\equiv 0 \pmod {x^n} F(G(x))≡0(modxn),所以 F ( G ( x ) ) ≡ 0 ( m o d x ⌈ n 2 ⌉ ) F(G(x))\equiv 0\pmod {x^{\lceil \frac n 2 \rceil}} F(G(x))≡0(modx⌈2n⌉),而 F ( G 0 ( x ) ) ≡ 0 ( m o d x ⌈ n 2 ⌉ ) F(G_0(x))\equiv 0 \pmod {x^{\lceil \frac n 2 \rceil}} F(G0(x))≡0(modx⌈2n⌉),所以 G ( x ) G(x) G(x) 的前 ⌈ n 2 ⌉ \lceil \frac n 2 \rceil ⌈2n⌉ 项其实和 G 0 ( x ) G_0(x) G0(x) 一样。
这样的话, G ( x ) − G 0 ( x ) G(x)-G_0(x) G(x)−G0(x) 的最低次项就是 x ⌈ n 2 ⌉ x^{\lceil \frac n 2 \rceil} x⌈2n⌉,则 ( G ( x ) − G 0 ( x ) ) 2 (G(x)-G_0(x))^2 (G(x)−G0(x))2 的最低次项就是 x 2 ⌈ n 2 ⌉ x^{2\lceil \frac n 2 \rceil} x2⌈2n⌉。
而上面的柿子是在模
x
n
x^n
xn 意义下进行的,也就是说,
(
G
(
x
)
−
G
0
(
x
)
)
2
(G(x)-G_0(x))^2
(G(x)−G0(x))2 会被模掉,次数更高的也是,这样的话就得到了:
F
(
G
(
x
)
)
≡
F
(
G
0
(
x
)
)
+
F
′
(
G
0
(
x
)
)
(
G
(
x
)
−
G
0
(
x
)
)
F(G(x))\equiv F(G_0(x))+F'(G_0(x))(G(x)-G_0(x))
F(G(x))≡F(G0(x))+F′(G0(x))(G(x)−G0(x))
由于
F
(
G
(
x
)
)
≡
0
F(G(x))\equiv 0
F(G(x))≡0,所以有:
F
(
G
0
(
x
)
)
+
F
′
(
G
0
(
x
)
)
(
G
(
x
)
−
G
0
(
x
)
)
≡
0
F
′
(
G
0
(
x
)
)
(
G
(
x
)
−
G
0
(
x
)
)
≡
−
F
(
G
0
(
x
)
)
G
(
x
)
≡
G
0
(
x
)
−
F
(
G
0
(
x
)
)
F
′
(
G
0
(
x
)
)
\begin{aligned} F(G_0(x))+F'(G_0(x))(G(x)-G_0(x))&\equiv 0\\ F'(G_0(x))(G(x)-G_0(x))&\equiv -F(G_0(x))\\ G(x)&\equiv G_0(x)-\frac {F(G_0(x))} {F'(G_0(x))}\\ \end{aligned}
F(G0(x))+F′(G0(x))(G(x)−G0(x))F′(G0(x))(G(x)−G0(x))G(x)≡0≡−F(G0(x))≡G0(x)−F′(G0(x))F(G0(x))
发现和上面牛顿迭代的柿子是差不多的qwq。
有了这个柿子就可以倍增求零点了。