Numerical methods
Annie Fournier-Gagnoud
                  Phelma 2016-2017
OUTLINE
●   Introduction
●   Programming with Matlab
         Introduction
         Algorithm
         Recommandations
         Matlab software
●   Ordinary Differential Equations ODE
●   Partial Differential Equations PDE
A. Fournier-Gagnoud     Numerical Methods 2016-2017   2
 Introduction
 To develop a program few steps are useful:
       Choice        of language,
       Design        the algorithm,
       Construct       the program,
       Test   the program step by step (sequence by
          sequence).
A. Fournier-Gagnoud           Numerical Methods 2016-2017   3
OUTLINE
●   Introduction
●   Matlab software
         Introduction
         Algorithm
         Recommendations
         Matlab
●   Ordinary Differential Equations ODE
●   Partial Differential Equations PDE
A. Fournier-Gagnoud     Numerical Methods 2016-2017   4
 ALGORITHM
     Algorithm = sequence of finite instructions, used
      for calculation and data processing
     Algorithms are essential in computational
      process
     Algorithm must be rigorously defined
     Algorithm is a precise list of precise steps
     Order of instructions must to be listed explicitly
A. Fournier-Gagnoud   Numerical Methods 2016-2017          5
 ALGORITHM DESIGN
Algorithm design is a specific method to create a
mathematical process in solving problems.
In a first step we must analyze the program to
solve a given problem.
We have to identify the input data, the output
data, to choice the variables.
A. Fournier-Gagnoud   Numerical Methods 2016-2017   6
                                                                 ….
                      Initialization of input data               …
   ALGORITHM DESIGN
                             Calculations
                                  …..
                                  …..                           Calculation 1
                                  .….
                                                                Calculation 2
                                                                  …
                           Saving results                         ….
                                                                  …
                       Graphic representation
A. Fournier-Gagnoud               Numerical Methods 2016-2017                   7
ALGORITHM DESIGN
        Main algorithm                         Function / subroutine
           Main steps
           of the calculation.                      Input parameters
           Main program                             Output parameters
           calls functions                          Successive Steps
           or subroutines
A. Fournier-Gagnoud          Numerical Methods 2016-2017                8
ALGORITHM DESIGN
   Iterative algorithms: repetitive constructs like loops to solve
   the given problems
   An algorithm may be viewed as controlled logical deduction:
   logical instruction
    Serial Algorithms: computers execute one instruction of an
    algorithm at a time
    Parallel algorithms: take advantage of computer architectures
    where several processors can work on a problem at the same
    time
A. Fournier-Gagnoud       Numerical Methods 2016-2017            9
OUTLINE
●   Introduction
●   Programming with Matlab
         Introduction
         Algorithm
         Recommendations
         Matlab software
●   Ordinary Differential Equations ODE
●   Partial Differential Equations PDE
A. Fournier-Gagnoud     Numerical Methods 2016-2017   10
RECOMMENDATIONS
   Planning the program
        a series of smaller, independent tasks
        each task as a separate function
   General Coding Practices
        variable names: easier to understand
        < 80th column
   Importance of comments %
   Coding in Steps
   Making Modifications in Steps
   Testing the Final Program
A. Fournier-Gagnoud       Numerical Methods 2016-2017   11
OUTLINE
●   Introduction
●   Programming with Matlab
         Introduction
         Algorithm
         Recommendations
         Matlab software
●   Ordinary Differential Equations ODE
●   Partial Differential Equations PDE
A. Fournier-Gagnoud     Numerical Methods 2016-2017   12
MATLAB
                      MATrix LABoratory
    Commercial software developed by the
    MathWorks Inc.
    Numerical calculations on vectors, matrices,
    real or complex
    Freeware : freemat, octave, scilab
    Unix, Linux, Windows implementation
A. Fournier-Gagnoud     Numerical Methods 2016-2017   13
MATLAB
       Interactive software system for numerical
       computations and graphics
       Matlab is designed for Matrix computations:
            Solving systems of linear equations
            Computing eigenvalues - eigenvectors
            Factoring matrices
A. Fournier-Gagnoud      Numerical Methods 2016-2017   14
Beginning with Matlab
    Start : double clicking the MATLAB shortcut
    Desktop MATLAB appears, Including
       Some          menus
               Help is very useful Getting Started
       Three         windows
                  Command window : Enter Matlab statements at the prompt
     Showing you what you type and the result produced
     At this level = Matlab is a pocket calculator
                 Files in the directory
A. Fournier-Gagnoud             Numerical Methods 2016-2017                 15
Beginning with Matlab
                                                           Command window
      Variable Window
                                                      Click on help/MATLAB help
                                                      To reach on line help
    Commands history
A. Fournier-Gagnoud     Numerical Methods 2016-2017                       16
MATLAB Help
                      Getting started
       Introduction
       Matrices      and Array
       Graphics
       Programming
       …….
A. Fournier-Gagnoud     Numerical Methods 2016-2017   17
Matlab : variables
    Variables are not declared prior
       Easy – convenient
       Careful users
       Good use of Malab is a difficult task.
    Basic data type : n-dimensional array of
     double precision numbers
A. Fournier-Gagnoud   Numerical Methods 2016-2017   18
Interactive system : vectors
  >>a=[1 4 8 ]
  a=
    1     4 8
  >>b=[3 ; 2 ]
  b=
    3
    2
  >>c=pi
A. Fournier-Gagnoud   Numerical Methods 2016-2017   19
    Matrix definition
  >>A=[1 1 1; 2 4 8; 3 9 27 ]
  A=
    1. 1. 1.                                       Matrix definition
    2. 4. 8.
                                       Each componant is separated by space
    3. 9. 27.
                                       Each line by ;
  >>A'                                                       '
   1. 2. 3.
                                                   Transposed Matrix
   1. 4. 9.                                  ' is the tranposition operator
   1. 8. 27.
A. Fournier-Gagnoud      Numerical Methods 2016-2017                          20
Calculation: vectors-matrices
>>a=[1 4 8 ]
>>b=[3 ; 2 ;5]
>>a*c
??? Undefined function or variable ‘c’
>>a*b
ans=54
>>A=b*a
A=
   3   12 24                              3                      3
   2   8 16             a  1 4 8 b  2        A  b  a  2  1 4 8
   5   20 40
                                               5              5
 A. Fournier-Gagnoud      Numerical Methods 2016-2017                        21
Calculation:
Matrix – Vector Product
>>b=[1 0 0 ];                                              No echo if ;
>>A*b
??? Error using ==> *                                                 |1 0 0|
   Inner matrix dimensions must agree.           | 1.      1.   1. |
>>A*b'                                           | 2.      4.   8. |
     1.
     2.
                                                 | 3.      9.   27. | =   ?
     3.
                                   Arithmetic operators + - * /
 A. Fournier-Gagnoud         Numerical Methods 2016-2017                        22
Linear system: solver
--> b= [1 0 0]’;
                                     transposed
--> x = A \ b
                               Resolution of A*x = b
x =
    3.0                       Verification that it runs !
  - 2.5
    0.5
A. Fournier-Gagnoud   Numerical Methods 2016-2017           23
Matrix and Vectors building
                         []                             [   ]
                           1                     1 2 3
 Defining a vector V: V = −2       a Matrix A:A= 2 −3 5
                           3                     4 −3 1
• Display the 2nd component of V
• Calculate norm of V (3 methods)
• Build the vector W such as W=A . V and G=V ^ W
•Display the 2nd line, 3rd column element of A matrix
•Display first column of A
•Display 2nd line of A
•Calculate determinant of A
•Solve A X = V (2 methods)
 A. Fournier-Gagnoud      Numerical Methods 2016-2017           24
Matrix and Vectors building
                                                   >> A=[1 2 3;2 -3 5;4 -3 1]
>> V=[1 -2 3]’     or   V=[1;-2;3]
                                                   >> A(2,3)
>> V(2)                                            ans =
ans =                                                 5
-2
                                                   >> A(:,1)
>> norm(V)                                         ans =
>> sqrt(V’*V)                                         1
>> sqrt(dot(V,V))                                     2
ans =                                                 4
3.7417
                                                   >> A(2,:)
                                                   ans =
                                                      2 -3         5
 A. Fournier-Gagnoud                 Numerical Methods 2016-2017                25
Matrix and Vectors building
>> W=A*V
W=
  6
 23
 13
>> G=cross(V, W)
 -30
  -6
   6
 A. Fournier-Gagnoud   Numerical Methods 2016-2017   26
Matrix and Vectors building
Build matrix T
Calculate with Matlab the dimension of T matrix
List of Matlab functions : zeros, ones, diag, eyes, size
                          2 -1     0  0 ....           0
                         -1 2      -1 0                0
                          0 -1     2 -1                0
                      T= 0                             0
                          0                           -1
                          0 ...     ..             -1 2
A. Fournier-Gagnoud           Numerical Methods 2016-2017   27
First program « Hello World ! »
    Program edition : File  New  M-file                  hello.m
   Saving : File  Save , write hello.m
 Matlab code interpretation with editor
 debug menu
 Or by typing the name of the program file,
 hello.m in the Matlab command window
 A. Fournier-Gagnoud         Numerical Methods 2016-2017             28
    Matlab variables
       All variables in Matlab are tables (matrices),
       Matlab is case sensitive
       variable names : I non equal to i
       Auto-declaration of variables when initialized
       Example :                                        Matlab comments
           t=0;                    % numeric variable
           s=‘Hello World’;       % table of characters variable
       Type Overloading of a variable is possible
A. Fournier-Gagnoud       Numerical Methods 2016-2017              29
    Matlab variables
A. Fournier-Gagnoud   Numerical Methods 2016-2017   30
                      Error !                                   Ok !
                                                      Look help informations for
                                                      zeros, ones et diag
A. Fournier-Gagnoud             Numerical Methods 2016-2017                        31
Variable: influence zone in program
                                       Initialization of the variable N
                                       Influence : from the
                                       Initialization until end of file
                                        No local declaration inside
                         !              a bloc !!!
                        Danger : ‘:’ and , in a ‘for Loop’
                        have not the same effects !
                         for i=1, 10
                              i
                         end;
  A. Fournier-Gagnoud     Numerical Methods 2016-2017              32
   Binary operators
                                                        binary operators
                                                      A<B
                                                      A>B
Operators :                             A && B
                                                      A <= B
                                        A || B
                                                      A >= B
 Arithmetic operators                                 A == B
 Logical operators                                    A ~= B
 Relational operators
A. Fournier-Gagnoud     Numerical Methods 2016-2017                       33
   Control structures
                              compare.m
Condition :
   if
                                                           Enter
                 true                                      i & j
   i<j ?
                false                                 Block of instructions
A. Fournier-Gagnoud     Numerical Methods 2016-2017                      34
                                                     When different instructions
     Conditional connection                          have to be executed according
                                                     tochoice2.m
                                                        a variable value
            choice1.m                                In replacement of
                                                     ‘if, elseif, else, end’
                                                     control structure
no break instruction in a
block case as in C++!
  A. Fournier-Gagnoud       Numerical Methods 2016-2017                         35
Loops
                  loop1.m
                                                          loop2.m
A. Fournier-Gagnoud         Numerical Methods 2016-2017             36
Loops
             loop3.m                                   sum1.m
                                                                What is calculated ?
 Break : loop breaking
A. Fournier-Gagnoud      Numerical Methods 2016-2017                             37
Mathematical functions
   |x|                 abs(x)
   arctg x             atan(x)
   cos x               cos(x)
   exp x               exp(x)
   ln x                log(x)
   log x               log10(x)
       x               sqrt(x)
     y
                                            C&
   x                   x^y                  C++
 A. Fournier-Gagnoud            Numerical Methods 2016-2017   38
Mathematical functions
                                                  : continuation following line
                                          num2str : numeric conversion  string
   i ≡ sqrt(-1.)
 A. Fournier-Gagnoud   Numerical Methods 2016-2017                                   39
Writing a function
      % Solving a linear system
                                                % comments
  function [x]=resolution(A, b)           Entries are separated by a comma
  x = A\b;
                                         Outputs separated by a comma
  • Save in a file with “resolution.m” name for example
  • In matlab, select “resolution.m” with the menu : file  open
  • Call the resolution function from the Matlab command window :
             x = resolution(A, b)
A. Fournier-Gagnoud         Numerical Methods 2016-2017                  40
 Writing a function
function linsolver                             linsolver is the principal function
A=[1 2 3;2 -3 5;4 -3 1]
                                               calling the resolution function
b=[1 -2 3]'
[x, ier]=resolution(A, b)
if (ier)
    error('Pb resolution');
end;
% solving a linear system                        Conditional instruction
function [x, res]=resolution(A, b)               if (condition)
if (det(A)==0)                                        bloc;
     res=1;             determinant              else
     x=0;                                             bloc;
else                                             end
     res=0;
     x=A\b;                                      What happens if det(A)=0 ?
end
A. Fournier-Gagnoud    Numerical Methods 2016-2017                          41
Graphical functions
    For x[-50,50], calculate f=x*sin(x) and draw f(x)
    List of Matlab functions : plot, xlabel, ylabel, title, grid on
  x = linspace(-50,50,100);
  y = x*sin(x);
  plot(x,y)
  hold on
  title('Graph of f=x*Sine')
  xlabel(' x ')              % x-axis label
  ylabel('f(x)=x*sin(x)')    % y-axis label
A. Fournier-Gagnoud           Numerical Methods 2016-2017             42
       Graphical functions
  For [0,2] et [0, ] calculate e=sin()^4*cos(2*)
  Present e(, ) with a surface and isovalues of e(, ) as contour lines
  List of Matlab functions : meshgrid, surf, contour
% Isovalues
clc
close all                                  figure
                                           colormap(jet)
[phi,tet]=meshgrid(0:0.02:2*pi,0:0.01:pi); [c,h]=contour(phi,tet,e,v);
 e=sin(tet).^4.*cos(2*phi);                set(h,'ShowText','on','TextStep',...
                                              get(h,'LevelStep')*2);
% Fixed Isovalues
v=-1.:0.2:1;                                     figure
                                                 colormap(jet)
colormap([0 0 0])                                h=surf(phi,tet,e);
[c,h]=contour(phi,tet,e,v);                      shading interp
set(h,'ShowText','on','TextStep',...
   get(h,'LevelStep')*2);
   A. Fournier-Gagnoud        Numerical Methods 2016-2017                    43
Simplified Man-Machine-Interface
Example n°1
                  choice_list ={'banana', 'pear', 'apple', 'cherry'}
                  [rg, ok] = listdlg('PromptString','Select a fruit ?',...
                                  'SelectionMode','single',...
                                  'ListString', choice_list,...
                                  'InitialValue',2,...
                                  'listSize',[400 80],...
                                  'Name','dialogue');
                  choice_list{rg}
                  ok % =1 if OK, =0 if CANCEL
 A. Fournier-Gagnoud           Numerical Methods 2016-2017                   44
Simplified Man-Machine-interface
 Example n°2
               nb_lignes=1;
               val_defaut={'293'};
               txt = inputdlg('temperature' ,‘window_title, ...
                   nb_lignes, val_defaut);
               T=str2double(txt) % convert a string into a real
 A. Fournier-Gagnoud        Numerical Methods 2016-2017           45
     Structures
Point in 2D coordinates
                      M.x=input('abscisse du point : ');
   x                  M.y=input('ordonnee du point : ');
   y                  disp(M);
A. Fournier-Gagnoud       Numerical Methods 2016-2017   46
                               M.x=input('abscisse du point : ');
                               M.y=input('ordonnee du point : ');
Structures
                               disp(M);
 Point in 2D coordinates
Automatic declaration and
Dynamic memory allocation
of a table composed of point
structures
 A. Fournier-Gagnoud       Numerical Methods 2016-2017         47
              Reading a Point table in a file
Objective: filling a data structure ‘tab’ from the data file ‘tab.dat’
    Number of points           ‘ tab.dat’                      t=
    63
    Coordinates_of_points                                       NP: 63
       1 -3.1415927e+000 -1.2246468e-016                        x: [1x63 double]
       2 -3.0415927e+000 -9.9833417e-002
                                                                y: [1x63 double]
       3 -2.9415927e+000 -1.9866933e-001
       4 -2.8415927e+000 -2.9552021e-001
       5 -2.7415927e+000 -3.8941834e-001
       6 -2.6415927e+000 -4.7942554e-001
       7 -2.5415927e+000 -5.6464247e-001
       8 -2.4415927e+000 -6.4421769e-001
       9 -2.3415927e+000 -7.1735609e-001
    …
    63 3.0584073e+000 8.3089403e-002
   A. Fournier-Gagnoud           Numerical Methods 2016-2017                       48
function [tab, err]=reading(nomfich)
clear tab;
fich = fopen(nomfich);
if ( fich == -1 )
      errordlg([‘Invalid file name : ' nomfich]); % !!does not stop
      err = 1;
else
     % reading the comment
     comment = fscanf(fich, '%s', [1])
     % reading the number of points
     tab.NP = fscanf(fich,'%d', [1]) % [1] only one scalar value
     % reading the comment                            function tab_point1
     comment = fscanf(fich, '%s', [1])                clc
                                                      nom='tab.dat'
     % reading point coordinates                      [t, ier]=reading(nom);
     for np=1:tab.NP                                  if (ier==1)
          n = fscanf(fich,'%d', [1])                      error(‘reading error);
                                                      end;
          x = fscanf(fich,'%g', [1])
          y = fscanf(fich,'%g', [1])
                                                      plot(t.x, t.y)
          tab.x(n)=x;
          tab.y(n)=y;                                      t=
     end;                                                    NP: 63
     err = 0;
end;                                                          x: [1x63 double]
 A. Fournier-Gagnoud         Numerical Methods 2016-2017                           49
fclose(fich);                                                 y: [1x63 double]
    Reading a Point table in a file
           Objective :
           Filling a data structure ‘curve’ reading the data file ‘tab.dat’
    curve=                                 curve.NP = 63
    NP: 63
    M: [1x63 struct]                        curve.M =
                                            1x63 struct array with fields:
                                              x
                                              y
curve.M(i) donne accès au ième point M(i) :
  for ex.          curve.M(1) =                           curve.M(1).x =
                     x: -3.1416
                     y: -1.2246e-016                           -3.1416
   A. Fournier-Gagnoud           Numerical Methods 2016-2017                  50
function [curve, err]=reading(nomfich)
clear curve;
fich = fopen(nomfich);
if ( fich == -1 )
      errordlg([‘incorrect file name : ' nomfich]); % !! Does not stop
      err = 1;
else
     % reading a comment
     comment = fscanf(fich, '%s', [1])
    % reading the number of points =
    curve.NP = fscanf(fich,'%d', [1]) % [1] only one scalar value
    % reading a comment
    comment = fscanf(fich, '%s', [1])
                                               function tab_point2
    % reading points coordinates               clc
    for np=1:curve.NP                          nom='tab.dat'
         n = fscanf(fich,'%d', [1])            [curve, ier]=reading(nom);
         x = fscanf(fich,'%g', [1])            if (ier==1)
         y = fscanf(fich,'%g', [1])                error(‘error reading’);
         curve.M(n).x=x;                       end;
         curve.M(n).y=y;
    end;                                          for i=1:curve.NP
    err = 0;                                           x(i)=curve.M(i).x;
end;                                                   y(i)=curve.M(i).y;
fclose(fich);                                     end;
A. Fournier-Gagnoud                               plot(x, y)
                             Numerical Methods 2016-2017                     51
MATLAB
Website:
http://www.mathworks.com/academia/student_center/t
  utorials/starting_matlab.html
   On this web site read the different tutorials
    and stop after: Creating scripts with
    MATLAB Editor/Debugger
   Two important points:
       Visualizingdata
       Creating scripts with MATLAB Editor/Debugger
A. Fournier-Gagnoud   Numerical Methods 2016-2017      52
MATLAB
  Indocumentation MATLAB
  Getting started
    IntroductionDocumentationProgramming
    fundamental Functions and scripts
     In this part the 5 sequences are very
       important:
          Program      Development
              Working with M-files
              M-files Scripts and Functions
              Calling Functions
              Function Arguments
A. Fournier-Gagnoud       Numerical Methods 2016-2017   53