odes.org
author asokan <asokan@fossee.in>
Tue, 18 May 2010 15:40:17 +0530
changeset 126 2eac725a5766
parent 116 8b650688f4e1
permissions -rw-r--r--
changes to array.txt
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     1
* Solving ODEs
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     2
*** Outline
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     3
***** Introduction
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     4
******* What are we going to do?
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     5
******* How are we going to do?
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     6
******* Arsenal Required
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     7
********* working knowledge of arrays
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     8
********* working knowledge of functions
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
     9
*** Script
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    10
    Welcome friends. 
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    11
    
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    12
    In this tutorial we shall look at solving Ordinary Differential Equations,
88
cc4f615f3f8c Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 86
diff changeset
    13
    ODE henceforth using odeint in Python. In this tutorial we shall be using
116
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
    14
    the concepts of arrays, functions and lists which we have covered in 
88
cc4f615f3f8c Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 86
diff changeset
    15
    previous tutorials.
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    16
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    17
    Let's consider the classic problem of the spread of an epidemic in a
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    18
    population.
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    19
    This is given by the ordinary differential equation dy/dt = ky(L-y) 
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    20
    where L is the total population and k is an arbitrary constant. For our
116
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
    21
    problem Let us use L=250000, k=0.00003.
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    22
    Let the boundary condition be y(0)=250.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    23
88
cc4f615f3f8c Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 86
diff changeset
    24
    Let's now fire up IPython by typing ipython -pylab interpreter.    
84
417992d2711e Changes to ode.org file.
Shantanu <shantanu@fossee.in>
parents: 14
diff changeset
    25
    
116
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
    26
    As we saw in one of the earlier sessions, sometimes we will need more than 
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
    27
    pylab to get our job done. For solving 'ordinary differential equations'
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
    28
    we shall have to import 'odeint' function, which is a part of the SciPy package.
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    29
    So we run the magic command:
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    30
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    31
    In []: from scipy.integrate import odeint
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    32
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    33
    The details regarding `import' shall be covered in a subsequent tutorial.
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    34
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    35
    We can represent the given ODE as a Python function.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    36
    This function takes the dependent variable y and the independent variable t
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    37
    as arguments and returns the ODE.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    38
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    39
    Let us now define our function.
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    40
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    41
    In []: def epid(y, t):
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    42
      ....     k = 0.00003
116
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
    43
      ....     L = 250000
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    44
      ....     return k*y*(L-y)
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    45
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    46
    Independent variable t can be assigned the values in the interval of
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    47
    0 and 12 with 61 points using linspace:
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    48
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    49
    In []: t = linspace(0, 12, 61)
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    50
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    51
    Now obtaining the solution of the ode we defined, is as simple as
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    52
    calling the Python's odeint function which we just imported:
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    53
    
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    54
    In []: y = odeint(epid, 250, t)
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    55
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    56
    We can plot the the values of y against t to get a graphical picture our ODE.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    57
84
417992d2711e Changes to ode.org file.
Shantanu <shantanu@fossee.in>
parents: 14
diff changeset
    58
    plot(y, t)
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    59
    Lets now close this plot and move on to solving ordinary differential equation of 
84
417992d2711e Changes to ode.org file.
Shantanu <shantanu@fossee.in>
parents: 14
diff changeset
    60
    second order.
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    61
    Here we shall take the example ODEs of a simple pendulum.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    62
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    63
    The equations can be written as a system of two first order ODEs
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    64
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    65
    d(theta)/dt = omega
84
417992d2711e Changes to ode.org file.
Shantanu <shantanu@fossee.in>
parents: 14
diff changeset
    66
    
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    67
    and
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    68
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    69
    d(omega)/dt = - g/L sin(theta)
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    70
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    71
    Let us define the boundary conditions as: at t = 0, 
84
417992d2711e Changes to ode.org file.
Shantanu <shantanu@fossee.in>
parents: 14
diff changeset
    72
    theta = theta naught = 10 degrees and 
417992d2711e Changes to ode.org file.
Shantanu <shantanu@fossee.in>
parents: 14
diff changeset
    73
    omega = 0
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    74
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    75
    Let us first define our system of equations as a Python function, pend_int.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    76
    As in the earlier case of single ODE we shall use odeint function of Python
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    77
    to solve this system of equations by passing pend_int to odeint.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    78
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    79
    pend_int is defined as shown:
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    80
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    81
    In []: def pend_int(initial, t):
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    82
      ....     theta = initial[0]
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    83
      ....     omega = initial[1]
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    84
      ....     g = 9.81
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    85
      ....     L = 0.2
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    86
      ....     f=[omega, -(g/L)*sin(theta)]
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    87
      ....     return f
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    88
      ....
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    89
84
417992d2711e Changes to ode.org file.
Shantanu <shantanu@fossee.in>
parents: 14
diff changeset
    90
    It takes two arguments. The first argument itself containing two
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    91
    dependent variables in the system, theta and omega.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    92
    The second argument is the independent variable t.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    93
86
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    94
    In the function we assign the first and second values of the
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    95
    initial argument to theta and omega respectively.
a63a14de8584 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 84
diff changeset
    96
    Acceleration due to gravity, as we know is 9.81 meter per second sqaure.
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    97
    Let the length of the the pendulum be 0.2 meter.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    98
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
    99
    We create a list, f, of two equations which corresponds to our two ODEs,
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   100
    that is d(theta)/dt = omega and d(omega)/dt = - g/L sin(theta).
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   101
    We return this list of equations f.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   102
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   103
    Now we can create a set of values for our time variable t over which we need
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   104
    to integrate our system of ODEs. Let us say,
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   105
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   106
    In []: t = linspace(0, 20, 101)
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   107
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   108
    We shall assign the boundary conditions to the variable initial.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   109
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   110
    In []: initial = [10*2*pi/360, 0]
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   111
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   112
    Now solving this system is just a matter of calling the odeint function with
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   113
    the correct arguments.
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   114
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   115
    In []: pend_sol = odeint(pend_int, initial,t)
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   116
116
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
   117
    In []: plot(pend_sol)
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
   118
    This gives us 2 plots. The green plot is omega vs t and the blue is theta vs t.
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   119
116
8b650688f4e1 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 88
diff changeset
   120
    Thus we come to the end of this tutorial. In this tutorial we have learnt how to solve ordinary
88
cc4f615f3f8c Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 86
diff changeset
   121
    differential equations of first and second order.
14
4182c6c7e1c6 Added script on ODEs, session 6 of our workshop.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 2
diff changeset
   122
2
008c0edc6eac Added scripts for session-4 and session-6 of day-1.
Puneeth Chaganti <punchagan@gmail.com>
parents:
diff changeset
   123
*** Notes