用戶:Xyy23330121/Python/科學計算/矩陣和多項式
利用數組,我們可以簡單地實現矩陣和多項式運算的功能。但我們沒必要實現它,因為 numpy 已經有矩陣和多項式的功能了。
具有兩個維度的數組可以被視為是矩陣。比如
np.array(
[1, 1],
[0, 1])
可以被視作是矩陣 。
我們可以使用 numpy.matmul(a, b) 或 a @ b
來獲取 a 和 b 的乘積。
numpy.matmul(a, b) 還有一些其它用處,詳情參見文檔。
numpy.dot(a, b, out=None) 提供了點乘的方法,該函數還有一些其它用處,詳情參見文檔。
除了使用該函數外,還可以通過 (a*b).sum(axis=0)
來執行點乘。
numpy.tensordot(a, b, axes=2) 提供了求張量點乘的方法。該方法會返回輸入的參數 a 和 b 的張量積。
axes 決定了求和的維度數,它可以輸入整數或含有兩個元素的元組。如果 axe 為整數,則會依次對 a 的最後 axe 個維度和 b 的前 axe 個維度求和。如果 axe 為元組,則 axe 必須具有形如 (axe_a, axe_b)
的形式。其中,axe_a 和 axe_b 應當為元組、列表或其它 numpy.array_like 的子類,表示 a 和 b 中需要求和的維度。特別的:
- 當 axes = 0 時,運算結果等同於
- 當 axes = 1 時,運算結果等同於
- 當 axes = 1 時,運算結果等同於
https://numpy.org/doc/stable/reference/routines.polynomials.html#polynomials
在進行多項式運算時,需要先導入多項式類型。
from numpy.polynomial import Polynomial as poly
導入類型後,輸入由各項係數組成的列表,來創建多項式對象。
p = poly([1, 2, 3]) #创建多项式 3x^2 + 2x + 1
多項式之間可以進行加、減、乘運算,也可以對給定的x求值。
print(p(0)) #输出:1
print(p(2)) #输出:17
利用 numpy.polynomial.Polynomial 類型的 fit 方法,可以獲得插值多項式或逼近多項式。
x = np.array([0, 1, 2]) #插值节点
y = np.array([0, 1, 4])
p = poly.fit(x, y, deg=x.shape[0]-1) #获取插值多项式
print(p) #输出:1.0 + 2.0 (-1.0 + x) + 1.0 (-1.0 + x)**2
p = poly.fit(x, y, deg=1) #获取一阶多项式逼近
print(p) #输出:1.66666667 + 2.0 (-1.0 + x)
p = poly.fit(x, y, deg=(0, 2)) #获取仅“常数项和二次项系数非零”的逼近
print(p) #输出:1.0 + 0.0 (-1.0 + x) + 1.0 (-1.0 + x)**2