Pythonでエルミート多項式とx・y・zサンプル点の疑似ファンデルモンド行列を生成する方法
エルミート多項式とx、y、zのサンプル点から疑似ファンデルモンド行列を生成するには、PythonのNumPyが提供する hermite.hermvander3d() メソッドを使用します。このメソッドは、計算結果として疑似ファンデルモンド行列を返します。
エルミート多項式は、物理学や確率論などの分野で広く利用される直交多項式の一種です(NumPyの numpy.polynomial.hermite モジュールでは、物理学者が用いる形式のエルミート多項式が採用されています)。疑似ファンデルモンド行列とは、各サンプル点における多項式の値を次数ごとの列として並べた行列のことで、多項式による最小二乗近似などの計算の基礎となります。
引数の x、y、z は点の座標を格納した配列で、3つとも同じ形状である必要があります。データ型(dtype)は、要素に複素数が含まれるかどうかに応じて float64 または complex128 のいずれかに変換されます。スカラー値を渡した場合は、自動的に1次元配列へと変換されます。また、引数 deg には [x_deg, y_deg, z_deg] の形式で、各軸方向の最大次数をリストとして指定します。
手順
最初に、必要なライブラリをインポートします。
import numpy as np from numpy.polynomial import hermite as H
numpy.array() メソッドを使って、同じ形状を持つ点座標の配列を作成します。
x = np.array([1.5, 2.3]) y = np.array([3.7, 4.4]) z = np.array([5.3, 6.6])
作成した配列を表示してみましょう。
print("Array1...\n",x)
print("\nArray2...\n",y)
print("\nArray3...\n",z)
各配列のデータ型を確認します。
print("\nArray1 datatype...\n",x.dtype)
print("\nArray2 datatype...\n",y.dtype)
print("\nArray3 datatype...\n",z.dtype)
続いて、配列の次元数を確認します。
print("\nDimensions of Array1...\n",x.ndim)
print("\nDimensions of Array2...\n",y.ndim)
print("\nDimensions of Array3...\n",z.ndim)
さらに、配列の形状も確認しておきましょう。
print("\nShape of Array1...\n",x.shape)
print("\nShape of Array2...\n",y.shape)
print("\nShape of Array3...\n",z.shape)
準備が整ったら、hermite.hermvander3d() を使って、エルミート多項式とx、y、zサンプル点の疑似ファンデルモンド行列を生成します。
x_deg, y_deg, z_deg = 2, 3, 4
print("\nResult...\n",H.hermvander3d(x,y,z, [x_deg, y_deg, z_deg]))
完全なサンプルコード
import numpy as np
from numpy.polynomial import hermite as H
# numpy.array()メソッドを使って、同じ形状の点座標配列を作成
x = np.array([1.5, 2.3])
y = np.array([3.7, 4.4])
z = np.array([5.3, 6.6])
# 配列を表示
print("Array1...\n",x)
print("\nArray2...\n",y)
print("\nArray3...\n",z)
# データ型を表示
print("\nArray1 datatype...\n",x.dtype)
print("\nArray2 datatype...\n",y.dtype)
print("\nArray3 datatype...\n",z.dtype)
# 次元数を確認
print("\nDimensions of Array1...\n",x.ndim)
print("\nDimensions of Array2...\n",y.ndim)
print("\nDimensions of Array3...\n",z.ndim)
# 形状を確認
print("\nShape of Array1...\n",x.shape)
print("\nShape of Array2...\n",y.shape)
print("\nShape of Array3...\n",z.shape)
# エルミート多項式とx、y、zサンプル点の疑似ファンデルモンド行列を生成
x_deg, y_deg, z_deg = 2, 3, 4
print("\nResult...\n",H.hermvander3d(x,y,z, [x_deg, y_deg, z_deg]))
実行結果
Array1... [1.5 2.3] Array2... [3.7 4.4] Array3... [5.3 6.6] Array1 datatype... float64 Array2 datatype... float64 Array3 datatype... float64 Dimensions of Array1... 1 Dimensions of Array2... 1 Dimensions of Array3... 1 Shape of Array1... (2,) Shape of Array2... (2,) Shape of Array3... (2,) Result... [[1.00000000e+00 1.06000000e+01 1.10360000e+02 1.12741600e+03 1.12884496e+04 7.40000000e+00 7.84400000e+01 8.16664000e+02 ... [1.00000000e+00 1.32000000e+01 1.72240000e+02 2.22076800e+03 2.82806976e+04 8.80000000e+00 1.16160000e+02 1.51571200e+03 ...]]
※ 出力される行列は非常に大きいため、ここでは一部のみを掲載しています。今回の例では最大次数を [2, 3, 4] と指定しているため、各行の要素数は (2+1)×(3+1)×(4+1)=60 個となり、結果として 2行×60列 の疑似ファンデルモンド行列が生成されます。
-
Pythonで点座標のfloat配列を使用してチェビシェフ多項式の疑似ファンデルモンド行列を生成する方法
チェビシェフ多項式の疑似ファンデルモンド行列を生成するには、PythonのNumPyが提供する numpy.polynomial.chebyshev モジュールの chebvander2d() 関数を使用します。この関数は、指定した最大次数 deg とサンプル点 (x, y) に対応する疑似ファンデルモンド行列を返します。パラメータ x と y は点座標の配列で、両方とも同一の形状を持つ必要があります。データ型(dtype)は、要素に複素数が含まれるかどうかに応じて、float64 または complex128 のいずれかに自動的に変換されます。スカラー値を渡した場合は1次元配列へと変換されま
-
Pythonでエルミート多項式とx・y・zの複素数サンプル点から疑似ファンデルモンド行列を生成する方法
エルミート多項式とx、y、zのサンプル点から疑似ファンデルモンド行列を生成するには、PythonのNumPyが提供するhermite.hermvander3d()関数を使用します。このメソッドは、計算結果として疑似ファンデルモンド行列を返します。主なパラメータは以下の通りです。x、y、z: 点座標の配列。すべて同じ形状である必要があります。dtypeは、要素に複素数が含まれるかどうかに応じてfloat64またはcomplex128へ自動的に変換され、スカラーを渡した場合は1次元配列に変換されます。deg: [x_deg, y_deg, z_deg] の形式で指定する、各軸の最大次数のリスト。な