# How to correct them errors ?

Hi ! I've to type a code for a math project with SageMath but I don't know really how it works because I don't learnt to use it. So I already typed this (with the help of another people) and it returns them errors :/ Sorry for the indentation but on this website it's hard to put properly the code.

Code

# y[0] = X : – B - nuX - (lmd)cX
# y[1] = Y : (lmd)cX - (v + nu)Y
# y[2] = Z : (1 - p)vY - nuZ
# y[3] = A : pvY - (d + nu)A
# y[4] = lmd : ((beta)Y / (X + Y + Z))
# params[0] = nu : natural death rate == 0.03125
# params[1] = d : AIDS death rates == 1
# params[2] = B : immigration rate 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 : transmission probability == 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=[lmd,0,1-lmd,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]
lmd = [(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(lmd, rgbcolor='green')
show(P1+P2+P3+P4+P5)


Errors

Interact state: {'c': 4, 'B': 51, 'd': 20, 'p': 6, 'beta': 7, 'v': 4, 'nu': 4}
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-1-9ebe0a9051da> in <module>()
20                          c = slider(Integer(0), Integer(50), Integer(1), default=Integer(4)),
21                          p = slider(Integer(0), Integer(1), RealNumber('0.05'), default=RealNumber('0.3')),
---> 22                          beta = slider(Integer(0), Integer(1), RealNumber('0.002'), default=RealNumber('0.014')),):
23
24     def f_1(t,y,params) :

/home/sc_serv/sagecell/misc.pyc in my_wrap(*args, **kwargs)
153         if len(kwargs)==0 and len(args)==1 and callable(func):
154             # call without parentheses
--> 155             return func(*args)
156         else:
157 ...
edit retag close merge delete

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?

( 2016-11-04 18:12:33 +0200 )edit

Never mind, I did it.

( 2016-11-08 12:41:05 +0200 )edit

Sort by » oldest newest most voted

There are two problems here: you're trying to use lmd as an initial condition for the system of differential equations but then defining it in terms of the solution, and you don't have enough initial conditions. Assuming the initial conditions should be given in terms of the initial value of lmd, here's an example that works without error messages:

@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]) ]

lmd0 = 1

T = ode_solver()
T.function = f_1
T.algorithm="rk8pd"
T.ode_solve( y_0=[lmd0,0,1-lmd0,0,lmd0] , 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]
lmd = [(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(lmd, rgbcolor='green')
show(P1+P2+P3+P4+P5)


Here's a live example with which you can experiment.

more

Oh ok I'll try to understand how it works really because I've to explain this x) Thanks a lot for this savior help ! :p

( 2016-10-27 21:50:29 +0200 )edit
1

@LordHorus, if this answers your question, please click the check mark next to it. This will mark the answer as answering your question, and it will mark your question as answered.

( 2016-11-08 12:39:41 +0200 )edit