所以,我目前正在编写一个旧的线性代数作业中的问题。我有三个 2 次多项式,我正在将它们转换为 2 次多项式。
每个多项式p的形式为:a0 + a1x + a2x^2
这些是我的多项式:(1 - x + 0x^2, 1 + 2x + 0x^2, 0 + 0x + 0x^2)
在这里,它们用代码表示。我正在使用numpy.polynomial.polynomial:
basis_b = np.array([[Polynomial([1, -1, 0])],
[Polynomial([1, 2, 0])],
[Polynomial([0, 0, 1])]
])
通过转换:p'(2 - x) + 3*p
在代码中表示为:
def trans_t(basis: np.array):
return np.array([polynomial.polyadd(
polynomial.polymul(poly[0].deriv(), Polynomial([2, -1, 0])),
polynomial.polymul(Polynomial([3, 0, 0]), poly[0]))
for poly in basis])
最初,我在函数中使用python算术,但我切换到多项式算术试图解决问题;它没有用。
因此,我在应用转换时收到了正确的答案。但是,即使多项式是 2 次,代码也会返回 1 次多项式。
这是我调用函数时的输出:
change_of_basis(basis_b, basis_b, trans_t)
change_of_basis(basis_b, basis_b, trans_t)
array([[Polynomial([ 1., -2.], domain=[-1., 1.], window=[-1., 1.])],
[Polynomial([7., 4.], domain=[-1., 1.], window=[-1., 1.])],
[Polynomial([0., 4., 1.], domain=[-1., 1.], window=[-1., 1.])]],
dtype=object)
如果在应用函数时没有 x^2 的系数,那么确保 x^2 的系数为 0 的 numpy 方法是什么,以便它返回
Polynomial([1, -2, 0])
Polynomial([7, 4, 0])
这是你的多项式
1 - 1x + 0x^2
1 + 2x + 0x^2
0 + 0x + 1x^2
将它们表示为矩阵比处理Polynomial
对象要快得多,因为此时您几乎放弃了 numpy 的所有好处,并将您的基础视为 python 对象列表。
矩阵不会减少您的维度,除非您告诉它:
p = np.array([
[1, -1, 0],
[1, 2, 0],
[0, 0, 1]])
行表示多项式,列表示系数。首先,让我们定义一列零,稍后我们将大量使用:
pad = np.zeros((p.shape[0], 1))
导数可以通过多种方式相当简单地计算:
d = p[:, 1:] * np.arange(1, p.shape[1])
您可以通过附加焊盘来保留度数:
d_full = np.hstack((p[:, 1:] * np.arange(1, p.shape[1]), pad))
乘以(2 - x)
会使度数恢复:
t = np.hstack((pad, d * 2)) - np.hstack((d, pad)) + p * 3
或者:
t = d_full * 2 - np.roll(d_full, -1, axis=1) + p * 3
如果需要,可以将结果t
转换为Polynomial
对象的数组。