User: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