首页
学习
活动
专区
圈层
工具
发布

返回值
EN

Stack Overflow用户
提问于 2017-04-25 16:11:57
回答 1查看 2.3K关注 0票数 1

我一直在玩odeint,我无法理解函数作为返回值返回的内容。例如,

代码语言:javascript
复制
# -*- 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,它是不同的。

代码语言:javascript
复制
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的解作为一个数组返回。它期望发送的参数数量应该等于从函数返回的参数数。为什么会这样呢?

我无法理解这个函数是如何工作的。有人能给我解释一下吗?如果我听起来太混乱的话,我很抱歉。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2017-04-25 20:10:24

我无法理解函数作为返回值返回的内容。

odeint的返回值是在请求的时间值时计算的解决方案。就是说,在这次电话之后

代码语言:javascript
复制
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)不是系统的平衡。看这个方程式

代码语言:javascript
复制
xdd = ((k*x)/m) + g

x为0时,您将得到xdd = g,因此xdd最初是正的。也就是说,有一个非零力(重力)作用在质量上,所以它加速。

平衡态为-g*m/k,0。

另外,如果我有一个需要发送多个参数的微分方程,那么我不能将odeint调用中的M参数作为一个列表或元组发送,而只能将ODE的解作为一个数组返回。它期望发送的参数数量应该等于从函数返回的参数数。为什么会这样呢?

odeint一次只对一组初始条件进行求解。如果您想要生成几个解决方案(对应于不同的初始条件),则必须多次调用odeint

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43615900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档