在python中遇到odeint问题

时间:2014-04-12 04:59:26

标签: python scipy ode integrate odeint

我正在尝试编写一个脚本来解决ODE in python并绘制结果图。我正在使用scipy.integrate.odeint执行此任务。我按照一个简单的教程修改了我的代码,以便与我想解决的ODE一起工作

import numpy as np
import matplotlib.pyplot as plt
import pylab as plb
from scipy.integrate import ode as odeint
from math import pi

t = np.arange(2, 67., 0.01)

#these are just some values I need for my function
p=2.7 * (10**3)     #kg/m^3   density
V=pi * 0.3042 * ((0.0251 / 2)**2)          #Volume m^3
C=904        #heat capacity J/kgK
A=pi * ((0.0251 / 2)**2)         #Cross sectional area m^2
e= 3490000      #emmisitivy 
b=5.6704 * (10** -8)     #boltzmans
D=0.251         #diameter m
T= 21.2        #ambient temp
# initial condition
x0 = 76

plt.clf()

def f(x, t, p, V, C, A, e, b, D, T):
    y=(1/(p*V*C)) * (A*e*b*np.power(T, 4) - (A*e*b*np.power(x, 4)) - ((1.32*A)/(D**0.25))*(np.power((x-T), 1.25)))
    return y

x = odeint(f, x0, t, (p, V, C, A, e, b, D, T))

# plot the numerical solution
plt.plot(t, x)
plt.xlabel('Time (min)') 
plt.ylabel('Temperature (Celsius)') 
plt.title('Temperature vs Time for a Rough Rod')

# plot empirical data
data = plb.loadtxt('rough.csv', skiprows=2)

x = data[:,0]
y = data[:,1]
sigma = data[:,2]

plt.errorbar(x, y, sigma, linestyle='', fmt='.')

plt.legend(['Numerical Solution', 'Data Points'], loc='best') 

plt.show()

这个代码完全适用于像-x这样的简单函数,但问题是它对我在那里使用的函数不起作用。我可以从这个方法中得到一个情节,但是我得到了相同的情节,无论我使用

y=(1/(p*V*C)) * (A*e*b*np.power(T, 4) - (A*e*b*np.power(x, 4)) - ((1.32*A)/(D**0.25))*(np.power((x-T), 1.25)))

y=(1/(p*V*C)) * (A*e*b*pow(T, 4) - (A*e*b*pow(x, 4)) - ((1.32*A)/(D**0.25))*(pow((x-T), 1.25)))

y=(1/(p*V*C)) * (A*e*b*np.power(T, 4) - (A*e*b*np.power(x, 4))

我认为即使这样也给了我相同的情节

y=(1/(p*V*C)) * ((-A*e*b*np.power(x, 4))

另外,我的e值应该介于0和1之间,但是我必须使用巨大的数字来获得看起来像指数衰减的东西。我基本上试图这样做:sfu.ca/~rca10/rants/convection.pdf。有问题的ODE位于第4页的顶部。如果链接中的人可以使用正常的发射率,我不能,即使用相同的值解决相同的ODE(我正在做同样的实验室)

我到底做错了什么?

1 个答案:

答案 0 :(得分:2)

我认为您的import语句中存在错误:

from scipy.integrate import ode as odeint

应该是:

from scipy.integrate import odeint

其余的应该有效。由于我没有您的输入文件(' rough.csv')我无法重现您的图表。