繁体   English   中英

常微分方程指标误差

[英]Ordinary differential equation index error

我开始学习Python(这是我第一次尝试python脚本)。 我正在尝试求解,然后绘制一系列微分方程,这些微分方程显示出以下方程式h2o + co2 <-> o2 + ch2o中的化合物浓度如何关联。

但是,当我运行脚本时:

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import math

y=[3.0,1.0,3.0,1.0]
g=15 
i=25 
tspan= np.linspace(0,5,100)

# h2o+co2 <-> o2+ch2o
def chemanalysis(y,t):

    x =i*math.sin(math.pi*t/12)**2

    dydt= -x*(y[0]*y[1]) + g*(y[2]*y[3]) #co2
    dydt= -x*(y[0]*y[1]) + g*(y[2]*y[3]) #h2o
    dydt= x*(y[0]*y[1])  - g*(y[2]*y[3]) #o2
    dydt= x*(y[0]*y[1])  - g*(y[2]*y[3]) #ch2o


    return dydt


y=odeint(chemanalysis,1,tspan)

print(y)

我收到以下错误:

Traceback (most recent call last):
File "first.py", line 25, in <module>
        y=odeint(chemanalysis,1,tspan)
        ixpr, mxstep, mxhnil, mxordn, mxords)
      File "first.py", line 16, in chemanalysis
        dydt= -x*(y[0]*y[1]) + g*(y[2]*y[3]) #co2
    IndexError: index 1 is out of bounds for axis 0 with size 1

我知道这可能是由于我缺乏一般的python /编程经验而引起的一个非常直接的问题。 对于我在哪里出错或可以改进此代码的任何帮助,我将非常感谢。 我已经在其他线程上阅读了其他一些类似的问题/错误消息,但是我自己却无法解决问题。 我知道该脚本目前没有图形组件,我想我会等到首先解决此问题。

问候

您要在这里做两件事:

y=odeint(chemanalysis, 1, tspan)更改为y2=odeint(chemanalysis, y, tspan)

为了使odeint正常工作,您需要返回一个与y大小相同的列表。

def chemanalysis(y,t):
    x =i*math.sin(math.pi*t/12)**2

    dydt = []

    dydt.append(-x*(y[0]*y[1]) + g*(y[2]*y[3])) #co2
    dydt.append(-x*(y[0]*y[1]) + g*(y[2]*y[3])) #h2o
    dydt.append(x*(y[0]*y[1])  - g*(y[2]*y[3])) #o2
    dydt.append(x*(y[0]*y[1])  - g*(y[2]*y[3])) #ch2o


    return dydt

我们可以使它看起来更蟒蛇,但为了简洁起见。


为什么你需要用多一点的解释appendchemanalysis

dydt= -x*(y[0]*y[1]) + g*(y[2]*y[3]) #co2
dydt= -x*(y[0]*y[1]) + g*(y[2]*y[3]) #h2o
dydt= x*(y[0]*y[1])  - g*(y[2]*y[3]) #o2
dydt= x*(y[0]*y[1])  - g*(y[2]*y[3]) #ch2o

return dydt

上面的代码只是将dydt返回为最后分配的值#ch2o ,您会丢失其他数据并每次都重写dydt 而是将其列出,这是odeint要求您执行的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM