我一直在玩odeint,我无法理解函数作为返回值返回的内容。例如,
# -*- coding: utf-8 -*-
"""
Created on Sat Feb 04 20:01:16 2017
@author: Esash
"""
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import numpy as np
def MassSpring(state,t):
# unpack the state vector
x = state[0]
xd = state[1]
# these are our constants
k = -5.5 # Newtons per metre
m = 1.5 # Kilograms
g = 9.8 # metres per second
# compute acceleration xdd
xdd = ((k*x)/m) + g
# return the two state derivatives
return [xd, xdd]
state0 = [0.0, 0.0]
t = np.arange(0.0, 10.0, 0.1)
state = odeint(MassSpring, state0, t)
plt.plot(t, state)
plt.xlabel('TIME (sec)')
plt.ylabel('STATES')
plt.title('Mass-Spring System')
plt.legend(('$x$ (m)', '$\dot{x}$ (m/sec)'))在上面的代码中,我将这两个参数设置为0.0和0.0,函数中的xd仅为0.0,这也是我返回的。但是返回值不仅仅是0.0,它是不同的。
In [14]: state
Out[14]:
array([[ 0. , 0. ],
[ 0.04885046, 0.97402207],
[ 0.19361613, 1.91243899],
...,
[ 0.10076832, -1.39206172],
[ 0.00941998, -0.42931942],
[ 0.01542821, 0.54911655]])另外,如果我有一个需要发送多个参数的微分方程,那么我不能将odeint调用中的M参数作为一个列表或元组发送,而只能将ODE的解作为一个数组返回。它期望发送的参数数量应该等于从函数返回的参数数。为什么会这样呢?
我无法理解这个函数是如何工作的。有人能给我解释一下吗?如果我听起来太混乱的话,我很抱歉。
非常感谢。
发布于 2017-04-25 20:10:24
我无法理解函数作为返回值返回的内容。
odeint的返回值是在请求的时间值时计算的解决方案。就是说,在这次电话之后
state = odeint(MassSpring, state0, t)state[0]是[x(t),x'(t)],state[1]是[x(t1),x'(t1)]等。
我已经将这两个参数设置为0.0和0.0 .
您所称的“参数”通常称为初始条件。它们是t=0上x(t)和x'(t)的值。
但是返回值不仅仅是0.0,它是不同的。
这是因为(0,0)不是系统的平衡。看这个方程式
xdd = ((k*x)/m) + g当x为0时,您将得到xdd = g,因此xdd最初是正的。也就是说,有一个非零力(重力)作用在质量上,所以它加速。
平衡态为-g*m/k,0。
另外,如果我有一个需要发送多个参数的微分方程,那么我不能将odeint调用中的M参数作为一个列表或元组发送,而只能将ODE的解作为一个数组返回。它期望发送的参数数量应该等于从函数返回的参数数。为什么会这样呢?
odeint一次只对一组初始条件进行求解。如果您想要生成几个解决方案(对应于不同的初始条件),则必须多次调用odeint。
https://stackoverflow.com/questions/43615900
复制相似问题