Python функция, которая будет отображать касательную плоскость к трехмерной функции поверхности - PullRequest
0 голосов
/ 28 февраля 2020

Мне нужно создать функцию, которая отображает касательную плоскость в 3d-функцию в указанной c точке. Вот то, что нужно принять:

# test case 1
plot_tan_plane(lambda x,y: 3 - x**2 - y**2,1,1)

, и нужно вывести график, подобный следующему:

вот изображение того, как должен выглядеть вывод как

Вот код, который у меня есть, но он дает мне ошибки: из символов импорта sympy, diff

def plot_tan_plane(f,a,b):

    g = f

    x = y = np.linspace(-5,5,50)

    X,Y = np.meshgrid(x,y) # this basically makes all the pairs on coordinates

    # Set up axes. There are so many ways to do this.
    fig = plt.figure(figsize=(8,8))
    ax = plt.subplot(projection='3d')

    a = a
    b = b

    h = 0.1
    q = (g(a,b))
    s = (g(a+h,b))

    u= (g(a,b+h))

    v = (s/h)-(q/h)
    w = (u/h)-(q/h)
    z = (lambda x,y: q + v*(X-a) + w*(Y-b),a,b)

    i = lambda x,y: z
    j = lambda x,y: g


    #do the plotting
    ax.plot_surface(X,Y,i);
    ax.plot_surface(X,Y,j);

Это ошибка, которую он мне дает:

 ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-96-a24f1f7bed99> in <module>
      1 # test case 1
----> 2 plot_tan_plane(lambda x,y: 3 - x**2 - y**2,1,1)

<ipython-input-95-85e008d4abd6> in plot_tan_plane(f, a, b)
     33 
     34     #do the plotting
---> 35     ax.plot_surface(X,Y,i);
     36     ax.plot_surface(X,Y,j);
     37 

/opt/conda/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py in plot_surface(self, X, Y, Z, norm, vmin, vmax, lightsource, *args, **kwargs)
   1611         had_data = self.has_data()
   1612 
-> 1613         if Z.ndim != 2:
   1614             raise ValueError("Argument Z must be 2-dimensional.")
   1615         if np.any(np.isnan(Z)):

AttributeError: 'function' object has no attribute 'ndim'

Большое спасибо за помощь!

...