matplotlib(x-y)^ 2的表面图

时间:2017-03-24 22:20:47

标签: python numpy matplotlib mplot3d

任何人都可以帮我绘制等式K=1

的3D表面图

Z轴应代表函数f(x,y)

我有以下功能:

template<typename T, int K>
class someclass
{
public:
    someclass() : member(3) { }
    T giveback() { return member; } // if K=0 should return by T, else return by T&
private:
    T member;
};

int main()
{
    someclass<int,0> x;
    x.giveback();
}

这里X是一个numpy数组,第一个参数为X,第二个参数为Y. 我特别需要这样做。所以请不要建议我更改签名。 ;)

我在this解决方案中尝试了以下内容:

f(x,y) = (x-y)^2

但是我得错了。

This is a wrong plot though

2 个答案:

答案 0 :(得分:2)

您的fnc错了。像Z=(X-Y)**2一样获得表面。这是最佳解决方案,因为Z的所有计算都将被矢量化。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.linspace(-5,5,100)
X, Y = np.meshgrid(x, y)
Z = (X-Y)**2
ax.plot_surface(X, Y, Z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()

enter image description here

答案 1 :(得分:1)

要绘制的数组Z应该是2D数组,就像XY是2D数组一样,对于XY的每一对值, Z您在X中得到了一分。因此,使用这些数组Yfnc作为Z = fnc([X,Y])函数的输入是有意义的,import numpy as np import matplotlib.pylab as plt from mpl_toolkits.mplot3d import Axes3D def fnc(X): return (X[0] - X[1]) ** 2 fig = plt.figure() ax = fig.add_subplot(111, projection=Axes3D.name) x = y = np.linspace(-5,5,100) X, Y = np.meshgrid(x, y) Z = fnc([X,Y]) ax.plot_surface(X, Y, Z) ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z Label') ax.view_init(elev=15, azim=-118) plt.show()

完整的代码看起来像

{{1}}

enter image description here