OSDN Git Service

fix: fixed image links in fft
authoryukimai <yukimaikoriya@vip.qq.com>
Mon, 20 Aug 2018 15:53:26 +0000 (23:53 +0800)
committeryukimai <yukimaikoriya@vip.qq.com>
Mon, 20 Aug 2018 15:53:26 +0000 (23:53 +0800)
docs/math/fft.md
docs/math/images/fft1.jpg [new file with mode: 0644]
docs/math/images/fft2.jpg [new file with mode: 0644]
docs/math/images/fft3.jpg [new file with mode: 0644]

index 815c537..0cccbe4 100644 (file)
@@ -87,7 +87,7 @@ $$f_n(x) = y_n6 = a_0 + a_1x_m+a_2x_m^2+a_3x_m^3+ \cdots + a_nx_m^n$$
 
 我们用一幅图来表示复数与复平面的关系(图源百度百科)
 
-![img](https://pic4.zhimg.com/80/v2-e125064117654ee3b0764ff3819194c4_hd.jpg)
+![img](./images/fft1.jpg)
 
 其中横坐标是实数轴,纵坐标是虚数轴,这样就可以把每个虚数看为一个向量了,对应的,虚数可以用普通坐标和极坐标 $(r,\theta)$
 (其中 $r$ 为虚数长度,$\theta$ 为虚数和实数轴正半轴夹角)来表示。
@@ -124,13 +124,13 @@ $$F(x) = {(x_0, f(x_0)  \times  g(x_0), (x_1, f(x_1)  \times  g(x_1)), (x_2, f(x
 
 这里会不会觉得我们不去计算 $x^i$ 比较好呢?$1$ 和 $-1$ 的幂都很好算,但是也仅仅有两个不够啊,我们至少需要 $n+1$ 个 o(╥﹏╥)o 那怎么办呢!想到我们刚刚学的长度为 $1$ 的虚数了吗?不管怎么乘长度都是 $1$!对就是它!我们需要的是 $\omega^k=1$ 中的 $\omega$,很容易想到 $-i$ 和 $1$ 是符合的。那其他的呢?
 
-![img](https://pic4.zhimg.com/80/v2-04ee497b8ac007ce8fff9ce9a04373fb_hd.jpg)
+![img](./images/fft2.jpg)
 
 现在我们看上图的圆圈。容易发现这是一个单位圆(圆心为原点,半径为 $1$),所有在圆上的复数的长度均为 $1$,也就是说它不管做多少次方 $r$ 永远为 $1$,结果也仅仅角度的变化而已。但是!!!进过旋转总会让角度 $\bmod 360 = 0$ 成立的,也就是结果为 $1$。 我们把符合以上条件的复数成为复根,用 $\omega$ 表示。如果 $\omega^k=1$ 那么我们把$\omega$ 称为 $1$ 的 $k$ 次复根,记作 $\omega_k^n$ (因为符合这个 $k$ 次之后等于 $1$ 的复数有很多,比如 $i$ 的 $4k$ 次幂永远为 $1$,所以,这个 $n$ 是一个编号,表示这是角度从小到大的第几个(从 $x$ 的正半轴开始逆时针))
 
 是不是有点雾啊( ̄▽ ̄)/没事没事接下来我们举个栗子:
 
-![img](https://pic4.zhimg.com/80/v2-9f81f6f445b2420d3871b1b024db5197_hd.jpg)
+![img](./images/fft3.jpg)
 
 那么很容易发现当 $K = 4$ 的时候,相当于把单位圆等分 $K= 4$ 份。然后每一份按照极角编号。那么是不是(在 $K = 4$ 的时候)我们只要知道 $\omega_4^1$
 
@@ -248,7 +248,15 @@ void change(Complex y[],int len){
 
 这一步 IDFT(傅里叶反变换)的作用我说的已经很清楚啦,就是把上一步获得的目标多项式的点值形式转换成系数形式。但是似乎并不简单呢(雾)。。。但是,我们把单位复根代入多项式之后,就是下面这个样子(矩阵表示方程组)
 
-![img](https://pic4.zhimg.com/80/v2-74756f9edea1e47bb965a9371a478a92_hd.jpg)
+$$ \begin{bmatrix}y[0] \\ y[1] \\ y[2] \\ y[3] \\ \dots \\ y[n-1] \end{bmatrix}
+\begin{matrix}= \\ = \\ = \\ = \\ \\ = \end{matrix}
+\begin{bmatrix}1 & 1 & 1 & 1 & \dots & 1 \\
+1 & \omega_n^1 & \omega_n^2 & \omega_n^3 & \dots & \omega_n^{n-1} \\
+1 & \omega_n^2 & \omega_n^4 & \omega_n^6 & \dots & \omega_n^{2(n-1)} \\
+1 & \omega_n^3 & \omega_n^6 & \omega_n^9 & \dots & \omega_n^{3(n-1)} \\
+\dots & \dots & \dots & \dots & \dots & \dots \\
+1 & \omega_n^{n-1} & \omega_n^{2(n-1)} & \omega_n^{3(n-1)} & \dots & \omega_n^{(n-1)^2} \end{bmatrix}
+\begin{bmatrix} a[0] \\ a[1] \\ a[2] \\ a[3] \\ \dots \\ a[n-1] \end{bmatrix} $$
 
 而且现在我们已经得到最左边的结果了,中间的 $x$ 值在目标多项式的点值表示中也是一一对应的,所以,根据矩阵的基础知识,我们只要在式子两边左乘中间那个大矩阵的逆矩阵就行了。由于这个矩阵的元素非常特殊,他的逆矩阵也有特殊的性质,就是每一项取倒数,再除以 $n$,就能得到他的逆矩阵(这边根据的是单位原根的两个特殊性质推出来的,具体比较麻烦。如果想知道的话私我吧。)
 
diff --git a/docs/math/images/fft1.jpg b/docs/math/images/fft1.jpg
new file mode 100644 (file)
index 0000000..6b17298
Binary files /dev/null and b/docs/math/images/fft1.jpg differ
diff --git a/docs/math/images/fft2.jpg b/docs/math/images/fft2.jpg
new file mode 100644 (file)
index 0000000..c66239a
Binary files /dev/null and b/docs/math/images/fft2.jpg differ
diff --git a/docs/math/images/fft3.jpg b/docs/math/images/fft3.jpg
new file mode 100644 (file)
index 0000000..3d51cd5
Binary files /dev/null and b/docs/math/images/fft3.jpg differ