Python中的ODE求解器出错

时间:2017-08-08 22:22:39

标签: python matplotlib scipy sympy ode

我正在使用Spark Combustion Engine模型,因为某些原因我使用python来模拟燃烧。我正在尝试使用ODE的求解器,但产量完全脱离现实。我发现圆柱体积的整合是错误的。我已经尝试过使用“odeint”和“ode”求解器,但结果是一样的。 该代码显示了带有theta的Volume的派生,并集成以查找卷。我把分析方程式进行比较。

OBS:我在使用Matlab时遇到了类似的问题,但当我尝试在三角函数中使用度数时。当我改变弧度时,问题就解决了。 代码如下:

from scipy.integrate import odeint
from scipy.integrate import ode
from scipy import integrate
import math
import sympy
from sympy import sqrt, sin, cos, tan, atan
from pylab import *
from RatesComp import *
V_real=np.zeros((100))

def Volume(V,theta):
   V_sol = V[0]
   dVdtheta = Vtdc*(r-1)/2 *( sin(theta) + eps/2*sin(2*theta)/sqrt(1-(eps**2)*sin(theta)**2))
   return [dVdtheta]

#Geometry
eps = 0.25;        #  half stroke to rod ratio, s/2l
r = 10;            #  compression ratio
Vtdc = 6.9813e-05  # volume at TDC

# Initial Conditions
theta0 = - pi
V_init =  0.0006283
theta = linspace(-pi,pi,100)
solve = odeint( Volume, V_init, theta)

# Analytical Result
Size = len(theta)

for i in range(0, Size,1):
    V_real[i] = Vtdc*(1+(r-1)/2*(1-cos(theta[i])+ 1/eps*(1-(1-(eps**2)*sin(theta[i])**2)**0.5)))

figure(1)
plot(theta, solve[:,0],label="Comput")
plot(theta, V_real[0:Size],label="Real")
ylabel('Volume [m^3]')
xlabel('CA [Rad]')
legend()
grid(True)
show()

我展示的无花果是圆柱体积。结果真实和计算

https://i.stack.imgur.com/MIoEV.png

有人可以提供有关此问题发生原因的信息吗?

2 个答案:

答案 0 :(得分:2)

显然你使用的是python2。在r=10声明r integer类型(r-1)/2会导致Vtdc中真实'}中的不需要的整数除法。解。在导数函数中,浮点值r=10.0作为产品中的第一个因子,之后整个产品评估是浮动的。

因此更改为(r-1.0)/2或使用0.5*(r-1)V_init = r*Vtdc

您还应将V_real(-pi)设置为<div class="row cover-row"> <div class="col-sm-8"> <img src="http://placehold.it/851x315" class="img-responsive" alt="Cover Photo"> </div> <div class="col-sm-4 profile-wrap"> <img src="http://placehold.it/200x200" class="img-responsive profile-pic" alt="Profile Picture"> </div> 的值。

答案 1 :(得分:0)

如果你在第一行使用python2 add:from __future__ import division根据文档使用Python3的分区:https://mail.python.org/pipermail/tutor/2008-March/060886.html

在python2中,当你划分两个整数值时,你会得到一个不是float的整数结果。如果没有大的代码更改,可能会解决您的问题。