import scipy as sp
import numpy as np
import pylab as pl
import scipy.integrate as spi
import matplotlib.pyplot as plt
G=6.67*10**(-11)
M=6.4*(10**23)
R=3.4*(10**6)
m=260
#define the gravitational constant G, radius (R) and mass (M) of Mars and the mass of the satellite (m)
#called with the variables to be differentiated
def f(a,t):
xx=a[0]
vx=a[1]
yy=a[2]
vy=a[3]
ax=-(G*M*xx)/((xx**2+yy**2)**1.5)
ay=(-G*M*yy)/((xx**2+yy**2)**1.5)
return [vx,ax,vy,ay]
#returns differentiated values, function defines values and returns new values
d=((xx**2+yy*2)**(0.5))
if d<r:
vx,vy,ax,ay=0,0,0,0
return [vx,ax,vy,ay]
#first initial conditions- blue curve
t1=sp.linspace(0.,259200,10000) #three years
initial1=[3*R,2000,3*R,500]
solution1=spi.odient(f,initial1,t1)
x1=solution1[:,0]
y1=solution1[:,2]
pl.figure(1)
pl.plot(x1,y1)
pl.xlabel("x")
pl.ylabel("y")
pl.show()
您好,请帮助我运行此代码!它是用python编写的,并且相当基础,我在第二个返回函数时出错,它在函数外面说“返回”。另一个错误是“'module'对象没有属性'odient'”。
答案 0 :(得分:1)
if d<r:
vx,vy,ax,ay=0,0,0,0
return [vx,ax,vy,ay]
这不是一项功能,因此您无法使用return
。如果要将这些值添加到列表中,可以创建新列表:
new_list = [vx,ax,vy,ay]
您不需要在函数外部使用return,因为这些变量已经在范围内。在函数内部使用变量时,它们与程序的其余部分不在同一范围内。例如:
>>> def foo():
a =10
>>> a = 1
>>> foo()
>>> a
1
函数内的a
不会影响a
之外的内容。在if
语句中,您不需要return
,因为它在同一范围内。变量的赋值不需要从任何地方返回,因为它是相同的范围。
正如@Hugh Bothwell指出你在函数调用中有一个拼写错误应该是:
scipy.integrate.odeint()