如何将ODE23从Matlab转换为Python

如何将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

我目前正在尝试将我的代码从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-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
的方式似乎相同。