- Algorithm
- Incremental Method
- Simulation
- Backtracking
- Dynamic Programming
- Largest Empty Interval
- Location Allocation Problem
- Knapsack Problem
- Algorithm Analysis
- Data
- Sort
- Set
- 排序资料结构: Search Tree 系列
- Sequence 资料结构: Array / List
- 大量 Point 资料结构: k-Dimensional Tree
- Region 资料结构: Uniform Grid
- Graph
- Tree 资料结构: Heavy-Light Decomposition
- Graph Spectrum(Under Construction!)
- Tree
- Binary Tree
- Directed Acyclic Graph
- Articulation Vertex / Bridge
- Reachability
- Bipartite Graph
- Clique(Under Construction!)
- Planar Graph
- Path
- Single Source Shortest Paths: Label Correcting Algorithm
- Shortest Walk
- Cycle
- Spanning Tree
- s-t Flow
- Feasible s-t Flow
- Cut
- Matching
- T-Join
- Hamilton Circuit
- Domination
- Coloring
- Labeling
- Vector Product
- Sweep Line
- Rectangle
- Rectangle
- Polygon
- Convex Hull
- 3D Convex Hull(Under Construction!)
- Half-plane Intersection
- Voronoi Diagram
- Triangulation
- Metric
- Number
- Sequence
- Function (ℝ)
- Matrix
- Root Finding
- Linear Equations
- Functional Equation
- Optimization
- Interpolation
- Curve
- Regression
- Estimation
- Clustering
- Transformation(Under Construction!)
- Wave (ℝ)
- Representation
- Signal
- State(Under Construction!)
- Markov Chain
- System(Under Construction!)
- Markov Model
- Function
- Gray Code
- Base
- Divisor
- Prime
- Residue
- Lattice
- Series(Under Construction!)
- Average Number
- Nim
- String
- Longest Increasing Subsequence
- Longest Common Subsequence
- Approximate String Matching
- String Matching
- String Matching
- String Matching: Inverted Index
- Count Substrings
- Palindrome
- Language
- Code
- Compression
- Correction
- Encryption
- Transmission
- Data
- Text
- 2D Graphics
- Audio
- Audition(Under Construction!)
- Image
- Vision(Under Construction!)
- Model
- Motion(Under Construction!)
- Camera(Under Construction!)
- Glass(Under Construction!)
- Computer
- Physics
- Biology
- Medicine
- Finance
- Education
- Standard Library
Function (ℝ)
Numeric Array
阵列相信大家耳熟能详。各个整数位置,各有一个数值。
Numeric Function
Plot3D[(x-3)*(x-3)*(x-3)*(y-1)*(y-1)*2*x*y, {x, -0.1, 4.4}, {y, -0.2, 1.5}, PlotRange -> {-3, 3}, Boxed -> False, Axes -> False, ColorFunction -> "SolarColors"]
函数的概念,请参考本站文件“ Function ”。此处仅专注于有著数值、有得计算的函数。函数可以想成是阵列的连续版本。
Function 可以画成图形
穷举各种输入,分别计算输出,把输入与输出化作座标位置。
一元函数和二元函数容易作图,三元函数就只能用空气浓度来呈现函数值了,四元以上只能用幻想的。
Plot3D[Sin[x * y] * Cos[x + y], {x, -Pi, Pi}, {y, -Pi, Pi}, PlotRange -> {-2, 2}, Boxed -> False, Axes -> False, ColorFunction -> (ColorData["CherryTones"][Rescale[#3, {-2, 2}]] &) ]
Function 资料结构
函数有两种记载方式:符号记载、数值记载。
f(x) = x² + 2x + 1 | f(x) = { 2x if x > 0 | f(0.01) = 0.02 | { -x otherwise | f(0.02) = 0.05 | | : : symbolic notation | symbolic notation | numerical notation
採用符号记载,函数可以轻易写成程式码、写成函式。
採用数值记载,函数必须取样、择邻。留待章末介绍。
Function Operation
函数就和实数、複数一样,有著各种运算。以下将介绍函数的运算:求值、代入、加、减、乘、除、模、複合、微、积。
operation (noun) operation (verb) result (noun) ----- -------------------- ------------------ -------------- let = evaluation 求值 evaluate 求值 value 值 let = substitution 代入 substitute 代入 expression 式 + addition 加法 add 加 sum 和 - subtraction 减法 subtract 减 difference 差 multiplication 乘法 multiply 乘 product 积 / division 除法 divide 除 quotient 商 mod modulo 模 --- 模 remainder 馀 ∘ composition 複合 compose 複合 composite function 複合函数 d/dx differentiation 微分 differentiate 微 derivative 导 ∫ dx integration 积分 integrate 积 integral 积分
求值
给定输入数值,计算输出数值。属于数值计算。
代入
输入变数替换为其他变数。属于符号计算。
x = s + 2 sin x cos y y = t / 2 sin(s + 2) cos(t / 2) f(x, y) = ————— + ————— ==========> f(s, t) = —————————— + —————————— y x t / 2 s + 2
加减乘除模
如果经常要把两个函数的输出加在一起,可以预先把两个函数加在一起,得到新函数,节省计算时间!
两个函数 f(x) = x² + x + 1 g(x) = -x + 2 输入数值是 1 的时候,计算所有函数输出数值的总和 f(1) = 1² + 1 + 1 = 3 g(1) = -1 + 2 = 1 f(1) + g(1) = 3 + 1 = 4 输入数值是 2 的时候,计算所有函数输出数值的总和 f(2) = 2² + 2 + 1 = 7 g(2) = -2 + 2 = 0 f(2) + g(2) = 7 + 0 = 7
如果预先让函数相加的话 (f + g)(x) = f(x) + g(x) = (x² + x + 1) + (-x + 2) = x² + 3 那麽就可以节省计算时间 (f + g)(1) = 1² + 3 = 4 (f + g)(2) = 2² + 3 = 7 输入越多种、函数越多个,节省越多时间!
用抽象的、简洁的数学符号表达函数加法:
f + g
用直观的、亮丽的函数图形表达函数加法:
加减乘除模概念相仿,其馀运算就不多提了。
複合
如果输入经常接连地用函数变换两次,可以预先把两个函数複合在一起,得到新函数,节省计算时间!
两个函数 f(x) = x² + x + 1 g(x) = -x + 2 输入数值是 1 的时候,计算先经过 g 函数、再经过 f 函数的输出数值 g(1) = -1 + 2 = 1 f(g(1)) = f(1) = 1² + 1 + 1 = 3 输入数值是 2 的时候,计算先经过 g 函数、再经过 f 函数的输出数值 g(2) = -2 + 2 = 0 f(g(2)) = f(0) = 0² + 0 + 1 = 1
如果预先让函数複合的话 (f ∘ g)(x) = f(g(x)) = (-x + 2)² + (-x + 2) + 1 = x² - 5x + 7 那麽就可以节省计算时间 (f ∘ g)(1) = 1² - 5 + 7 = 3 (f ∘ g)(2) = 2² - 10 + 7 = 1 输入越多种、函数越多个,节省越多时间!
用抽象的、简洁的数学符号表达函数複合:
f ∘ g
用直观的、亮丽的函数图形表达函数複合?我不会画。
微分
相邻数字差,通通除以 dx,得到新函数。
请读者参考本站文件“ Sequence ”提及的离散版本。此处介绍的是连续版本,只多了个 dx:一个无限微小、略大于零的数值。
用抽象的、简洁的数学符号表达函数微分:
d -- f 输入变数刚好一个 dx ∂ -- f 输入变数大于一个 ∂x
用直观的、亮丽的函数图形表达函数微分:
当输入变数只有一个,导数是座标(x,f(x)) 的“斜率 slope”。当输入变数有许多个,各个输入变数分别求得斜率,合称“梯度 gradient”。
积分
从负无限大开始的连续数字和,通通乘以 dx,得到新函数。
用抽象的、简洁的数学符号表达函数积分:
∫ f dx
用直观的、亮丽的函数图形表达函数积分:
当输入变数只有一个,积分是左至-∞、右至 x、下至 0、上至 f(x),四个边界所包围的“面积 area”,面积可正可负。当输入变数有许多个,各个输入变数一齐累计,得到“容积 volume”。
函数积分最简单的演算法是 Rectangle Rule:按照定义来,将面积切割成数条宽度为 dx 的矩形。
然而,左至负无限大,演算法永不结束,怎麽办?解决方式是增设左边界,想订多少就多少。数学家把“自订左右边界的积分运算”的结果叫做“定积分 definite integral”。
对计算学家来说,定积分就是区间和啦。前缀和改成区间和,就这样而已。
Field (ℝ)(Under Construction!)
Multivariate Function(Field)
函数输入、函数输出,推广成多个数值,组成向量、矩阵。
数学家称作“多变数函数”,本质上仍是函数,但是又多了一些特殊运算。物理家称作“场”,物理学的中流砥柱,重中之重。
Field 可以画成图形
空间处处有数据。空间座标是函数输入,数据是函数输出。
空间可以是一维数线(一维场)、二维平面(二维场)、三维空间(三维场)、……。
数据可以是一个数字(纯量场)、一个向量(向量场)、一个矩阵(张量场)、……。
如果没有特别注明数据维度,则预设为空间维度。例如三维向量场是ℝ³ ⇨ ℝ³、三维张量场是ℝ³ ⇨ ℝ³ˣ³。
注:张量是泛称。零阶张量是纯量、一阶张量是向量、二阶张量是矩阵、三阶张量是立方体。维度较高时,大家直接称呼为张量。
二维纯量场,即普通的函数。可画成折线图、浓度图、等高线图。离散化后,还可画成长条图、数值阵列。
二维向量场。可画成两个纯量场。离散化后,还可画成箭矢图。
递增数列,箭矢自源点散开。递减数列,箭矢聚集至汇点。
三维纯量场、三维向量场。原理相同,不再赘述。
Field 可以描述世界
场经常用于描述物理现象,例如水流、气流、热传导、电磁场、声波。想要用计算机模拟物理现象,首先必须学会场。
Faraday 以三维场解释电磁现象,衍生古典场论。
Einstein 以四维场(纳入时间维度)解释重力现象,衍生相对论。近年获得验证。
Schrödinger 以複数的四维场解释波粒现象,衍生量子场论。大家仍在做实验验证。质量拥有实部虚部,若隐若现,非常奇葩。
Field Operation
多了几种运算。数学家并未命名运算名称。
operator result (noun) ---- -------- --------------------- ∇· div() divergence 散度 ∇× curl() curl 旋度 ∇ grad() gradient 梯度 ∇·∇ --- Laplacian 梯度的散度 ∇×∇ --- --- 梯度的旋度(总是 0,缺乏讨论意义) --- --- 梯度反元素(缺乏关爱)
散度
∂Fx ∂Fy div(F) = ――― + ――― 2D ∂x ∂y ∂Fx ∂Fy ∂Fz div(F) = ――― + ――― + ――― 3D ∂x ∂y ∂z
散度运算,宛如点积。向量场,求散度,得纯量场。
物理意义是每一处的出入变化多寡,flux change。
分开观察 XYZ 三个分量,求相邻数字差,加总差异。
我不知道加总的理由。我也不知道“ 向量点积求得投影量 ”的加法如何直观解释。我想了十年未果。如果读者知道,麻烦告诉我。
Function (ℂ)(Under Construction!)
Complex Function
“複变函数”。输入、输出推广为複数。
看来看去好像只有 analytic => conformal 和 e^iπ值得一提。
Field (ℂ)(Under Construction!)
Field
Schrödinger's Smoke
http://www.its.caltech.edu/~achern/projects/SchrodingersSmoke/
看来看去好像还是没看懂。
Contour(Under Construction!)
Contour(Level Set)
http://paulbourke.net/papers/conrec/
http://paulbourke.net/papers/conrec/contour1.gif
Mathematical Morphology
Mathematical Morphology
Histogram3D[{{0,0},{0,0},{0,0}},{1},Boxed->False,Axes->None]
【注:本人制图技术差,只好介绍阵列版本,而非函数版本。】
调整函数形状的学问。因为不是显学,所以名称矫揉造作,不像一般的数学名词那样地简洁有力。关键字 grayscale morphology。
基本操作是 dilation 和 erosion,进阶操作由基本操作组成。
dilation:邻近格子取最大值。功效是补厚。 erosion:邻近格子取最小值。功效是削薄。 closing:先 dilation 再 erosion。 opening:先 erosion 再 dilation。 top-hat transform:原函数减掉 opening。 bottom-hat transform:closing 减掉原函数。
邻近格子可以自订样式。另外,大样式多半可以改为小样式,效果相同而且时间複杂度更低。
例如 5×5,改为两波 3×3,亦得取得 5×5 范围内的最小值(最大值)。本来读取 X×Y×5×5 格,变成只读取 X×Y×3×3×2 格。
运算不可逆、不可抵销,没有反运算。个人推测这些运算可以减少乱度。
额外使用过滤函数
进阶版本。额外设计一个过滤函数。设计不同的过滤函数,得到不同的效果。
穷举原函数的每个位置;针对一个位置,令过滤函数的中心对准该位置,各个位置点对点相加(相减)后,才取最大值(最小值)。
Polynomial Function
Polynomial
由未知数(变数)与已知数(常数)的加法、减法、乘法所组成的式子,就叫做“多项式”。以变数次方为主角,多项式可以拆成许多“项”。
多项式的资料结构,要嘛开个 array,每一格存一种次方的係数;要嘛开个 list,把係数为零的项统统去掉然后串成一串。
多项式的运算,主要有加、减、乘、除、模、微、积、分解、代入。中学到大学接触了六年,应当难不倒各位读者,就不赘述了。
大数的四则运算,就是多项式的四则运算:大数其实就是 x 代入 10,大数的骨子裡根本就是多项式。电脑的数字有二进位、十进位、八进位、十六进位,进位法其实就是 x 代入各种底数,进位法骨子裡根本就是多项式。
UVa 392 126 10719 10586 10951 463 930 10428 498 10268 10105
Polynomial Function
“多项式函数”。离散与连续的桥樑。离散的係数值,变成连续的函数值。数学家正在探索其奥秘。
多项式函数的导数、积分,仍是多项式函数!dx 竟然可以变不见!有兴趣的读者可以观落阴请教牛顿或莱布尼兹。
多项式函数的导数、积分,可以预计算!数学家发明了大量的计算手法,得以在纸上推导微积分的结果,得到公式,不必使用前面章节的演算法。有兴趣的读者可以参考微积分、工程数学教科书。
多项式函数,虽然内容繁杂,但是性质优雅,所以用途广泛。物理、化学、工程、经济、……,各种领域都在使用多项式函数。
Horner's Rule
f(x) = 3x³ + 2x + 1 = ((((3 * x) + 0) * x) + 2) * x) + 1 f(5) = 3x³ + 2x + 1 = ((((3 * 5) + 0) * 5) + 2) * 5) + 1
这是一个演算法。一元多项式函数,代入数值。一乘一加,不断更迭,求得函数值。完全不需要次方运算。
Taylor Series
f'(a) f"(a) f(x) = f(a) + ――――― (x-a)¹ + ――――― (x-a)² + ... 1! 2!
这是一道数学公式。将平滑函数变成多项式函数。
换句话说,以无限项的多项式函数,趋近平滑函数。
y = f(x) h¹ h² y₊ = f(x₊) = f(x + h) = f(x) + f'(x) ―― + f"(x) ―― + ... 1! 2!
这是另一种形式。当 x 略微增减,得知 y 如何增减。
当 h 介于正负 1 之间,则次方越大、数值越小。后面的项,数值越来越小,越来越细腻,越来越不重要。只取前几项,即是取近似值!多取几项,即是逼近真实值!数值精确度,以项数多寡来决定。
UVa 12413
e
“欧拉数 Euler Number”。实际数值差不多是 2.72。
计算 eˣ的演算法:Taylor Series 与 Horner's Rule。
π
“圆周率”。圆周长除以直径,实际数值差不多是 3.14。
http://en.wikipedia.org/wiki/Category:Pi_algorithms
延伸阅读:π is wrong!
http://www.math.utah.edu/~palais/pi.html
有两派人马,一派支持角度,一派支持面积。
角度派认为π是 180°,是圆周角 360°的一半,要乘以二才能补成 360°,极不方便。这派人马认为应该替 360°特别订立一个代号。
面积派认为π刚好就是单位圆面积,明明很方便,不需要改。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论