如何将ODE23从Matlab转换为Python
我目前正在尝试将我的代码从MATLAB翻译成Python。我遇到的问题是如何将ODE翻译成Python。我在互联网上读到,我可以使用scipy.integrate.ode/scipy.integrate.odeint来实现这一点。不幸的是,我不能以我想要的方式得到它 我的MATLAB代码如下:如何将ODE23从Matlab转换为Python,python,matlab,ode,Python,Matlab,Ode,我目前正在尝试将我的代码从MATLAB翻译成Python。我遇到的问题是如何将ODE翻译成Python。我在互联网上读到,我可以使用scipy.integrate.ode/scipy.integrate.odeint来实现这一点。不幸的是,我不能以我想要的方式得到它 我的MATLAB代码如下: function [W] = PSFFA_MM1 (arrivalRate, serviceRate) tspan = 1:1:96; ic = 0; opts = odeset('RelTol',1e
function [W] = PSFFA_MM1 (arrivalRate, serviceRate)
tspan = 1:1:96;
ic = 0;
opts = odeset('RelTol',1e-2,'AbsTol',1e-4);
[t,x] = ode23(@(t,x) myode(t,x,arrivalRate, serviceRate), tspan,ic,opts);
function dxdt = myode(t,x,lambda, MU)
l = interp1(lambda, t);
mu = interp1(MU, t);
dxdt = -mu*(x/(x+1)) +l;
end
W = x./arrivalRate;
end
我的Python代码如下所示:
def interpolation(rates, point):
a = math.floor(point)
b = math.ceil(point)
c = point
return rates(a) + (c-a) / (b-a) * (rates(b) - rates(a))
def myode(t,x,lamda, MU):
l = interpolation(lamda, t)
mu = interpolation(MU,t)
dxdt = -mu * (x / (x+1)) + l
return dxdt
def PSFFA_MM1(arrivalRate, serviceRate):
timeSpan = np.linspace(1,1,96)
c = 0
x = scipy.integrate.odeint(myode(t,x,arrivalRate,serviceRate))
x = odeint(myode, ic, timeSpan)
W = x/arrivalRate
return W here
我正在努力解决的一个问题是,在MATLAB中不需要显式指定“x”,而这必须在Python中专门指定
我知道没有具体的问题,但我希望有人能进一步帮助我。我想我不太确定您在寻找什么,如果您正在寻找一个类似于Matlab的ode23的解算器,那么odeint就不是了。有一个ode包为您提供与ode23相同类型的集成器,称为ODEPY,但odeint集成器使用不同的集成方法。您在谈论哪个
x
?在这两种情况下,向积分器提供x
的方式似乎相同。