如何将ODE23从Matlab转换为Python

时间:2016-09-27 11:05:13

标签: 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-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中专门指定。

我知道确实没有具体的问题,但我希望有人可以帮助我。

0 个答案:

没有答案