【问题标题】:odeint for an differential system用于微分系统的 odeint
【发布时间】:2016-03-12 10:24:16
【问题描述】:

odeint 有问题。我必须解决一阶微分系统,然后是二阶系统,但我对一阶系统有点困惑。你能解释一下我标记为错误的地方吗?谢谢你:)

import scipy.integrate as integrate
import numpy as np
def fun(t,y):
  ys = np.array([y[1], (1-y[0]**2)*y[1]-y[0]])
  return(ys)
N = 3
x0 = np.array([2.00861986087484313650940188,0])
t0tf = [0, 17.0652165601579625588917206249]
T=([0 for i in range (N+1)])
T[0]= t0tf[0]
Pas = (t0tf[1]-t0tf[0])/N
for i in range (1,N+1):
       T[i]= t0tf[0] + i*Pas
X = integrate.odeint(fun, x0,T,Dfun=None, col_deriv=0,full_output=True)
T = np.array(T)
T = T.reshape(N+1,1)
S = np.append(X,T,axis=1)
print(S)

返回的错误是:

ys = np.array([y[1], (1-y[0]**2)*y[1]-y[0]])

TypeError: 'float' 对象不可下标

【问题讨论】:

  • 你看过stackoverflow.com/questions/27820725/… 吗? odeint 的用法在那里得到了相当广泛的解释。
  • 是的,我已经检查过了,但事实是我认为我的函数定义有问题,但我找不到它在哪里......因为这个函数在我的欧拉和龙格库塔算法
  • 感谢您对拼写的帮助,我还在学习英语,但我一点也不擅长:p
  • 我建议您将数据结构简化为工作示例中的数据结构,然后从那里开始。如果您还不知道自己在做什么,请尝试运行该程序并将其应用于您的问题。

标签: python numpy scipy ode numerical-integration


【解决方案1】:

您需要反转导数函数的参数顺序 - 它应该是 f(y, t),而不是 f(t, y)。这与 scipy.integrate.ode 类使用的顺序相反。

另外,S = np.append(X,T,axis=1) 的连接会失败,因为X 是一个包含积分和字典的元组。请改用S = np.append(X[0],T,axis=1)

【讨论】:

  • 谢谢,我尝试了你的建议,它的工作,但我有一个附加问题...它让我像上面的消息中出现错误,r1 = 0.0000000000000D+00 lsoda--运行中止.. 明显的无限循环 output[1]['message'] = _msgs[output[-1]] KeyError: 1'
  • 如果我在回答中进行了两项更改,您在问题中发布的代码将毫无问题地执行。你所描述的听起来像是一个完全不同的问题——我无法用你目前提供的信息重现它。
  • 好的,在此之前感谢您的帮助,我发现问题是 odeint 的错误,已在上一个版本中更正:)
猜你喜欢
  • 2017-01-28
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
相关资源
最近更新 更多