I've some problems with modelization of differential equations

asked 2016-10-24 14:38:23 +0100

updated 2016-11-04 18:09:24 +0100

slelievre gravatar image

Hi ! I've a project in mathematics and I'm supposed to modelize 5 functions according to various parameters that vary (hence the use of sliders). But I can't because it is highly developed functions and I had no lessons on this program. I give you the code which gives me this error:

  File "<ipython-input-1-943112df05f1>", line 30
    T.ode_solve( y_0=[lambda,Integer(0),Integer(1)-lambda,Integer(0)] , t_span=[Integer(0),Integer(150)] , params=[nu,d,B,v,c,p,beta] , num_points=Integer(1000))
                            ^
SyntaxError: invalid syntax

Code

# y[0] = X : – B - nuX - (lambda)cX
# y[1] = Y : (lambda)cX - (v + nu)Y
# y[2] = Z : (1 - p)vY - nuZ
# y[3] = A : pvY - (d + nu)A
# y[4] = lambda : ((beta)Y / (X + Y + Z))
# params[0] = nu : natural death rate == 0.03125
# params[1] = d : AIDS death rate == 1
# params[2] = B : immigration rate of people likely == 13333.3
# params[3] = v : conversion rate HIV-> AIDS == 0.2
# params[4] = c : number of sexual partners == 4
# params[5] = p : infectious HIV-positive proportion == 0.3
# params[6] = beta : probability of transmission == 0.014
# t : temps

@interact
def interactive_function(nu = slider(0.01, 0.1, 0.005, default=0.03125),
                         d = slider(0, 1, 0.05, default=1),
                         B = slider(500, 30000, 250, default=13333),
                         v = slider(0, 1, 0.05, default=0.2),
                         c = slider(0, 50, 1, default=4),
                         p = slider(0, 1, 0.05, default=0.3),
                         beta = slider(0, 1, 0.002, default=0.014),):

    def f_1(t,y,params) :
        return [ -params[2]-params[0]*y[0]-y[4]*params[4]*y[0] , y[4]*params[4]*y[0]-(params[3]+params[0])*y[1], (1-params[5])*params[3]*y[1]-params[0]*y[2], params[5]*params[3]*y[1]-(params[1]+params[0])*y[3], (params[6]*y[1])/(y[0]+y[1]+y[2]) ]

    T = ode_solver()
    T.function = f_1
    T.algorithm="rk8pd"
    T.ode_solve( y_0=[lambda,0,1-lambda,0] , t_span=[0,150] , params=[nu,d,B,v,c,p,beta] , num_points=1000 )

    f = T.solution
    X = [(x[0],x[1][0]) for x in f]
    Y = [(x[0],x[1][1]) for x in f]
    Z = [(x[0],x[1][2]) for x in f]
    A = [(x[0],x[1][3]) for x in f]
    lambda = [(x[0],x[1][4]) for x in f]

    P1 = line(X, rgbcolor='green')
    P2 = line(Y, rgbcolor='pink')
    P3 = line(Z, rgbcolor='red')
    P4 = line(A, rgbcolor='brown')
    P5 = line(lambda, rgbcolor='green')
    show(P1+P2+P3+P4+P5)

Thanks for the help you can bring to me !

Cordially, LordHorus.

PS = Sorry if my english can be wrong, I'm french :p

edit retag flag offensive close merge delete

Comments

2

lambda is a reserved word in Python, so you can't use it as a variable name: pick another one.

You're trying to use lambda in the initial conditions for the system of differential equations, but then define it in terms of the solution. That's circular logic.

paulmasson gravatar imagepaulmasson ( 2016-10-24 23:05:20 +0100 )edit

Oh true, sorry x) But then I got them errors :/

http://www.noelshack.com/2016-43-1477344904-sans-titre.png (http://www.noelshack.com/2016-43-1477...)

LordHorus gravatar imageLordHorus ( 2016-10-24 23:34:34 +0100 )edit

@LordHorus, to display blocks of code, either indent them with 4 spaces, or select the corresponding lines and click the "code" button (the icon with '101 010').

Can you edit your question to do that?

slelievre gravatar imageslelievre ( 2016-10-27 15:18:03 +0100 )edit

It's ok, paulmasson helped me on another post, thanks anyways ! :)

LordHorus gravatar imageLordHorus ( 2016-10-27 21:51:17 +0100 )edit

Okay, I'll do it for you. Please click the "edit" button to see the difference.

You can then do the same to properly display code in future questions.

slelievre gravatar imageslelievre ( 2016-11-04 18:08:39 +0100 )edit