Ask Your Question
0

How to correct them errors ?

asked 8 years ago

updated 8 years ago

slelievre gravatar image

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 ...
(more)
Preview: (hide)

Comments

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 ( 8 years ago )

Never mind, I did it.

slelievre gravatar imageslelievre ( 8 years ago )

1 Answer

Sort by » oldest newest most voted
1

answered 8 years ago

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.

Preview: (hide)
link

Comments

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

LordHorus gravatar imageLordHorus ( 8 years ago )
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.

slelievre gravatar imageslelievre ( 8 years ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 8 years ago

Seen: 262 times

Last updated: Nov 08 '16