Кто я могу сделать это? объект слишком глубокий для нужного массива - PullRequest
0 голосов
/ 01 мая 2018

кто ваш? ... извините за мой английский перевод, но я из Испании, и мой английский очень плохой, извините. Я пытаюсь сделать программу для моего класса вычислительного физического программирования. Мне нужно изучить положение и скорость 2-фазной ракеты, меняя% газа первой фазы (это, очевидно, изменение% 2-фазы газа, Masa1 = масса 1 фазы, Masa 2 = масса 2 фазы) , Меняя газ, меняйте время полета. Я хотел бы поместить все данные в один конец так:

from numpy import *                     #importamos todo lo que
from scipy.integrate import odeint      #podamos necesitar a lo largo
import matplotlib.pyplot as plt         #del programa


#funciones

def funder (M,t,u,D,m0):                #funcion para calcular luego
    '''funcion derivada'''              #la integral de la funcion
    y, v=M[0],M[1]
    return array([v,u*D/(m0-(D*t))])

#constantes
ni=100              #numero de intervalos

#cohete de una fase
#Datos propuestos en el enunciado para una primera prueba
D=13840.  #Kg/s cantidad de combustible que se quema por segundo
m0=2.85e6  #Kg  masa total inicial
u=2.46 #km/s velocidad de salida de los gases
r=0.05 #proporcion de la masa recipiente
mu=0.47*m0 #masa util
mc=(m0-mu)/(1+r) #masa combustible
t0=mc/D #tiempo que tarda en quemar el cobustible en una etapa


#condiciones iniciales
y0, v0 =0, 0                #posicion y velocidades iniciales igual
ListaPorce=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]        #lista de #porcentajes,luego se convertira
                                                        #en un array
Intervalos=[]                                           #lista con los #intervalos de tiempo de los
                                                        #distintos porcentajes de combustible
for i in ListaPorce:                        #para los i en ListaPorce, haz:
    Combustible=mc*i                        #multiplicara los indices por #el combustible
                                            #asi sabemos que cantidad de #combustible para cada porcentaje
    tempo=linspace(0,(Combustible/D),ni)    #tempo es el array de tiempos #para cada porcentaje de combustible
    Intervalos.append(tempo)                #añade tempo a la lista #Intervalos, que luego sera un array

Duracion=array(Intervalos)                  #convertimos la lista #Intervalos al array Duracion
Porcentaje=array(ListaPorce)                #convertimos la lista #ListaPorce al array Porcentaje


Usado=mc*Porcentaje
masa1=mu+(1+r)*Usado                    #masa de la fase 1
masa1.shape=(masa1.size,1)


masa2=mu+(1+r)*(mc-Usado)           #masa de la fase 2

Comparacion01=odeint(funder,array([y0,v0]),Duracion, args=(u,D,masa1))
print Comparacion01

Но когда я бегу, программа говорит мне:

Traceback (most recent call last):
  File "Trabajo IFC.py", line 278, in <module>
    Comparacion01=odeint(funder,array([y0,v0]),Duracion, args=(u,D,masa1))
  File "/usr/lib/python2.7/dist-packages/scipy/integrate/odepack.py", line 144, in odeint
    ixpr, mxstep, mxhnil, mxordn, mxords)
ValueError: object too deep for desired array

Ошибка для использования не одномерного массива для odeint, true ?. Кто я могу сделать это? я хочу иметь "мега-массив" (Comparacion01), например [%, время, положение, скорость] Кто я могу сделать это? нужно поменять функцию "funder" Большое спасибо всем пользователям. я буду продолжать пытаться ...

...