用户: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