Как избежать "TypeError: Input z должен быть как минимум массив 2x2" при попытке создать контурный график - PullRequest
0 голосов
/ 29 марта 2019

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

TypeError: Вход z должен быть как минимум массивом 2x2.

, который, как я полагаю, относится к термину PHI в ax.contour (X, Y, PHI).

Я пытался изменить x, y и phi, чтобы они соответствовали (я не понимаю, почему они еще не совпадают, потому что phi генерируется из значений x и y).Кроме того, я никогда не использовал контурный график раньше, и у меня ограниченный опыт программирования, поэтому, пожалуйста, прости мое невежество.

import matplotlib.pyplot as plt
import numpy as np

n=100
#x and y evenly spaced values
x=np.arange(-n,n,0.01)
y=np.arange(-n,n,0.01)
X,Y=np.meshgrid(x,y)
r=np.array([X,Y])
#r is the scalar distance from the center that each test particle resides at
#r=np.array([(X**2+Y**2)**0.5])<--this was used to generate the output image

def Lagrange(m1,m2,a):
    mtot=m1+m2
    #the distance from the bodies to the center of mass of the system
    x1=-(m2/mtot)*a
    x2=(m1/mtot)*a
    omsq=mtot/(a**3) #omega squared term

    def phi(r):#gravitational potential function
        phi= -m1/abs(r-x1)-m2/abs(r-x2)-0.5*omsq*r**2
        return phi

#I also had a vector plot included in this code (among other details), 
#but decided to omit them as it's not relevant to the error I am receiving. 

    fig=plt.figure()
    ax=fig.add_subplot(111)
    PHI=np.meshgrid(phi(r))
    ax.contour(X,Y,PHI) #3rd dimension is the contour lines
    plt.show()

Lagrange(3.0,1.0,1.0)

Я ожидаю, взяв входные координаты x и y системы (их длины совпадают) и используя сгенерированные выходные значения из функции phi (которая также должна соответствовать длине x и y) создать контурный график, где контурные линии будут представлять гравитационный потенциал, заданный фи.

Вот пара изображений, которые я упомянул в комментариях. код Python (слева) и рабочий код Matlab (справа)

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