графики поверхности в matplotlib с использованием функции z = f(x,y), где f не может быть записано в стандартных функциях. Как это?

#python #matplotlib #surface

Вопрос:

введите описание изображения здесьЯ сделал сценарий для рисования поверхности. X Y выполнены с регулярной сеткой. Z будет результатом положений X и Y f(X,Y), где f-результат вычисления бесконечного ряда или вычисления сходимости (таким образом, нет Exp Sin **2 .. в одной формуле для описания функции). Это не начинается в Spyder. Но работайте в терминале.

Эта команда не была выполнена, так как произошла ошибка при попытке получить код файла из редактора Spyder. Ошибка заключалась в:

Произошло исключение, используйте %tb, чтобы увидеть полную обратную трассировку.

Ошибка типа: handle_get_file_code() получил неожиданный аргумент ключевого слова «save_all»

 #import pdb # for debugger import matplotlib import matplotlib.pyplot as plt from matplotlib.ticker import LinearLocator, FormatStrFormatter import numpy as np import math as math  def perim(x, y):  # return perimeter according AGM MAGM calc # parution http://www.ams.org/notices/201208/rtx120801094p.pdf # author MAGM http://semjonadlaj.com/  xn=x   xN=xn  yn=y  yN=yn  R09=xn*xn yn*yn  R10=1.  if (xn!=0.) and (yn!=0.):  while True:  yn=yN  xn=xN  yN=math.sqrt(xn*yn)  R10=R10*2  xN=xn-(xn-yn)/2  R09 = R09- R10*((xn-yn)/2)**2  if (R10*((xn-yn)/2)**2) lt; 1e-15:  break  R09=(R09/yN)*math.pi  else:  if (xn==0.):  R09=yN*4  if (yn==0):  R09=xN*4  return R09  # domains #pdb.set_trace() # start the debugger N = 50 Wide = 10. X = np.arange(0.,Wide,Wide/N) Y = np.arange(0.,Wide,Wide/N) Z=np.zeros((N, N)) for i in range(N):  for j in range(N):  Z[i,j]=perim((Wide/N)*i, (Wide/N)*j) X, Y = np.meshgrid(X, Y) # fourth dimention - colormap # create colormap according to x-value (can use any 50x50 array) color_dimension = Z # change to desired fourth dimension minn, maxx = color_dimension.min(), color_dimension.max() norm = matplotlib.colors.Normalize(minn, maxx) m = plt.cm.ScalarMappable(norm=norm, cmap='jet') m.set_array([]) fcolors = m.to_rgba(color_dimension) # plot fig = plt.figure() ax = fig.add_subplot(111, projection='3d') surf=ax.plot_surface(X,Y,Z, rstride=1, cstride=1, facecolors=fcolors, alpha=0.5, vmin=minn, vmax=maxx, shade=False) ax.set_xlabel('ellipse halfparam a') ax.set_ylabel('ellipse halfparam b') ax.set_zlabel('ellipse perim') Windo= Wide*2*math.pi ax.set_zlim(0, Windo) ax.zaxis.set_major_locator(LinearLocator(10)) ax.zaxis.set_major_formatter(FormatStrFormatter('%.01f')) fig.colorbar(surf, shrink=0.5, aspect=10) ax.contour(X, Y, Z, 10, linewidths=1.5, cmap="autumn_r", linestyles="solid", offset=-1) ax.contour(X, Y, Z, 10, linewidths=1.5, colors="k", linestyles="solid") ax.view_init(elev=20., azim=-100.) plt.show()  

Комментарии:

1. Поскольку save_all и handle_get_file_code() не отображаются в вашем коде, я бы сделал то, что там написано, и «используйте %tb, чтобы увидеть полную обратную связь». ФУ, я получил сообщение об ошибке в строке 20 из-за вашего использования ^ . Python использует ** для повышения до степени, предполагая, что вы это имели в виду, а не побитовое исключающее Или.

2. Спасибо вам за вашу приятную поддержку. Похоже, это была проблема со Спайдером. Я только что начал отладку в терминале и обнаружил проблему, которую вы выделили. Код работает. На нем показана изопериметрическая поверхность эллипса. Цвет выделяет разнообразный изопериметр. X и Y-это полупараметры эллипса. Z-значение периметра.

3. «Похоже, это была проблема с Spyder», потому что правильный код не запускается в моей среде Spyder. Теперь любой совет, чтобы увидеть кривые уровня в Z в дополнение к цветам, приветствуется (никакой срочности вообще).

4. Обновление: добавлены кривые изопериметра в качестве уровня Z. Изображение результата добавлено.

5. все еще работаю над улучшением сценария, так как были замечены ошибки.