常見數學公式

      在〈常見數學公式〉中尚無留言

m/s 轉 km/hr

每秒 m 公尺,轉成每小時 x 公里的公式為 
x =m *3600/1000 = m *3.6

卡迪兒座標系(Cartesian coordinate system)

我們常稱的xy座標,或是xyz立体空間座標,就是卡迪兒座標系,這傢伙是法國人。由二個或三個正交線所組成的。如下圖為3D立体座標系。

三角函數

sinθ=yz

cosθ=xz

tanθ=yx

三角面積 : xy2

反三角函數 : sin1(yz)=角度

弧度(弳度) : 1o=π180

圓公式

圓周 : 2πr
圓面積 : πr2
正弦波 : f(x)=Asin(kπt) : A為振幅,k 為波峰數,t 為時間

圓函數

上述的圖形,由下面的Python代碼所繪製而成的。(x, y)座標點中,x, y分別為

x=rcos(π180θ)
y=rsin(π180θ)

θ 由 0變換到360度時,即形成一個圓

import numpy as np
import pylab as plt
r=10
n=100
x=[]
y=[]
for i in range(n+1):
angle=360/n*i
x.append(r*np.cos(np.pi/180*angle))
y.append(r * np.sin(np.pi / 180 * angle))
plt.figure(figsize=(6,6))
plt.xticks([])
plt.yticks([])
plt.plot(x, y)
plt.xlim(-r, r)
plt.ylim(-r, r)
plt.plot([-r, r],[0, 0], color='blue')#畫X軸
plt.plot([0, 0],[-r, r], color='blue')#畫y軸
#底下畫個三角型
x1=r*np.cos(np.pi/180*30)
y1=r*np.sin(np.pi/180*30)
plt.scatter([x1],[y1], color='red')#畫點
plt.text(x1, y1,s='(x, y)', fontsize=16)
plt.text(x1/2,0 ,s='x', fontsize=16)
plt.text(x1, y1/2 ,s='y', fontsize=16)
plt.text(x1/2, y1/2 ,s='r', fontsize=16)
plt.plot([x1, x1],[0, y1], color='red')
plt.plot([0, x1],[0, y1], color='red')
plt.plot([0, x1],[0, 0], color='red')

plt.show()

一元二次方程式求解

ax2+bx+c=0

二邊除a : x2+bxa+ca=0

x2+bxa=ca

二邊加上(b2a)2  => x2+bxa+(b2a)2=ca+(b2a)2

(x+b2a)2=b24ac4a2

x=b±b24ac2a

總和公式

i=ni=1xi=x1+x2++xn

平均數(Mean)

μ=1ni=ni=1xi=x1+x2++xnn

唸成 Sigma

sum=0
import numpy as np
rng=np.random.RandomState(0) #偽亂數
d=rng.randint(1,100,10)
print(d)

sum=0
for i in d:
sum+=i
print('用迴圈計算總合 : ', sum, '<==速度很慢')
print('d.sum() : ', d.sum(), '<==調用C語言執行,速度超極快')
u=d.mean()
print('sum/10 = ', sum/10)
print('d.mean() ', d.mean(), '<==調用C語言執行,速度超極快')

結果 :
[45 48 65 68 68 10 84 22 37 88]
用迴圈計算總合 : 535 <==速度很慢
d.sum() : 535 <==調用C語言執行,速度超極快
sum/10 = 53.5
d.mean() 53.5 <==調用C語言執行,速度超極快

用迴圈計算總和,是傳統語言必會的技術。但在Python使用迴圈則效能太差。需使用d.sum()調用C語言來執行,速度才會快. 

變異數(Variance)

何謂變異數?? 假設有二個國家,每個國家有5個人
美國 : 五個人分別收入為 [10000,100000,5000,5000,5000]
台灣 : 五個人分別收入為[30000,30000,30000,30000,30000]

經計算 :
美國 : 變異數 : 1,410,000,000, 標準差 : 37,549.96
台灣 : 變異數 : 0,標準差 : 0
由上的數字,可以得知美國的貧富差異實在是大的不得了。因為就可以用這組數字來描述貧富差異的嚴重性。
那到底是要用變異數還是標準差來描述這種嚴重性呢? 都一樣啦,標準差是變異數的平方根,看起來數字比較小,比較漂亮,比較無感而以啦。

變異數的公式如下 :

σ2=1ni=ni=1(xiμ)2=(x1μ)2+(x2μ)2++(xnμ)2n

σ 也唸成Sigma

import numpy as np
rng=np.random.RandomState(0) #偽亂數
d=rng.randint(1,100,10)
print(d)
u=d.mean()
o2=((d-u)**2).mean()
print('((d-d.mean())**2).mean() : ', ((d-u)**2).mean(), '<====變異數')
print('d.var() :', d.var(), '<====變異數')
print('標準差 : ', d.std(), '<===就是變異數的平方根')
結果 :
[45 48 65 68 68 10 84 22 37 88]
((d-d.mean())**2).mean() : 593.25 <====變異數
d.var() : 593.25 <====變異數
標準差 : 24.3567239176372 <===就是變異數的平方根

以平方差的姿態,加入群組之後,大量影響群組的結果,然後平圴群組的數字,造成差異。

標準差(Standard Deviation – SD)

就是變異數的平方根,如上所示

矩陣相乘

底下有一些數學矩陣計算式,再此先說明矩陣乘法

假設矩陣A為2*2,矩陣B為 2*3, 則A*B為2*3矩陣

import numpy as np
a=np.array([[1,2, 3],
[4, 5, 6]])
b=np.array([[1,2],
[3,4],
[5,6],
])
c=a @ b
print(c)

d=np.array([[1,2,3],
[4, 5, 6]])
e=np.array([[1,1,1],
[2, 2, 3]])
f=d*e
print(f)
結果
[[22 28]
[49 64]]
[[ 1 2 3]
[ 8 10 18]]

向量Vector

向量是方向的量化,或方向數位化的簡稱。描述方向的方式,可以用右上30度,左下45度。

這種描述的方式,對人類而言很直覺,但在數學或電腦上,無法計算。所以就量化成 x, y二軸的數字(3, 4)

todo

下圖紅色線 z 是由 x 及 y 二條綠色線組成。所以我們定義 z=x+y

對於向量的寫法,總是有點難懂。把它想像成是一艘太空船,以水平3km/hr的速度往右,垂直2km/hr的速度往上。所以這艘太空船就會以33+22=13的速度往z的方向前進。

基底向量

我們定義i=[10],j=[01]

上述的xy分別為

x=3[10]

y=2[01]

所以z=x+y=3i+2j

ij,我們稱為基底向量。以1為主的基底向量,稱為標準基底向量。此時有二個變數 3, 2,亦稱為二個特徵。

變更基底向量

如果上述的基底向量變更為
v=[1.51],此時z=2v
若再變成
v=[32],此時z=1v

也就是整個圖轉成如下的樣子,此時只需一個變數 “2” 或 “1” 即可描述整個向量。此時特徵就會變成只有一個

說的更直白一點,v就是我們要巔覆傳統的度量衡單位,創造另一個新的單位。比如現今有一公尺,一公里。但我們就是要創造一個新的單位,比如~~一光秒(光一秒跑的距離)。那麼太陽離地球的距離就不再是1.5億(150,000,000)公里,而是500光秒,也就是8.3光分,如此簡化了很多個 “0”。

向量就是 2*1矩陣

上述不論是v=[32] 或是 i=[10]
可以很明顯的看出,原來向量就是一個 2*1的矩陣[xy],也就是[x,y]T

張量(Tensor)

以圖片像素為例,每個像素皆有(r, g, b)三個值。我們稱每個點的(r, g, b) 為一個向量。而如下黃色區域每一個格點都有一個向量。這些眾多向量的集合,稱為張量。也就是說,張量是由多個向量組成。

說的更貼切一點,就是在二維平面上,每個點又有多個特徵的意思。拓展開來,m個維度上,每個點又有n個特徵

本章節出現在數學篇是為了講解微分的方法。
但在AI TensorFlow章節又重新列出,是為了講解梯次下降的方法。

二都關係密切,所以必需完全了解。

一元二次方程式求解

ax2+bx+c=0

二邊除a : x2+bxa+ca=0

x2+bxa=ca

二邊加上(b2a)2  => x2+bxa+(b2a)2=ca+(b2a)2

(x+b2a)2=b24ac4a2

x=b±b24ac2a

導數

上圖藍色曲線的方程式,假設為 f(x),則(x, f(x))這個點的切線(紅色線)斜線為多少呢?。

首先x往右邊增加一個h的值,其y軸為f(x+h),所以綠色(割線)斜率為f(x+h)f(x)h

當h往左邊靠,一直逼近x時,那就是紅色線的斜率 limh0f(x+h)f(x)h

把上面的那個式子,給予一個變數 f(x)=limh0f(x+h)f(x)h, 則f(x)稱為導數
所以導數就是某個點的斜率。

假設f(x)=x2,則斜率為

f(x+h)f(x)h=(x+h)2x2h=x2+2xh+h2x2h=2x+h

f(x)=limh02x+h=2x

也就是說,x=1時,斜率為2, x=2時,斜率為4

f(x)=2x 正是 x2的微分,也就是說,導數就是切線,也就是微分後的函數

偏微分

上述的方程式,只有一元變數(x)。如果是多元呢,如下所示

f(x1,x2)=ax+1=[101][x1x2]+1=10x1+x2+1

f(x1,x2)=[f(x)x1f(x)x2]=[(10x1+x2+1))x1(10x1+x2+1))x2]=[101]

多次多元方程式偏微分

f(x1,x2)=5x21+2x22+7x1x2+10x1+x2+1

偏微分後為 f(x1,x2)=[10x1+7x2+104x2+7x1+1]

由上可推出,如果是2元方程式,就是2*1矩陣,如果是 3元方程式,就是3*1矩陣

梯度下降

梯度下降(Gradient Descent),目的是在使用逼近法尋找最接近的函數

import numpy as np
import pylab as plt
px=[1,0, -1]
py=[1, 0, -3]

reg=np.poly1d(np.polyfit(px, py, 1))
plt.plot(px, reg(px), color='green')

x=np.linspace(-1.5, 1.5, 2)
y=3*x+1
plt.plot(x, y, color='red')

plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei']
plt.rcParams['axes.unicode_minus'] = False
plt.legend(['迴歸', '假設'] )
plt.scatter(px, py)
plt.plot([-4, 4], [0, 0], color='blue')
plt.plot([0, 0], [-4, 4], color='blue')
plt.xlim(-4, 4)
plt.ylim(-4, 4)
plt.grid(True)
plt.show()

如上圖,假設有三個點(目標點)分別為(1, 1), (0, 0), (-1, -3)。如果我們要找一條線最接近這三個點。依以前的想法,那就是綠色那條迴歸線了。但迴歸線又是怎麼找出來的呢?
在此我們先隨便假設一條線,如紅色的 f1(x)=3x+1 這個函數。然後把三個點的x值代入f1函數,得到的y值如下

上述3x+1所求出的y值,與目標點的y值相減後的平方,加總為11。為什麼要平方呢? 這樣才不會有負值出現. 即總距離為
i=ni=0(yniyoi)2 
yni 為目標點的y值,yoi 為目標點的y值

這樣可以解釋迴歸線跟PCA的差異了吧。PCA是三點的投影距離總和的最小值。迴歸線是三點的y值與原點最小總值。

再以上例f(x)=x210x+1為例,x為多少時,有最小極值呢。用上述的一階微階可知 f(x)=2x10,當x=5時,表示斜率為0,有極值,所以f(5)=-24。但較複雜的函數並不是都可以使用此方法求值。此時就要用逼進法(梯度下降)。

再以上述x(t+1)=xtγf(x(t))=xtγ(2x(t)10)=(12γ)x(t)+10γ
γ : 學習函數,每次要進步的值
xt : 當下x的值
xt+1 : 下一次x的逼進值

γ 的值複雜亦常,太大也不行,太小也不行,這又有一套理論,所以可以先跳過

損失函數

再以f(x)=x210x+1為例
L=(y(x210x+1))2, 即 (目標點y-新點y)的平方總和。

加速度

距離與加速度的公式為 : S=v0t+12at2

對t 進行一次微分後,就是某個時間點的瞬間速度了

v=v0+at

https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8-%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92-%E5%9F%BA%E7%A4%8E%E4%BB%8B%E7%B4%B9-%E6%90%8D%E5%A4%B1%E5%87%BD%E6%95%B8-loss-function-2dcac5ebb6cb

時間膨脹公式

速度愈快,時間膨脹愈大

r=11(vc)2

todo

牛頓第二定律

F=ma

F:力量(N),m : 質是(kg),a: 加速度

todo

重力計算公式

g = GMr2

g: 重力加速度,G: 重力常數,M : 星球質量,r:離地心距離。

G = 6.67431011m3kg.s2,此為固定不變

地球質量 : 5.971024kg,太陽質量 : 1.988551030kg

地球半徑: 6.371106m,太陽半徑: 6.955108m

地球表面重力加速度 = (6.67431011)(5.971024)(6.371106)2 =9.8 m/s2

太陽表面重力加速度 = (6.67431011)(1.988551030)(6.955108)2=274.3m/s2

重力時間膨脹

重力也會讓時間變慢,公式如下

t=1+ghc2

g=9.8
h=1000km=10^6m
c=299792458
t=g*h/(c**2)*(10**9)
則位於高空1000km處的衛星,時間會比地表快 0.11奈秒

todo

史瓦西半徑

r=2GMc2

任何具有質量的物質都存在的一個臨界半徑特徵值。該值的含義是,如果特定質量的物質被壓縮到該半徑值之內,將沒有任何已知類型的力可以阻止該物質將自己壓縮成一個奇異點,也就是黑洞。在物理學和天文學中,尤其在萬有引力理論、廣義相對論中,它是一個非常重要的概念。這是1916年德國天文學家卡爾·史瓦西首次發現史瓦西半徑的存在,這個半徑是一個球狀對稱、不自轉又不帶電荷的物體。史瓦西半徑為這個物体的重力場精確解。

以太陽為例

r=2(6.67431011)(1.988551030)2997924582=2(1.988551030)(6.67431011)2997924582=2953.4m

也就是說,太陽在坍塌到 2953 公尺後,即會變成一個黑洞。地球則必需坍塌到0.8cm才會變成黑洞。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *