确保数组中的多项式具有相同的次数



所以,我目前正在编写一个旧的线性代数作业中的问题。我有三个 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对象的数组。

相关内容

  • 没有找到相关文章

最新更新