使用numpy.array()返回python函数
我正在为我的常微分方程类编写python代码,我必须使用数值方法(RK4)对牛顿第二运动定律进行建模。我相信我的代码是正确的,因为我自己亲手计算了微分方程,并验证了结果 我想缩短我的代码长度,将类似的ODE函数分组在一起,但是我遇到了一个关于返回类型的错误。以下是我迄今为止的工作:使用numpy.array()返回python函数,python,Python,我正在为我的常微分方程类编写python代码,我必须使用数值方法(RK4)对牛顿第二运动定律进行建模。我相信我的代码是正确的,因为我自己亲手计算了微分方程,并验证了结果 我想缩短我的代码长度,将类似的ODE函数分组在一起,但是我遇到了一个关于返回类型的错误。以下是我迄今为止的工作: import numpy as np import matplotlib.pyplot as plt t0 = 0.0 # Start time tf = 10.0
import numpy as np
import matplotlib.pyplot as plt
t0 = 0.0 # Start time
tf = 10.0 # End time
h = 0.001 # step size
t = np.arange(t0,tf,h) # Time Points
v0 = 20 # Initial velocity in m/s
theta = 45 # Launch angle
Uy = v0 * np.sin(theta*np.pi/180) # Initial velocity in y component
Ux = v0 * np.cos(theta*np.pi/180) # Initial velocity in x component
def velocity_y(t,v):
g = 9.81 # Acceleration of free fall
dVy_dt = -g
return dVy_dt
def velocity_x(t,v):
dVx_dt = 0
return dVx_dt
def velocity_xy(t,v):
g = 9.81 # Acceleration of free fall
dVy_dt = -g
dVx_dt = 0
return np.array([dVy_dt,dVx_dt])
p1,p2 = velocity_xy(t,v)
def rk4( f, x0, t):
n = len( t )
x = np.zeros(n)
x[0] = x0
for i in range( n - 1 ):
h = t[i+1] - t[i]
k1 = h * f( x[i], t[i] )
k2 = h * f( x[i] + 0.5 * k1, t[i] + 0.5 * h )
k3 = h * f( x[i] + 0.5 * k2, t[i] + 0.5 * h )
k4 = h * f( x[i] + k3, t[i+1] )
x[i+1] = x[i] + ( k1 + 2.0 * ( k2 + k3 ) + k4 ) / 6.0
return x
r = rk4(velocity_y,Uy,t)
r1 = rk4(velocity_x,Ux,t)
plt.plot(t,r1,'gx',linestyle='-',label='Velocity in y direction')
plt.xlabel('t or x')
plt.ylabel('v(t) or y(x)')
plt.legend()
plt.grid()
plt.show()
我实现了我的ODE功能,如下所示:
def velocity_y(t,v):
g = 9.81 # Acceleration of free fall
dVy_dt = -g
return dVy_dt
def velocity_x(t,v):
dVx_dt = 0
return dVx_dt
def velocity_xy(t,v):
g = 9.81 # Acceleration of free fall
dVy_dt = -g
dVx_dt = 0
return np.array([dVy_dt,dVx_dt])
p1,p2 = velocity_xy(t,v)
我试图将相似的ODE分组到相同的函数类型中,以避免仅仅为了定义新ODE而过度创建新函数
def velocity_xy(t,v):
g = 9.81 # Acceleration of free fall
dVy_dt = -g
dVx_dt = 0
return np.array([dVy_dt,dVx_dt])
我认为错误在于:
p1,p2 = velocity_xy(t,v)
但我不知道正确的语法。来自程序的错误:
NameError Traceback (most recent call last)
<ipython-input-37-4ce3cb1658cb> in <module>
30 return np.array([dVy_dt,dVx_dt])
31
---> 32 p1,p2 = velocity_xy(t,v)
33 #-----------------------------------------------------------------------------
34
NameError: name 'v' is not defined
namererror回溯(最近一次调用)
在里面
30返回np.数组([dVy\u dt,dVx\u dt])
31
--->32 p1,p2=速度_xy(t,v)
33 #-----------------------------------------------------------------------------
34
NameError:未定义名称“v”
如果有任何有用的答案和评论,我将不胜感激。我相信主要问题是您正在将v作为
def velocity_xy(t,v)
函数的参数传递,但没有在代码中的任何地方声明它的值。我相信主要问题是您正在将v作为def velocity_xy(t,v)的参数传递
函数,但不在代码中的任何位置声明其值