学习知识的层次是:接触 → 理解 → 内化 → 应用 → 掌握。 人与人之间的区别主要产生在——“内化”环节。

连续与无穷

微积分 = 微分 + 积分

微分:把研究的对象分解成非常非常微小的单元去研究(注意,每个微小单元要具备全局性质,“全息”)。 积分:把刚才研究完的非常微小的单元,再积累在一起得到结果。 类似于”分析”与”综合”的关系。

英文 Calculus:“计算方法”

和我们常说的计算器 calculator 非常像,它的原意就是”计算方法”。 最初,完整的微积分英文要这么说:differential and integral calculus(“微分和积分的计算方法”);也可以说 infinitesimal calculus(“研究无穷小量的计算方法”)。

连续性:自然规律之大道

“连续”是研究微积分的重要前提。在经典物理世界中,一切都是连续的。 这里我们假装不知道”量子世界”,只研究”连续函数”(Continuous function)——无论怎么放大,仍然是一段连续的线。 连续函数一般表示为:f(x)Cf(x) \in C

无穷:是一个动态的概念

“无穷”是微积分的核心概念。

“一尺之棰,日取其半,万世不竭。” —— 《庄子 · 天下》

右边的式子”无限趋近”于 1,这是一个”动态过程”。 无穷小,是一个”变量”,是一个无限趋近于 0 的一个”过程”。 所谓”高阶无穷小”,无非就是它”趋近于 0 的’速度’更快”(此处有深意,与后面的洛必达法则有联系)。

“无穷视角”看问题

例 1:在一个无穷小的范围里,所有曲线都是直线。 例 2:割圆术。

“割之弥细,所失弥少,割之又割,以至于不可割,则与圆合体,而无所失矣。” —— 刘徽《九章算术注》(263 年)

极限

极限是无限逼近的过程

这个过程的”终点”永远达不到,但是无比趋近的那个值,就是”极限值”。 比如 limxx0f(x)\lim_{x \to x_0} f(x) 表示变量 xxx0x_0 点无限逼近,f(x)f(x) 无限趋近的那个值,就是极限值。 上文讲的无穷小本身是一个”过程”,这个过程的极限,就是 0。

极限是一种线性运算

/A=\infty / A = \infty

“吾生也有涯,而知也无涯。以有涯随无涯,殆已!” —— 《庄子 · 养生主》

知识是无穷的,而生命却只有那么几天,想要学完所有知识,每天必须也学无穷多的知识。

未定式极限的计算

指两种情况:0/00/0/\infty/\infty。 上文说,极限是一个过程,那么极限之间的比较,其实是在比较谁的速度快,这就是”洛必达法则”(求导后再比);或使用因式分解 / 化简;或替换变量、使用等价无穷小。

使用 MATLAB 计算极限

limit(fun,x,x0)             % 求函数 fun 关于 x 在 x0 点处的极限
limit(fun,x,x0,'left')      % 求左极限
limit(fun,x,x0,'right')     % 求右极限

如果不是趋近于 x0x_0,而是趋近于无穷,就使用 inf 代表无穷,代替 x0。如果极限不存在,MATLAB 会吐出一个 NaN

syms x a b;                 % 把 x a b 都定义为符号
f = x*(1+a/x)^x*sin(b/x);   % 输入函数
L = limit(f,x,inf)          % 求极限

导数与微分

导数之”导”——導

组个词看一看:导致、引导、导向。

“善战者,因其势而利导之。” —— 《史记 · 孙子吴起列传》

“导”就是”方向”,导数就是表示函数”运行的方向”。

导数是”函数的原因”

“导数”是函数的原因(变化的来源),函数是”导数”的结果。 速度是位移的导数,速度导致了位移;加速度是速度的导数,加速度导致了速度。 用【导数思维】来分析问题,可以找到事物变化的原因,控制事物的发展。

“物有本末,事有终始,知所先后,则近道矣。” —— 《大学》

理解乘法导数求导法则

(uv)=uv+uv(uv)' = u'v + uv'

uuvv 看成一个矩形的边长,则 (uv)(uv)' 就是指边长 uuvv 同时变化所引起的面积变化量。矩形面积变化量还有角落里的一小块,但太小了,小到直接舍去。

导数的 MATLAB 求解

y = diff(fun,x)     % 求函数 fun 关于 x 的导数
y = diff(fun,x,n)   % 求函数 fun 关于 x 的 n 阶导数

微分:同样也是动态概念

微分就是差分的【无穷小过程】,自变量 xx 的微分为:

dx=ΔxΔx0dx = \Delta x \Big|_{\Delta x \to 0}

这时,因变量 yy 的微分为:

dy=f(x)dxdy = f'(x) \cdot dx

可以说,dydyΔy\Delta y 的”线性主部”。 不要觉得这里面有一个”误差”,这是”静态视角”下看到的;而微分是一个动态的无穷小过程,是完全没有误差的。

泰勒展开:多项式仿真系统

泰勒展开公式初探

f(x)=n=0f(n)(x0)n!(xx0)nf(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(x_0)}{n!}(x - x_0)^n

观察后有几个特点:

  • 一个函数,无论它是什么”壳”,都可以分解为”多项式之和”的形式;
  • 分解时,可以选择一个基础点 x0x_0
  • 项越多,就越接近原函数,无穷多项时取等号;
  • 越靠前,越主要,每一项的作用要被 n!n! 削弱。

比如正弦函数在 0 处分解:

sin(x)=xx33!+x55!x77!+\sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots

(偶数项的导数均为 0,因此不在公式中。)

用 MATLAB 画一下:

x = -6:0.01:6;
y3 = x - x.^3/factorial(3);
y5 = y3 + x.^5/factorial(5);
y7 = y5 - x.^7/factorial(7);
plot(x, sin(x), x, y3, x, y5, x, y7)
ylim([-1.5 1.5])

只要项数 nn 有限,就一定有误差。

泰勒展开的哲学理解

先只展开前 2 项,解释为:xx 处的函数值,约等于 x0x_0 处的函数值,再加上由导数引起的变化量。这是对未来情况的仿真。

几何表达:由于原因(导数)只是”当前”的原因,所以仿真预测的结果肯定不完全准确;不过,只要时间足够短,仿真就足够准确。

二阶导数呢?就是原因的原因,即”间接原因”:

结果现状+直接原因引发的变化+原因的原因引发的变化+结果 ≈ 现状 + 直接原因引发的变化 + 原因的原因引发的变化 + \cdots

考虑得越多,就越准确、越长远。

“夫未战而庙算胜者,得算多也,未战而庙算不胜者,得算少也。多算胜,少算不胜,而况于无算乎!” —— 《孙子兵法》

泰勒公式的提醒:本末 / 主次之分

公式直接展现了分析问题的步骤:

现状 f(x0)主因 f(x0)次因 f(x0)现状\ f(x_0) \to 主因\ f'(x_0) \to 次因\ f''(x_0)

预测的第一要务是要分清”本末”:现状为本,变化为末;引起变化的原因很多,也要先分”主次”。

“求之其本,经旬必得;求之其末,劳而无功。” —— 《吕氏春秋》

积分为”果”:是”因”的降维投影

不定积分:求导的逆过程

函数 F(x)F(x) 的导函数为 F(x)=f(x)F'(x) = f(x),则:f(x)f(x)F(x)F(x) 的导函数;F(x)F(x)f(x)f(x) 的原函数。

注意,F(x)+CF(x) + C(常数)的导数也是 f(x)f(x),所以 f(x)f(x) 有一族原函数——F(x)+CF(x) + C

f(x)dx=F(x)+C\int f(x)\, dx = F(x) + C

计算的话,有”换元积分法”和”分部积分法”等方法,MATLAB 只需一句话:

F = int(fun,x)      % 求函数 fun 关于 x 的不定积分

相同原因导致不同结果

一个导函数对应一簇原函数,这是因为现状(C)不同。这种关系类似于”投影”。

下面是一点个人理解:低维世界的原函数是高维世界的导函数的投影。原因在高维,结果在低维。

比如小车的速度 vv,相对于位移 ss 是一个高维世界的信息,因为它:决定了低维信息位移 ss 的变化;“不直观”,如果不投影到低维的位移信息,我们甚至不易理解;表达简单,“高维的表达反而简单”。

这提示我们建立【升维思维】,可以解决许多实际问题。

定积分:有限范围内的求和

如何求一个曲线 f(x)f(x) 包围的面积?分割无限小,再加起来,就是”定积分”。定积分求的是”曲线下面积”。 积分就是求和,积分号就是一个拉长的 S(sum)。

定积分:原因历经时间产生的作用

定积分是在计算”影响”:定积分是”原因” f(x)f(x) 经过一段过程(从 aabb)所造成的结果改变(影响)。

定积分的 MATLAB 求解

F = int(fun,x,a,b)      % 求函数 fun 关于 x 的从 a 到 b 的定积分

如果是无穷积分(即 aabb 中至少一个是无穷量的积分,书本上称广义积分或反常积分),直接把 aabb 换成 inf 即可。

傅里叶展开:频域下的谐波仿真系统

正弦波函数与余弦波函数,统一称为谐波函数。明明就是同一个函数,只不过”相位”不同而已。

“谐,和也。” —— 《尔雅》

谐波:自然之道

世界由波组成:声波、光波、电磁波、地震波、应力波、引力波…… 而谐波是所有波中最”和谐”的,它有一个重大特性:谐波的导函数还是谐波,谐波的原函数还是谐波!

比如 sin(x)=cos(x)=sin(x+π/2)\sin'(x) = \cos(x) = \sin(x + \pi/2),意思是,正弦的导函数还是正弦,只不过导函数要早了 π/2\pi/2(1/4 个周期)。

谐波:命运启迪

“祸兮福之所倚,福兮祸之所伏。” —— 《道德经》

人在逆境中为什么能坚持住?就是因为他看到了命运的周期。物极必反,否极泰来,反者道之动。

傅里叶分解:任意波都由谐波组成

“波”的本质即是”周期函数”,周期的倒数即为频率。任意一种波,是否能分解成不同频率的谐波的叠加呢?

f(x)=n=0(ancosnx+bnsinnx)f(x) = \sum_{n=0}^{\infty} (a_n \cos nx + b_n \sin nx)

an=1πππf(x)cosnxdxbn=1πππf(x)sinnxdxa_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \cos nx \, dx \qquad b_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \sin nx \, dx

傅里叶分解:频域上的谐波叠加仿真系统

比如方波:叠加项越多,越接近原始方波。这跟泰勒展开是一致的,越到后面的项,起作用就越小。最右边那一列叫”频谱”,把时域的信息变成频域信息,图中表示了每一谐波项的频率(横轴)和幅值(纵轴)。

傅里叶展开,是通过不同频率谐波叠加的方式,对任意周期函数进行仿真的系统。

把波(振动)向频域分解后的应用

  • 例 1:一台机器发生了不好的振动,把振动信号傅里叶分解出来,找到出问题的频率,再查哪个振动源是这个频率,就找到问题所在。
  • 例 2:有限元可以计算零件的各阶模态的频率振型。
  • 例 3:一个低频信号掺入了一些高频噪音,可以采用傅里叶分解,分解后直接将高频的部分舍去,这叫低通滤波。

傅里叶展开的 MATLAB 源码

MATLAB 没有傅里叶展开的直接函数,但可以依照公式写一个:

[A,B,F] = fseries(f,x,p,a,b)        % 调用格式
% 以下为函数体
function [A,B,F] = fseries(f,x,p,a,b)
if nargin==3, a=-pi; b=pi; end
L=(b-a)/2;
if a+b, f=subs(f,x,x+L+a); end
A=int(f,x,-L,L)/L; B=[]; F=A/2;
for n=1:p
  an=int(f*cos(n*pi*x/L),x,-L,L)/L;
  bn=int(f*sin(n*pi*x/L),x,-L,L)/L;
  A=[A,an]; B=[B,bn];
  F=F+an*cos(n*pi*x/L)+bn*sin(n*pi*x/L);
end
if a+b, F=subs(F,x,x-L-a); end

两种仿真系统:泰勒与傅里叶

两者都是仿真系统,都是项数越多误差越小,但也有区别:

  • 泰勒——分析运动的因果:着眼于从一点 x0x_0 展开,离该点越远误差越大,用多项式揭示运动的量化规律;
  • 傅里叶——分析频率的构成:着眼于全局周期性,从频域的角度找到原函数的高维特征。

微分方程就是因果关系

微分方程(Differential equation,DE)表示的是原函数(果)与导函数(因)之间的关系。

比如 y=1y' = 1,就是最简单的微分方程,是一阶微分方程(最高阶导数的阶数)。解是 y=x+Cy = x + C。如果再加一个初始条件 y(0)=0y(0) = 0,这样解就只能是 y=xy = x 了。

微分方程:现代科学的基石

大致可以这么说,一个学科是不是科学,就是看有没有微分方程。因为研究一个量的导数的规律,才有可能从根本上理解这个量的规律。微分方程展示的就是原函数(果)与导函数(因)之间的关系。

微分方程解析解

微分方程不太好解,教材上一般也就列举了几种很特殊的解法,真到了使用的时候往往不在这几种范围之内。

“君子生非异也,善假于物也。” —— 《劝学》

MATLAB 求解微分方程,一般用 dsolve 函数就能搞定。

例 1:

syms y(t) a              % 符号
eqn = diff(y,t) == a*y   % 函数
cond = y(0) == 5;        % 条件
ySol(t) = dsolve(eqn,cond) % 解

例 2:

syms y(t) a
eqn = diff(y,t,2) == a*y
ySol(t) = dsolve(eqn)

微分方程数值解

许多微分方程根本求不出解析解,只能求出数值解。所谓数值解,就是虽然求不出函数的表达式,但能知道函数在各处的值,这个值不是绝对准确,但在一定的精度范围内。

MATLAB 中最常用的解常微分方程(ODE)的函数为 ode45(四阶五级变步长算法)。例,解方程 y=2ty' = 2t

tspan = [0 5];          % 求解范围
y0 = 0;                 % 初值条件
[t,y] = ode45(@(t,y) 2*t, tspan, y0);   % 方程以函数句柄形式定义
plot(t,y,'-o')

没有表达式,只有由点组成的”数值解”。如果非得写成表达式的形式,拟合回去即可。

微分方程造就了有限元法

大名鼎鼎的”有限元法”(FEM,Finite Element Method),其实只是一种求解微分方程的数值解法。 所谓”仿真”,就是对模型的计算。FEM 的元模型,就是微分方程,也就是事物之间的因果关系。

思想总结

  • “无穷”是微积分的基础核心。
  • “导数”是函数的原因,函数是”导数”的结果。
  • 泰勒展开:多项式仿真系统,提醒我们本末 / 主次之分。
  • 傅里叶展开:频域下的谐波仿真系统,提醒我们在频域中寻找本质特征。
  • 微分方程就是因果关系,是现代科学的基础核心,也造就了有限元法。

“你最好学学微积分,它是上帝的语言。” —— 费曼