Ask Your Question
0

How to correct them errors ?

asked 2016-10-25 17:28:52 -0500

updated 2016-11-08 05:41:00 -0500

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)
edit retag flag offensive close merge delete

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 ( 2016-11-04 12:12:33 -0500 )edit

Never mind, I did it.

slelievre gravatar imageslelievre ( 2016-11-08 05:41:05 -0500 )edit

1 answer

Sort by » oldest newest most voted
1

answered 2016-10-25 20:04:27 -0500

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.

edit flag offensive delete link more

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 ( 2016-10-27 14:50:29 -0500 )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.

slelievre gravatar imageslelievre ( 2016-11-08 05:39:41 -0500 )edit

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: 2016-10-25 17:28:52 -0500

Seen: 57 times

Last updated: Nov 08 '16