首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python odeint明显返回错误的解决方案

Python odeint明显返回错误的解决方案
EN

Stack Overflow用户
提问于 2016-09-08 17:16:50
回答 1查看 366关注 0票数 1

使用python 2.7.8。

我正在处理的微分方程是x'=2-3*x,并不是很难。正确的解是y截距为2/3的衰减指数。练习有三个初始条件。还必须有一个解决方案在同一地块的坡度字段。我有斜率字段,但提供的解决方案是错误的。x'=x的测试用例工作得很好,但仅当t>0时有效。但是odeint提供的解决方案是错误的。我得到的不是衰减指数,而是看起来像trig函数的函数。下面是代码。

代码语言:javascript
复制
#Solutions function
def m_diff_sol(input_domain,input_initial_conditions_set):
    f_set=[]
    for n in input_initial_conditions_set:
        m_sol=odeint(m_fst_diff_eq,n,input_domain)
        f=[b for [a,b] in m_sol]
        f_set.append(f)
    return f_set

#Vector field function
def m_fst_diff_eq(x,t):
    m,mdot=x
    return [mdot,2-3*m]

EN

回答 1

Stack Overflow用户

发布于 2016-09-08 20:51:27

您希望ODE函数返回1个输出,即

代码语言:javascript
复制
def my_ode_func(x,t):
    return 2.0 - 3.0*x

然后,odeint给出从初始条件到x=2/3的期望指数衰减。

代码语言:javascript
复制
import numpy as np
from scipy.integrate import odeint
t = np.arange(0,10.0,0.01)
x0 = 1
out1 = odeint(my_ode_func,x0,t)

看起来你是在建立类似于二阶ODE x''(t) = 2 - 3*x(t)的模型。这将被写成一阶ODEs Y(t) = [x(t),x'(t)]的系统,然后

代码语言:javascript
复制
Y'(t) = [Y[2](t), 2 - 3*Y[1](t)]

代码将如下所示:

代码语言:javascript
复制
def my_ode_func2(Y,t):
    return [Y[1],2.0 - 3.0*Y[0]]

Y0 = [1,1]
out2 = odeint(my_ode_func2,Y0,t)

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

https://stackoverflow.com/questions/39387033

复制
相关文章

相似问题

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