高数差不多是大多数莘莘学子共同的噩梦。
“ 从前有棵树,叫高数,树上挂了很多人。透过浓密的树叶向上看,拉格朗日挂在天空,向下看,分别是常微分和偏微分两座方城。城里有解析几河,微分几何、黎曼几何几条大河,而作为河的支流的几条小溪,也非常有名,它们是柯溪,数学分溪,回归分溪,泛涵分溪和时间序列分溪。城的外面,有一片树林,树林里有很多树,分别是高等代树、线性代树、数值代树,以及实变和复变函树两兄弟。“
在数学家眼里,数学美得不可方物,她美在简洁、美在奇妙、美在统一、美在严谨。普通如我等凡夫俗子,很难从数学家的高度去欣赏数学的美。好在,我们还有计算机,通过编程,我们可以将一些美妙的数学公式可视化,变幻出五光十色。
[本文中的示例引自《Python编程基础及应用》一书。]
Case 1 - 分形蕨叶
数学名词: 分形数学、线性方程组、矩阵乘法
工作原理:这两片树叶并不是普通的二维图像,它是由迭代函数系统(iterated function system)从原始坐标x=0, y=0返复迭代计算出来的。更具体一点,该迭代函数系统包括下述四组线性函数,每组线性函数的选择概率依次是0.01, 0.07,0.07和0.85。系统从坐标点(0,0)出发,随机选择下述线性函数中的一组,即可以得到一个新的坐标点。上述过程重复10万次,即得平面上的10万个点,将所得的全部点以散点图形式画出,即得上述蕨叶图像。
$$
\begin{align}
(1)\space
x_{i+1}&=0\newline
y_{i+1}&=0.15 y_i
\end{align}
$$
$$
\begin{align}
(2)\space
x_{i+1}&=0.21x_{i}-0.19y_{i}\newline
y_{i+1}&=0.24x_{i}+0.27y_{i}+1.5
\end{align}
$$
$$
\begin{align}
(3)\space
x_{i+1}&=-0.14x_{i}+0.26y_{i}\newline
y_{i+1}&=0.26x_{i}+0.25y_{i}+0.47
\end{align}
$$
$$
\begin{align}
(4)\space
x_{i+1}&=0.87x_{i}\newline
y_{i+1}&=-0.05x_{i}+0.84y_{i}+1.54
\end{align}
$$
实例代码:示例代码只有30多行(包括诸多空行在内),蕨叶就像是凭空变出来的一样,Amazing!
1 | #IfsLeaf.py |
Case 2 - 洛伦兹吸引子
数学名词:混沌数学、常微分方程
据说蝴蝶扇动翅膀这样一件小事,可能最终会引起对面半球的一场飓风。
——混沌理论
工作原理:气象学家Edward Lorenz建立的Lorenz吸引子是混沌理论的经典,它可由下述三个微分方程定义:
$$
\frac{dx}{dt}=\sigma(y-x), \quad \frac{dy}{dt}=x(\rho-z)-y,\quad \frac{dz}{dt}=xy-\beta z
$$
其中,σ, ρ, β为参数。这些方程定义了三维空间中的一个无质量点(x,y,z)的各轴坐标相对于时间的速度矢量。从某个坐标开始沿着速度矢量进行积分,可以计算出无质量点在三维空间中的运动轨迹。当参数为某些值时,轨迹出现混沌现象:微小的初值差别也会显著影响轨迹。
实例代码:常微分方程可用scipy模块的ode求解,但为降低解释的复杂度,我们使用“原始”的方法来进行求解。
1 | #LorenzAttractor.py |
Case 3 - Mandelbrot Set
数学名词:分形数学、复平面
工作原理:Mandelbrot(曼德布洛特)集是在复平面上构成分形图案的点的集合。它可以用下述复二次多项式定义:
$$
f_{c}(z)=z^{2}+c
$$
这里的c = x + yi是一个复数,如果把实部x和虚部y视为复平面上的横纵坐标的话,那么c对应该复平面上的一个点。从z=0开始,反复应用上述二次多项式进行迭代计算,z值将不断变化,其或者延伸至无限大,或者停留在有限半径的圆内部。如果是后者,我们称参数c导致了不发散的迭代z序列,此时,c点属于Mandelbrot集合,否则不属于。对于复平面上的每一个离散坐标点,使用上述二次多项式计算其逃逸时间,并将逃逸时间映射成点的颜色,即得上述五光十色,具备无限细节的分形图象。
实例代码:这个… 稍稍有点长,略了。 涉及numpy模块的使用,Cython代码的书写及编译。
Case 4 - 定积分求解
数学名词:定积分、极限
工作原理:这个就很常规了,就是使用矩形法把阴影部分分成很多很多的小矩形,对每个矩形求面积,再取和。
$$
\int_{0.7}^4(cos(2\pi x)e^{-x}+1.2)\mathrm{d}x
$$
实例代码:
1 | #Integrate1.py |
1 | #Area.py |
执行结果:
1 | Integral area: 4.032803310221616 |
文中的示例引自《Python编程基础及应用》一书,欲知其详,欢迎打开书看看。