4D 空間での補間に関して、私が直面している複雑な問題についていくつかの手がかりを探しています。
3 次元空間の 340 点で構成されるデータセットがあります (3 つの変数 - A、B、C があり、それぞれ 340 要素で定義されています)。各ポイントは、出力変数の特定の値によって識別されます。だから、一般的に私は持っています
f(A、B、C) = D
設計空間の各ポイントの D の値を予測するために、データセットを補間する必要があります。私がしたことは、numpy メソッド linalg.lstsq を介して多項式mの係数を取得するための小さなスクリプトを作成することでした。
def polyfit4d(x,y,z, metric, order):
ncols = (order + 1)**3
G = np.zeros((x.size, ncols))
ij = itertools.product(range(order+1), repeat=3)
for w, (i,j,k) in enumerate(ij):
G[:,w] = x**i * y**j * z**k
m, residuals, rank, s = np.linalg.lstsq(G, metric)
return m, residuals
次に、評価関数を使用して、設計空間のすべての点で関数の値を取得しました。
def polyval4d(x, y, z, m):
string = ''
order = int(math.ceil(((len(m))**(1/3.0))-1))
ij = itertools.product(range(order+1), repeat=3)
f = np.zeros_like(x)
for a, (i,j,k) in zip(m, ij):
f += a * x**i * y**j * z**k
return f
私のデザイン スペースは 3 次元なので、デザイン スペースのすべての点 X、Y、Z を含む 3 つの 3D マトリックスを polyval 関数に渡しました。fは、出力 Dの3D 行列です。この行列の各点は、設計空間の各点で polyfit で見つかった多項式を評価して計算された D の値です (トリッキーな文で申し訳ありません)。
次に、この 3D 設計空間のスライスの等高線図をプロットします。Z の 1 つの値を選択し、D の値に基づくコンター レベルを使用して、X、Y によって形成される 2D 平面をプロットします。問題は、結果が期待したものと異なることです。等高線図はほぼ同じ色ですが、1 つの隅に多少の違いがあります。
私はインターネット上のあらゆる場所を検索しました。また、Python wiki では、2D の場合にのみ機能する関数が提案されています。誰もこの種の問題に直面したことがありますか? この N 次元多項式の評価/定義で何かが欠けていますか?
ご清聴ありがとうございました。
フェデリコ