代码无效(python)

时间:2014-02-04 17:29:09

标签: python scipy

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'”。

1 个答案:

答案 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()