Пытаюсь построить функцию, используя python (matplotlib и numpy), и я сталкиваюсь с ошибками значения и ошибкой типа, если я немного изменю ее - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь построить график этого уравнения и в настоящее время сталкиваюсь с этими ошибками. Я импортирую numpy и matplotlib с python. Я не уверен, как исправить эти ошибки

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


def equation(delta=0.05):
    #for K = 3
    #from matplotlib.mlab import bivariate_normal

    x = y = np.arange(0,1,delta)
    #y = np.arange(0,1,delta)
    #x = np.arange(0.4,1,delta)
    X,Y = np.meshgrid(x,y)

    Z = (3*y-y-9*x+2*3*x)**2 - 4(9*x-3*x)(y-3*y+3-3*x)
    return X, Y, Z
#x = F
#y = P

fig = plt.figure()
#ax = fig.add_subplot(111, projection'3d')
ax = Axes3D(equation(0.05))

x,y,z = Axes3D.equation(0.05)
ax.plot_wireframe(x,y,z, rstride=5, cstride=5)
plt.show()

При использовании x = y = np.arange(0,1,delta) возникает ошибка типа, которая говорит, что int не вызывается. При использовании y = np.arange(0,1,delta) и x = np.arange(0.4,1,delta) вместо этого я получаю ошибку значения

ValueError: операнды не могут передаваться вместе с фигурами (20,) (12).

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Добро пожаловать в StackOverflow!

Есть несколько вещей, которые нужно исправить с помощью вашего кода-

  1. Как уже упоминал Ле Хоанг Джианг, в ваших умножениях не хватает пары звездочек. Когда вы пишете 4 (9 * x-3 * x), python пытается использовать «4» как функцию, которая не вызывается, поэтому возникает ошибка.

  2. Вы должны рассчитать Z, используя X & Y (заглавные буквы), а не x, y, так что вы получите двумерную поверхность.

  3. Ваше использование Axes3D не соответствует ссылке .

Ниже приведена рабочая версия вашего кода.

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


def equation(delta=0.05):
    #for K = 3
    #from matplotlib.mlab import bivariate_normal

    x = y = np.arange(0,1,delta)
    #y = np.arange(0,1,delta)
    #x = np.arange(0.4,1,delta)
    X,Y = np.meshgrid(x,y)

    Z = (3*Y-Y-9*X+2*3*X)**2 - 4*(9*X-3*X)*(Y-3*Y+3-3*X)


    return X, Y, Z
#x = F
#y = P

fig = plt.figure()
#ax = fig.add_subplot(111, projection'3d')
ax = Axes3D(fig)

x,y,z = equation(0.05)
ax.plot_wireframe(x,y,z, rstride=5, cstride=5)
plt.show()
0 голосов
/ 02 июля 2019

Вы должны написать 4 * (9 * х-3 * х) * (у-3 * у + 3-3 * х) вместо 4 (9 * х-3 * х) (у-3 * у + 3-3 * х). Отсутствует '*', ваша программа не может понять, что она кратна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...