Functional Equation

引言

真實世界的物理現象,物理學家習慣寫成函數方程式。想要用電腦模擬真實世界,設計函數方程式、解函數方程式是必備技能。

比方說,記錄物體所在位置。根據人類目前所知,物體不會分身,不會同時出現在兩個位置,符合函數的概念;物體不會瞬移,不會瞬時出現在遙遠位置,符合連續的概念。因此物體所在位置可以表示成一個連續函數x(t),簡寫成x。

數學家創造了函數、連續,主要是為了符合人類認知。如果影分身之術、飛雷神之術成真,那麼數學家勢必要創造其他數學元件,以符合新認知。

位置的變化多寡,稱作速度,符合微分的概念。因此物體當前速度可以表示成d/dt x(t),簡寫成x′。

物理課教過等速運動。物體速度是40,可以列出等式x′ = 40。大家把40視作一個函數,而非一個實數。

速度也可以忽快忽慢。自訂速度v,可以列出等式x′ = v。

速度的變化多寡,稱作加速度,符合二次微分的概念。因此物體當前加速度可以表示成 d²/dt² x(t),簡寫成x″。

物理課教過等加速度運動。自由落體,加速度是重力加速度g,g是一個常數約9.8,可以列出等式x″ = -g。如果又有空氣阻力f,得到加速度a = f/m,可以列出等式x″ = -g + f/m。

加速度也可以不斷變化。彗星撞地球,加速度是引力加速度g = -Gm₁m₂ / r²,G是萬有引力常數約6.7e-11,m₁ m₂是質量,r是距離。地心座標定成0,可以列出等式x″ = -Gm₁m₂ / x²。

我們的目標就是解x,知道物體的所在位置。

推廣成多變量函數

方才假設物體位於一維數線上面。其實可以拓展到高維度。

位置位於一維數線,x(t)輸出一維數值,x(t)是一維純量場。

位置位於三維空間,x(t)輸出三維向量,x(t)是一維向量場。

場的意義是空間處處有數值。x(t)是特殊案例,空間被設為時間線,數值被設為空間座標點。希望大家腦筋轉得過來。

Functional Equation

方程式:已知數、未知數全是實數。實數運算有加減乘除。

x² + 2xy + 2y = 1

函數方程式:已知數、未知數全是函數。函數運算有加減乘除微積代入複合,變化更多了。

                d            g(x+2)
∫ f(x) dx + 2 = ―― f(g(x)) + ――――――
                dx            f(x)

函數方程式當中的實數,其實是函數,稱作「常數函數」。

Functional

函數:輸入、輸出全是實數。

f(x, y) = x² + 2xy + 2y - 1

泛函數:輸入、輸出全是函數。函數的函數。

                          d            g(x+2)
L(f, g) = ∫ f(x) dx + 2 - ―― f(g(x)) - ――――――
                          dx            f(x)

我不清楚數學家為何故意讓「泛函數(名詞)」跟「函數的(形容詞)」撞名。

Eigenfunction

函數方程式求解,化作泛函數求根。

           d      
f(x) + 2 = ―― f(x)
           dx     

等量減法公理,兩邊同減一樣多的東西。(移項)
           d          
f(x) + 2 - ―― f(x) = 0
           dx         

整理成泛函數的模樣,然後求根即可!
                  d      
L(f) = f(x) + 2 - ―― f(x)
                  dx     

省略括號,簡化符號,比較好讀
L(f) = f + 2 - f′

求根、求解、求不動函數、求特徵函數是同一件事。

特徵函數:L(f) = λ f,符合條件的f(x)。λ是任意倍率。

例如微分運算。微分運算是泛函數,微分運算的特徵函數是ex,特徵值是1。原理是ex微分之後還是ex

       d
L(f) = ―― f(x)
       dx
                            x
eigenfunction of L: f(x) = e

然而一般的泛函數,沒人知道如何求得特徵函數。此路不通!

數值解、符號解

方程式的解,區分為數值解、符號解。

操作數值模擬軟體、查閱數值分析書籍,演算數值解。

solve 3x² + 12x + 8 = 0  |  solve f + f′ = 0
x = -0.7790              |  f(x) = [7.4, 2.7, 1.0, 0.4, 0.1]

操作科學計算軟體、查閱工程數學書籍,推導符號解。

solve ax² + bx + c = 0   |  solve f + f′ = 0
          _________      |
    -b ± V b² - 4ac      |          -x
x = ―――――――――――――――      |  f(x) = e
          2a             |

古代沒有計算機,古人只找符號解。導致數學課本只教符號解,不教數值解。大部分的方程式,沒人知道符號解,只好改找數值解。

數值解的演算法(Recurrence)

數值解外觀宛如陣列、宛如資料,深受計算學家喜愛。

函數方程式的解是一個函數、也是一個場。輸入是座標,輸出是數值。求解宛如填值。

函數方程式重新整理成遞迴函數,依序填值,彷彿動態規劃。

                 d      
solve f(x) + 2 = ―― f(x)
                 dx     

f(x) + 2 = (f(x) - f(x - Δx)) / Δx     1st-order backward derivative
f(x) Δx + 2 Δx = f(x) - f(x - Δx)
f(x) Δx - f(x) = - 2 Δx - f(x - Δx)    移項整理出f(x)
f(x) (Δx - 1)  = - 2 Δx - f(x - Δx)
f(x) = (2 Δx + f(x - Δx)) / (1 - Δx)
f[i] = (2 Δx + f[i - 1]) / (1 - Δx)

符號解的演算法(Regression)

符號解外觀宛如公式、宛如定律,深受數學家喜愛。

符號組成式子,式子細分為解析式、閉合式、代數式、……。於是大家口語上很少說符號解,而是說解析解、閉合解、……。

analytic solution:包含以下項目,而且多了無窮級數。
closed-form solution:包含以下項目,而且多了三角函數。
algebraic solution:只有四則運算。

然而仍有許多方程式,不存在解析解、閉合解、……。例如:

Kepler's Equation:橢圓軌道運動,已知座標位置(x,y),求時刻t,沒有閉合解。
Bézier Curve:加權平均值曲線,已知座標位置(x,y),求參數t,沒有閉合解。

既然不知道符號解,那就推定解是自訂函數,係數待求。

函數方程式重新整理成「泛函數等於零」的格式。迴歸函數:泛函數複合自訂函數。數據輸入:場的座標。數據輸出:一律是0。數據數量:等距取樣(場的長寬高相乘)、隨機取樣(自訂數量)。

                 d          
solve f(x) + 2 = ―― f(x)
                 dx     
                        d      
solve L(f) = f(x) + 2 - ―― f(x) = 0
                        dx     

assume f(x) = a/x + bx + c, find a b c
data: { ..., (-2, 0), (-1, 0), (0, 0), (1, 0), (2, 0), ... }
regression function: L(f(x)) = (a/x + bx + c) + 2 - (-a/xx + b)

正解與自訂函數通常不相符,可將函數換成函數網路。推定解是函數網路,甚至推定解是自訂函數、內含函數網路。自訂函數與泛函數接到函數網路末端。

https://becominghuman.ai/fa230ac5e04c

Differential Equation(Under Construction!)

Differential Equation

「微分方程式」。函數方程式,只有四則運算、微分運算。

函數運算又多又雜,數學家先從微分運算下手。

           d 
f(x) + 2 = ―― f(x) + 2 g(x)
           dx

微分方程式分為兩類。一、常微分方程式:對同一種變數進行微分。二、偏微分方程式:對多種變數進行微分。

Ordinary Differential Equation, ODE:

             ∂             ∂  ∂ 
f(x,y) + 2 = ―― f(x,y) + 3 ―― ―― f(x,y) + 2 g(x,y)
             ∂x            ∂x ∂x

        ∂f     ∂²f
f + 2 = ―― + 3 ――― + 2g     省略括號的部分、合併多次微分的部分
        ∂x     ∂x²

f + 2 = Dxf + 3Dxxf + 2g    微分簡寫成 Dxf Dxxf (Euler)

f + 2 = fx + 3fxx + 2g      微分簡寫成 fx fxx   (???)

f + 2 = f′ + 3f″ + 2g       微分簡寫成 f′ f″    (Lagrange)

f + 2 = ḟ + 3f̈ + 2g         微分簡寫成 ḟ f̈      (Newton)
Partial Differential Equation, PDE:

             ∂             ∂  ∂ 
f(x,y) + 2 = ―― f(x,y) + 3 ―― ―― f(x,y) + 2 g(x,y)
             ∂x            ∂x ∂y

        ∂f     ∂²f
f + 2 = ―― + 3 ――― + 2g     省略括號的部分、合併多次微分的部分
        ∂x     ∂xy

f + 2 = Dxf + 3Dxyf + 2g    微分簡寫成 Dxf Dxyf

f + 2 = fx + 3fxy + 2g      微分簡寫成 fx fxy

微分方程式分為兩類。一、線性:僅由「函數微分的加法」、「函數微分的倍率」組成的方程式。二、非線性。

線性微分方程式,可以推導符號解(分離變數法、格林函數)、演算數值解(時域線性方程組、頻域傅立葉轉換)。非線性微分方程式,則是數學界的大難題,至今只有少數特例找到了符號解。

Linear Differential Equation:

      ∂f     ∂f     ∂²f      ∂²f     ∂²f
f + 2 ―― + 3 ―― + 5 ―――― + 7 ――― + 9 ――― = 0
      ∂x     ∂y     ∂x∂y     ∂x²     ∂y²
Nonlinear Differential Equation:

       ∂f   ∂f ∂f
f² + f ―― + ―― ―― + 2 = 0 
       ∂x   ∂x ∂y

推廣成多變量函數,多了梯度、散度、旋度。

Univariate Function:

      ∂f     ∂f     ∂²f      ∂²f     ∂²f
f + 2 ―― + 3 ―― + 5 ―――― + 7 ――― + 9 ――― = 0
      ∂x     ∂y     ∂x∂y     ∂x²     ∂y²
Multivariate Function:

  ∂Fx   ∂Fy          ∂Fy   ∂Fx 
( ――― + ――― ) Fx + ( ――― - ――― ) Fy = 0 
  ∂x    ∂y           ∂x    ∂y  

Initial Condition / Boundary Condition

微分方程式有多解。主因是常數函數,其微分都是零,答案很多種。次因是散度旋度,其形式就好比a + b = 1,答案很多種。

想要唯一解,必須追加「初始條件」與「邊界條件」。古代數學家區分太細,催生一堆名詞。

1. Initial Condition              指定解的某處的函數值、函數梯度值、……
2. Boundary Condition             指定解的邊界輪廓,以及邊界的
 (1) Dirichlet Boundary Condition 函數值
 (2) Neumann Boundary Condition   函數梯度值(的法線分量)
 (3) Cauchy Boundary Condition    上述兩者
 (4) Robin Boundary Condition     上述兩者的加權總和

函數值:固定了常數項、倍率項、……。得到唯一解。

函數梯度值:固定了倍率項、……。得到唯一解、附帶未知常數項。

我們通常只關心一小段範圍,而不是從負無限大到正無限大。此時更需要「初始條件」與「邊界條件」。

Stability Condition

微分方程式的解,多半是上下起伏的波。

取樣定理:一個波至少紀錄兩點,才能反映波的上下。

換句話說:取樣間距Δx小於半個波長,才能反映解的高低。

如此一來,以遞迴函數求解,反覆疊代的過程,就不會越算越大、無限成長、趨近正負無限大。

想要數值穩定不溢位、解收斂不發散,那麼取樣間距Δx的大小,必須符合「穩定條件」。

各種微分方程式,解的形狀不同,穩定條件也不同,推導過程也不同。例如Advection Equation的穩定條件稱作CFL Condition。

【註:穩定條件、取樣定理,兩者聯繫在一起,是我自己瞎掰的。我不確定是否正確,也查不到佐證資料。】

微分方程式可以寫成矩陣形式

https://people.eecs.berkeley.edu/~arcak/16Breader.pdf

數值解的演算法(Euler Method)

挑一個維度當作主軸,沿著主軸方向填充陣列。微分方程式移項成為遞迴函數,依序求得解的每一處的數值。彷彿動態規劃。

大家習慣以時間當作主軸,每回合求得解的一小部分,一幕一幕,畫成動畫。

Heat Equation:
∂
―― f = v ⋅ divgrad(f)
∂t

離散化:右邊版本的微分、中間版本的divgrad
(f[t+1][x][y] - f[t][x][y]) / Δt = v ⋅ (f[t][x][y+1] + f[t][x][y-1]
+ f[t][x+1][y] + f[t][x-1][y] - 4 ⋅ f[t][x][y]) / Δx / Δy

以時間當作主軸:左式是t+1,右式是t
f[t+1][x][y] = f[t][x][y] + v ⋅ (f[t][x][y+1] + f[t][x][y-1]
+ f[t][x+1][y] + f[t][x-1][y] - 4 ⋅ f[t][x][y]) / Δx / Δy ⋅ Δt 

兩個陣列輪流使用
fnext[x][y] = f[x][y] + v ⋅ (f[x][y+1] + f[x][y-1]
+ f[x+1][y] + f[x-1][y] - 4 ⋅ f[x][y]) / Δx / Δy ⋅ Δt 

當v Δt太大、Δx Δy太小,則fnext[x][y]逐漸溢位,務必小心。
實作時,大家習慣讓取樣間距Δt Δx Δy固定為1,只調整v。

遞迴函數的左式,可以推廣成高次微分。額外儲存解的各階導數,以便快速計算差值。順帶一提,一階遞迴函數,宛如梯度下降法。

解對主軸的零次微分(下個時刻的函數值)=……
解對主軸的一次微分(兩個時刻的函數值的差)=……
解對主軸的二次微分(三個時刻的函數值的差的差)=……

遞迴函數的右式,可以推廣成高次微分:

Linear Multistep Method:參考先前幾個函數點
Runge-Kutta Method:預測之後幾個函數點

遞迴函數,可以整體積分,調整階數:

Finite Difference Method:使用原本的微分方程式(跟「離散化函數微分」撞名)
Finite Volume Method:使用微分方程式的積分

數值解的演算法(Backward Euler Method)

不是每一種微分方程式都有明顯的反向式子。

線性微分方程式改寫成矩陣,有反函數。

優點是毋須考慮穩定條件。我不知道原因為何。

缺點是時間複雜度較高。

f[i][j] = fnext[i][j] - v * divgrad(fnext[i][j])
Aback fnext = f
已知 Aback 和 f,解線性方程組得到 fnext

符號解的演算法(Galerkin Method)

微分方程式求解,簡化為線性方程組求解。

微分方程式重新整理成「泛函數等於零」的格式。假設兩件事成立:

一、解是自訂函數們的加權總和。係數待求。

二、泛函數投影至自訂函數為零。

以線性函數的觀點,換句話說:

一、自訂函數們是基底。解位於基底所構成的空間當中。座標待求。

二、泛函數投影至該空間為零。解代入泛函數,投影到各個座標軸,投影量是零。

L(f) = 0

assume f(x) = a0 p0(x) + a1 p1(x) + a2 p2(x)

L(f) dot f = 0  =>  { L(f) dot p0 = 0
                    { L(f) dot p1 = 0
                    { L(f) dot p2 = 0

Ax dot x = 0  =>  pseudo-eigenvalue = 0   why???

L(f) dot L(f) = 0 is better?
x1(x-1)1
x2(x-1)2
x3(x-1)3

符號解的演算法(Fourier-Galerkin Method)

當函數基底是複數波e-iθ,而且頻率是0倍到n-1倍,那麼投影正是傅立葉轉換。

Differential Equation (Move)(Under Construction!)

經典的微分方程式

基本款。全是人名,紀念古人。

Laplace Equation    ∆f = 0          fxx + fyy + fzz = 0
Poisson Equation    ∆f = g          fxx + fyy + fzz = g
Helmholtz Equation  ∆f = λf         fxx + fyy + fzz = λf

引入了空間變數、時間變數,以解釋物理現象。

Heat Equation       ∆f = d/dt f     fxx + fyy + fzz = ft
Wave Equation       ∆f = d²/dt² f   fxx + fyy + fzz = ftt
Advection Equation  ∇·f = d/dt f    fx + fy + fz = ft

更難一點的物理現象。

Burgers' Equation                 衝擊波
Korteweg-de Vries Equation        淺水波

維基百科整理了一份大全。大學教授繪製了一幅圖片

經典的微分方程組

數學家傷透腦筋。計算學家登場裝逼。

Navier-Stokes Equation            流體力學
Hamilton-Jacobi-Bellman Equation  古典力學
Lorenz Equation                   混沌系統

NS方程組求解,P=NP問題,同是七大數學難題

Poisson Equation

∆f = g。已知函數的梯度的散度g,欲求函數f。

Poisson Equation有多解。想要唯一解,必須追加邊界條件。

一、設定函數值,得到唯一解。

二、設定函數梯度值,得到唯一梯度解。常數函數則有多解。(整體抬升或整體沉降)。

符號解外觀噁心,此處省略。數值解有特殊演算法,請見先前章節。

Gradient Equation【尚無專有名詞】

∇f = G。已知各處梯度G,欲求各處高度f。

通常無解。折衷方式是式子兩邊取散度,改成Poisson Equation,得到平方誤差最小的解。

梯度方程式相當好用。例如已知圖片梯度,欲求圖片像素。把一張圖片的梯度,換成另一張圖片的梯度,達到圖片合成。

Helmholtz Equation

∆f = λf。求出「梯度的散度運算」的特徵函數f。

這玩意兒有點病態,我沒有學會。

三維空間的解好像是f(x,y,z) = ei√λ‖x‖ / 4π‖x‖。

eigenfunctions of laplacian are cos and sin.....  something like fourier basis
http://www.math.mcgill.ca/jakobson/papers/soup.pdf

(ascending order)
eigenvectors of laplace matrix: 0x sin1x cos1x sin2x cos2x ... sin(n/2)x

eigenvalues of laplace matrix: { 2*sin^2( pi*floor(k/2)/n )   k = 2...n
                               { 0                            k = 1

eigenvector of laplace operator: infinite nodal sets.

Heat Equation

∆f = df/dt。位勢差等於變化速度。

v∆f = df/dt。添上擴散速度v。可以想成是擴散係數。

Wave Equation

∆f = d²f/dt²。位勢差等於加速度。位勢差產生彈簧力,彈簧力產生加速度。

v²∆f = d²f/dt²。添上傳播速度v。可以想成是彈性係數。

https://physics.stackexchange.com/questions/243905/

方程式可以重新整理成:時間微分的特徵函數、空間二次微分的特徵函數。解是兩者聯立,稱為特徵模態(Eigenmode)。物理意義:駐波。

一維空間的符號解是特徵模態f(x,t) = a sin(x+vt) + b sin(x-vt),其中a與b取決於初始條件。物理意義:兩個波,振幅a與b,往反方向傳播,疊加之後形成駐波。

二維空間的符號解取決於空間造型(邊界條件)。除了少數特殊造型,沒人知道符號解。

一維琴弦振動直線線段
二維薄膜振動方形圓形L形
三維固體振動:平板H型鋼

Advection Equation

∇·f = d/dt f。空間轉移量等於時間變化量。

∇·(fV) = d/dt f。添上每一處的轉移速度V。

Differential Equation (Pose)(Under Construction!)

經典的微分方程式

curvature = laplacian = stress

https://en.wikipedia.org/wiki/Brachistochrone_curve
https://en.wikipedia.org/wiki/Tautochrone_curve
https://en.wikipedia.org/wiki/Cycloid
https://en.wikipedia.org/wiki/Whewell_equation
https://en.wikipedia.org/wiki/Cesàro_equation
https://en.wikipedia.org/wiki/Catenary
https://en.wikipedia.org/wiki/Tractrix
https://en.wikipedia.org/wiki/Evolute