用戶:Xyy23330121/Python/科學計算/矩陣和多項式


利用數組,我們可以簡單地實現矩陣和多項式運算的功能。但我們沒必要實現它,因為 numpy 已經有矩陣和多項式的功能了。

線性代數

編輯

矩陣乘法

編輯

具有兩個維度的數組可以被視為是矩陣。比如

np.array(
    [1, 1],
    [0, 1])

可以被視作是矩陣  

我們可以使用 numpy.matmul(a, b)a @ b 來獲取 ab 的乘積。

numpy.matmul(a, b) 還有一些其它用處,詳情參見文檔。

點乘

編輯

numpy.dot(a, b, out=None) 提供了點乘的方法,該函數還有一些其它用處,詳情參見文檔。

除了使用該函數外,還可以通過 (a*b).sum(axis=0) 來執行點乘。

張量點乘

編輯

numpy.tensordot(a, b, axes=2) 提供了求張量點乘的方法。該方法會返回輸入的參數 ab 的張量積。

axes 決定了求和的維度數,它可以輸入整數或含有兩個元素的元組。如果 axe 為整數,則會依次對 a 的最後 axe 個維度和 b 的前 axe 個維度求和。如果 axe 為元組,則 axe 必須具有形如 (axe_a, axe_b) 的形式。其中,axe_aaxe_b 應當為元組、列表或其它 numpy.array_like 的子類,表示 ab 中需要求和的維度。特別的:

  • 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