線性代數與微積分
二維
在二維的平面上,任何一條曲線都可以用一元 n 階方程式來表示,
比如 $(y=0.001x^6-0.1x^5-0.68x^4+10000x^2+2)$
上面的公式,y 是結果,x 是變數。變數 x 只有一個,稱為一元,x 變數最大是 6 次方,稱為 6 階。所以形成下面的圖示。
import numpy as np import pylab as plt x=np.linspace(0,100, 10000000) y=0.001*(x**6)-0.1*(x**5)-0.68*(x**4)+10000*(x**2)+2 plt.plot(x,y) plt.show()

三維
那麼在三維空間上,就可以使用二元 n 階來表示任何一個平面, z 是結果,x 及 y 是二元變數,比如
$(z=ax^4+by^4+cx^3+dy^3+ex^2+fy^2+gx+hy+i)$。
ps : a, b, c, d, e, f, g, h, i 是常數
底下是 $(z=\frac{0.006x^6-0.005y^6+0.5x^5-0.1y^5+0.005x^4+0.003y^4}{10000000})$ 所展示出來的平面。
import plotly.graph_objs as go
import numpy as np
import pandas as pd
import plotly
z=np.zeros([100,100])
for x in range(0,100):
for y in range(0, 100):
z[x, y]=(0.0006*x**6-0.005*y**6+0.5*x**5-0.1*y**5+0.005*x**4+0.003*y**4)/10000000
#df=pd.DataFrame(data=z)
trace=go.Surface(z=z) # 將dataframe所有的值以list列出
data=[trace]
layout=go.Layout(title='3D', autosize=True,
margin=dict(l=50, r=50, b=50, t=50))
fig = go.Figure(data=data, layout=layout)
fig.show()
#plotly.offline.plot(fig, filename="3d.html", auto_open=True)
多維
那麼如果是四維,五維,六維呢,因為變數太多了,所以就用 $(x_{1}, x_{2}, x_{3}, x_{4}, x_{5}, ….)$ 來命名變數名稱,然後用 y 表示結果。
$(y=ax_{1}^5+bx_{2}^5+cx_{3}^5+….)$
微分 – 導數
對函數進行微分的目地就是求取函數在某個點的切線斜率。
其實這個不好懂,所以換個角度來思考。牛頓告訴我們,當有加速度時,瞬間速度的公式是 $(v=at)$,v 是速度,a 是加速度(感受一下加速度,當車子一加速,人會往後傾,油門加愈大,感覺往後傾的力道愈大),t 是時間。
比如 a=2,那就是每秒鐘增加 2 m/s 的速度,第 0 秒的速度是 0 m/s,第 1 秒的速度是 2 m/s,第 2 秒的速度是 4 m/s, 那麼第 10 秒的速度就是 20 m/s。
再思考一個問題,第 1 秒車子會移動到多少公尺 ? 第 2 秒車子會到那裏? 公式是 $(S=\frac{1}{2}at^{2})$。如下的程式
import pylab as plt
import numpy as np
t=np.linspace(0,10,100)
a=2
v=a*t
S=(1/2)*a*t**2
fig, axes=plt.subplots(1,2, figsize=(12,6))
axes[0].plot(t, v)
axes[0].set_title("Speed")
axes[0].set_xlabel("Time")
axes[0].set_ylabel("Speed")
axes[1].plot(t, S)
axes[1].set_title("Distance")
axes[1].set_xlabel("Time")
axes[1].set_ylabel("Distance")
plt.savefig("accele_1.jpg")
plt.show()

右邊的圖, x 軸是時間,y 軸是距離,而 $(S=\frac{1}{2}at^{2})$ 微分後產生的那一個直線斜率就是速度,也就是 $(S’ = v = at)$。
如何微分

上圖藍色曲線的方程式,假設為 f(x),則(x, f(x))這個點的切線(紅色線)斜線為多少呢?。
首先 x 往右邊增加一個 h 的值,其 y 軸為 f(x+h),所以綠色(割線)斜率為 $(\frac{f(x+h)-f(x)}{h})$
當h往左邊靠,一直逼近x時,那就是紅色線的斜率 $(\lim_{h\to0}\frac{f(x+h)-f(x)}{h})$
把上面的那個式子,給予一個變數 $(f'(x)=\lim_{h\to0}\frac{f(x+h)-f(x)}{h})$, 則$(f'(x))$稱為導數
所以導數就是某個點的斜率。
假設$(f(x)=x^{2})$,則斜率為
$(\frac{f(x+h)-f(x)}{h}=\frac{(x+h)^{2}-x^{2}}{h}=\frac{x^{2}+2xh+h^{2}-x^{2}}{h}=2x+h)$
$(f'(x)=\lim_{h\to0}2x+h = 2x)$
也就是說,x=1 時,斜率為 2, x=2 時,斜率為 4
而 $(f'(x)=2x)$ 正是 $(x^{2})$ 的微分,也就是說,微分就是在求切線,也就是微分後的函數
為什麼要微分
微分是在求切線斜率,比如 $(s=\frac{1}{2}at^2)$,那麼$(s’=at)$,$(s’)$ 這個切線斜率就是物理學的瞬間速度 $(s’=v=at)$
在 x 時,y 值為 f(x),那麼下一個點的 y 值是多少呢? 假設下一點的 x 多了一點點 t,那麼下一點的 y 值為 $(y_i = y_{i-1} + f'(x)*t)$,下一點的 y 值,是前一點的 y 值加上 $(f'(x) * t)$。請注意,$(t)$ 值不可以太大,否則會偏離曲線太多。但 $(t)$ 值如果太小,則前進的速度又太慢了。
怪怪的,為什麼是加上 $(f'(x) * t)$ 呢!! 以物理學來說 $(f'(x))$ 就是速度 $(v)$ ,$(v * t)$ 就是距離。
偏微分
上述的方程式,只有一元變數(x),但如果是多元多次方程式呢,如下所示
$(f(x,y) = 5x^2+2y^2+7xy+10x+y+1)$
這時此對 x 及 y 進行偏微分,表示式如下
$( \frac{\partial f(x,y)}{\partial x} = 10x + 7y + 10)$
$( \frac{\partial f(x,y)}{\partial y} = 4y+7x+1)$
ps. $(\partial)$ 有的人唸 partial(帕修),也有人唸delta,還有人唸Costco,但版主的年代,是唸ro(肉)。
找極值
微分用在尋找一元二次方程式的極值相當好用,以下使用一個函數說明
$(f(x)=x^{2}-10x+1)$。若使用Python來畫出其函數圖形,如下
import numpy as np
import pylab as plt
x=np.linspace(-10,20, 30)
y=x*x-10*x+1
plt.plot(x, y)
plt.show()

上圖為$(f(x)=x^{2}-10x+1)$函數的圖形。在x差不多是5的時候,有最小的 y值。所以有二個問題
1. 當x為多少時,有最小的y值?
2. 最小y值又是多少?
依導數的說明,可知道當切線斜率為0時(水平線),y有極值。所以先一階微分求其斜率函數
$(f'(x)=\frac{\partial f(x)}{\partial x}=2x-10)$
1. 當一階微分為0時,也就是斜率為水平線,y有極值,即$(2x-10=0)$, x=5
2. y的極值為 5 * 5 – 10 * x + 1 = -24
極大還是極小
上述求出的極值 -24,是極大還是極小呢?
此時再進行二階微分,若值 >0,則此 y 值為極小值。若值 <0,則此 y 值為極大值
$(f”(x)=\frac{\partial f'(x)}{\partial x}=2 >0)$,所以 -24 為極小值
偏微分
在二維座標中,y 是值(結果),變數只有 x,稱為一元 n 階方程式。y 對 x 的微分,是求取 y 在 x 點時的斜率。
在三維中,z 是值(結果),變數有 x 及 y 二個,稱為二元 n 階方程式。z 對 x 的微分稱偏微分,當然 z 對 y 的微分也稱偏微分。
