Python
 Computer >> コンピューター >  >> プログラミング >> Python

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] の形式で指定する、各軸の最大次数のリスト。

なお、疑似ファンデルモンド行列とは、各サンプル点における多項式の各基底関数(ここではエルミート多項式)の値を並べた行列のことです。3次元の場合、行列の列数は (x_deg+1) × (y_deg+1) × (z_deg+1) となり、この例では 3 × 4 × 5 = 60 列の行列が生成されます。このような行列は、多項式による最小二乗近似や補間などの計算で利用されます。

手順

1. 必要なライブラリをインポートする

まず、NumPyとエルミート多項式モジュールをインポートします。

import numpy as np
from numpy.polynomial import hermite as H

2. 同じ形状の点座標配列を作成する

numpy.array()メソッドを使用して、すべて同じ形状の点座標の配列を作成します。

x = np.array([-2.+2.j, -1.+2.j])
y = np.array([0.+2.j, 1.+2.j])
z = np.array([2.+2.j, 3. + 3.j])

3. 配列を表示する

print("Array1...\n",x)
print("\nArray2...\n",y)
print("\nArray3...\n",z)

4. データ型を確認する

print("\nArray1 datatype...\n",x.dtype)
print("\nArray2 datatype...\n",y.dtype)
print("\nArray3 datatype...\n",z.dtype)

5. 配列の次元を確認する

print("\nDimensions of Array1...\n",x.ndim)
print("\nDimensions of Array2...\n",y.ndim)
print("\nDimensions of Array3...\n",z.ndim)

6. 配列の形状を確認する

print("\nShape of Array1...\n",x.shape)
print("\nShape of Array2...\n",y.shape)
print("\nShape of Array3...\n",z.shape)

7. 疑似ファンデルモンド行列を生成する

hermite.hermvander3d()を使用して、エルミート多項式とx、y、zのサンプル点から疑似ファンデルモンド行列を生成します。ここでは、各軸の最大次数をx_deg=2、y_deg=3、z_deg=4として指定しています。

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([-2.+2.j, -1.+2.j])
y = np.array([0.+2.j, 1.+2.j])
z = np.array([2.+2.j, 3. + 3.j])

# 配列を表示します
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]))

出力結果

Array1...
[-2.+2.j -1.+2.j]

Array2...
[0.+2.j 1.+2.j]

Array3...
[2.+2.j 3.+3.j]

Array1 datatype...
complex128

Array2 datatype...
complex128

Array3 datatype...
complex128

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.000000e+00+0.000000e+00j 4.000000e+00+4.000000e+00j
-2.000000e+00+3.200000e+01j -1.520000e+02+1.040000e+02j
-1.012000e+03-3.840000e+02j 0.000000e+00+4.000000e+00j
-1.600000e+01+1.600000e+01j -1.280000e+02-8.000000e+00j
-4.160000e+02-6.080000e+02j 1.536000e+03-4.048000e+03j
-1.800000e+01+0.000000e+00j -7.200000e+01-7.200000e+01j
3.600000e+01-5.760000e+02j 2.736000e+03-1.872000e+03j
1.821600e+04+6.912000e+03j 0.000000e+00-8.800000e+01j
3.520000e+02-3.520000e+02j 2.816000e+03+1.760000e+02j
9.152000e+03+1.337600e+04j -3.379200e+04+8.905600e+04j
-4.000000e+00+4.000000e+00j -3.200000e+01+0.000000e+00j
-1.200000e+02-1.360000e+02j 1.920000e+02-1.024000e+03j
5.584000e+03-2.512000e+03j -1.600000e+01-1.600000e+01j
0.000000e+00-1.280000e+02j 5.440000e+02-4.800000e+02j
4.096000e+03+7.680000e+02j 1.004800e+04+2.233600e+04j
7.200000e+01-7.200000e+01j 5.760000e+02+0.000000e+00j
2.160000e+03+2.448000e+03j -3.456000e+03+1.843200e+04j
-1.005120e+05+4.521600e+04j 3.520000e+02+3.520000e+02j
0.000000e+00+2.816000e+03j -1.196800e+04+1.056000e+04j
-9.011200e+04-1.689600e+04j -2.210560e+05-4.913920e+05j
-2.000000e+00-3.200000e+01j 1.200000e+02-1.360000e+02j
1.028000e+03+0.000000e+00j 3.632000e+03+4.656000e+03j
-1.026400e+04+3.315200e+04j 1.280000e+02-8.000000e+00j
5.440000e+02+4.800000e+02j 0.000000e+00+4.112000e+03j
-1.862400e+04+1.452800e+04j -1.326080e+05-4.105600e+04j
3.600000e+01+5.760000e+02j -2.160000e+03+2.448000e+03j
-1.850400e+04+0.000000e+00j -6.537600e+04-8.380800e+04j
1.847520e+05-5.967360e+05j -2.816000e+03+1.760000e+02j
-1.196800e+04-1.056000e+04j 0.000000e+00-9.046400e+04j
4.097280e+05-3.196160e+05j 2.917376e+06+9.032320e+05j]
[ 1.000000e+00+0.000000e+00j 6.000000e+00+6.000000e+00j
-2.000000e+00+7.200000e+01j -4.680000e+02+3.960000e+02j
-5.172000e+03-8.640000e+02j 2.000000e+00+4.000000e+00j
-1.200000e+01+3.600000e+01j -2.920000e+02+1.360000e+02j
-2.520000e+03-1.080000e+03j -6.888000e+03-2.241600e+04j
-1.400000e+01+1.600000e+01j -1.800000e+02+1.200000e+01j
-1.124000e+03-1.040000e+03j 2.160000e+02-1.303200e+04j
8.623200e+04-7.065600e+04j -1.000000e+02-4.000000e+01j
-3.600000e+02-8.400000e+02j 3.080000e+03-7.120000e+03j
6.264000e+04-2.088000e+04j 4.826400e+05+2.932800e+05j
-2.000000e+00+4.000000e+00j -3.600000e+01+1.200000e+01j
-2.840000e+02-1.520000e+02j -6.480000e+02-2.664000e+03j
1.380000e+04-1.896000e+04j -2.000000e+01+0.000000e+00j
-1.200000e+02-1.200000e+02j 4.000000e+01-1.440000e+03j
9.360000e+03-7.920000e+03j 1.034400e+05+1.728000e+04j
-3.600000e+01-8.800000e+01j 3.120000e+02-7.440000e+02j
6.408000e+03-2.416000e+03j 5.169600e+04+2.692800e+04j
1.101600e+05+4.862400e+05j 3.600000e+02-3.200000e+02j
4.080000e+03+2.400000e+02j 2.232000e+04+2.656000e+04j
-4.176000e+04+2.923200e+05j -2.138400e+06+1.344000e+06j
-1.400000e+01-1.600000e+01j 1.200000e+01-1.800000e+02j
1.180000e+03-9.760000e+02j 1.288800e+04+1.944000e+03j
5.858400e+04+9.484800e+04j 3.600000e+01-8.800000e+01j
7.440000e+02-3.120000e+02j 6.264000e+03+2.768000e+03j
1.800000e+04+5.544000e+04j -2.622240e+05+4.240320e+05j
4.520000e+02+0.000000e+00j 2.712000e+03+2.712000e+03j
-9.040000e+02+3.254400e+04j -2.115360e+05+1.789920e+05j
-2.337744e+06-3.905280e+05j 7.600000e+02+2.160000e+03j
-8.400000e+03+1.752000e+04j -1.570400e+05+5.040000e+04j
-1.211040e+06-7.099200e+05j -2.064480e+06-1.182816e+07j]]

  1. Pythonでチェビシェフ多項式とx、y、zサンプル点の疑似ファンデルモンド行列を生成する方法

    PythonのNumPyを使用して、チェビシェフ多項式とx、y、zのサンプル点から疑似ファンデルモンド行列(pseudo Vandermonde matrix)を生成するには、chebyshev.chebvander3d()関数を使います。このメソッドは、指定した次数degおよびサンプル点(x, y, z)に対応する疑似ファンデルモンド行列を返します。 パラメータの説明 x、y、z:点座標の配列です。すべて同じ形状である必要があります。要素に複素数が含まれるかどうかに応じて、dtypeはfloat64またはcomplex128に自動的に変換されます。スカラー値を渡した場合は1次元配列に変換さ

  2. Pythonでエルミート多項式とx・y・zサンプル点の疑似ファンデルモンド行列を生成する方法

    エルミート多項式とx、y、zのサンプル点から疑似ファンデルモンド行列を生成するには、PythonのNumPyが提供する hermite.hermvander3d() メソッドを使用します。このメソッドは、計算結果として疑似ファンデルモンド行列を返します。 エルミート多項式は、物理学や確率論などの分野で広く利用される直交多項式の一種です(NumPyの numpy.polynomial.hermite モジュールでは、物理学者が用いる形式のエルミート多項式が採用されています)。疑似ファンデルモンド行列とは、各サンプル点における多項式の値を次数ごとの列として並べた行列のことで、多項式による最小二乗近