Расхождение в результатах при оценке многомерной функции с np.linspace и np.geomspace - PullRequest
0 голосов
/ 30 августа 2018

Я использую numpy для оценки термодинамического уравнения с несколькими входными переменными. В конечном итоге я хочу построить ответные поверхности с помощью matplotlib.

Я использую этот метод , чтобы иметь дело с оценкой функции с несколькими переменными. Рассматриваемый метод оценивает функцию на сетке точек для произвольного числа измерений. Упрощенный пример:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def ndm(*args):
    return [x[(None,)*i+(slice(None),)+(None,)*(len(args)-i-1)] for i, x in enumerate(args)]

fig = plt.figure()
ax = fig.gca(projection='3d')
npt = 50

# With linspace -------------------------------------------------------
A = np.linspace(1570,1170,npt)
B = np.linspace(1070,570,npt)
C = np.linspace(1200,1100,npt)
D = np.linspace(100,1,npt)

A,B,C,D = ndm(A,B,C,D)
r = (A+B+C)/D

X,Y = np.meshgrid(A[:,0,0,0],D[0,0,0,:])
ax.plot_surface(X, Y, r[:,0,0,:], cmap=plt.cm.jet)

# With geomspace ------------------------------------------------------
A = np.geomspace(1570,1170,npt)
B = np.geomspace(1070,570,npt)
C = np.geomspace(1200,1100,npt)
D = np.geomspace(100,1,npt)

A,B,C,D = ndm(A,B,C,D)
r = (A+B+C)/D

X,Y = np.meshgrid(A[:,0,0,0],D[0,0,0,:])
ax.plot_surface(X, Y, r[:,0,0,:], cmap=plt.cm.jet)

plt.show()

Моя проблема в том, что - я бы предположил, что изменение linspace с помощью geomspace не должно изменить мой окончательный график поверхности, поскольку это одна и та же функция, которая оценивается в разных точках. Но когда я рисую их, они выглядят совсем иначе:

enter image description here

Что мне здесь не хватает? Какой сюжет является правильной оценкой моей функции? Спасибо за вашу помощь.

...