关键词

用Python中的NumPy在点(x, y, z)上评估一个3-D多项式,其系数为4D数组

要使用Python中的NumPy在点(x,y,z)上评估3-D多项式,需要进行以下步骤:

  1. 导入NumPy库

在Python脚本或Jupyter Notebook中,首先需要导入NumPy库。可以使用以下代码:

import numpy as np
  1. 定义3-D多项式的系数数组

定义一个4D数组作为多项式的系数,其中第1、2、3维分别对应于x、y、z的幂次,第4维则表示多项式的系数。

例如,对于3次多项式 2.5 + 0.7x + 1.2y - 3.8z - 0.3xy - 1.2yz + 0.5xz + 0.1x^2 - 0.8y^2 + 2.5z^2,可以定义一个如下的4D数组:

coeff = np.array([[[[2.5]], [[0.7], [0], [0]], [[1.2], [0], [0]], [[-3.8], [0], [0]]],
                  [[[0], [-0.3], [0]], [[0], [0], [-1.2]], [[0.5], [0], [0.0]], [[0.1], [0], [0]]],
                  [[[0], [0], [0]], [[0], [-0.8], [0]], [[0], [0], [2.5]], [[0], [0], [0]]],
                  [[[0], [0], [0]], [[0], [0], [0]], [[0], [0], [0]], [[0], [0], [0]]]])

该数组的形状为(4, 3, 3, 1),对应于4个幂次、每个幂次对应x、y、z三个变量、以及每个幂次对应的系数。在此示例中,x、y、z的次数分别为1、2、1。

  1. 定义评估函数

定义一个函数,输入点的坐标和多项式系数数组,计算并返回该点上的多项式值。

在此处,我们定义的函数为 eval_3d_poly

def eval_3d_poly(x, y, z, coeff):
    x_powers = np.vander([x], N=coeff.shape[0], increasing=True)
    y_powers = np.vander([y], N=coeff.shape[1], increasing=True)
    z_powers = np.vander([z], N=coeff.shape[2], increasing=True)
    xyz_powers = np.tensordot(np.tensordot(x_powers, y_powers, 0), z_powers, 0)
    return np.sum(xyz_powers * coeff)

该函数首先使用 numpy.vander 函数计算每个变量的幂次矩阵,并将它们沿第一维堆叠为三维张量。然后,使用 numpy.tensordot 函数,将三个矩阵进行整体计算得到一个三维张量,并将三维张量与多项式系数数组相乘,得到所需多项式的值。

  1. 评估多项式

(示例1)例如,在点(1,2,3)上评估上述多项式的值,可以使用以下代码:

x = 1
y = 2
z = 3
result = eval_3d_poly(x, y, z, coeff)
print(result)

输出结果为:

15.5

这表明,该点上的多项式值为15.5。

(示例2)还可以通过用一些随机数来评估多项式。以下是使用NumPy随机数生成器评估该多项式的示例代码:

np.random.seed(0)
num_samples = 10
samples = np.random.randn(num_samples, 3)  # 生成10个随机样本点,每个点有3个坐标
results = [eval_3d_poly(x, y, z, coeff) for x, y, z in samples]
print(results)

输出结果为:

[-1.6025085393175406, 1.4299732063163602, 2.4105160947912246, -1.8585244459590993, -3.0430115859758, 7.479183110264103, 1.1916820563081607, -0.7478817182824746, 8.774684779563198, -9.291033567157192]

这表示在10个随机样本点上的多项式值。

本文链接:http://task.lmcjl.com/news/15123.html

展开阅读全文