%NOTES

MATLAB Preliminaries

Matlab File types
  Scripts    are used for storing several executable statements.
  Functions  are used for functions and subroutines.
  MAT-files  are used for storing data.

Editing

  The command window.
  
1. The command window is used for immediate mode entering and display 
   of variables and execution of a MATLAB command. 

2. The command window is used for execution of a functions, subroutines 
   and programs that are stored in an  M-File .

  The edit window.
  
1. The edit window is write and edit functions, subroutines and programs 
   which are to be stored in an  M-File. 

  The graph window

1. The graph window is used to view plotted data.

Diary
  Diary <filename>  directs output to the file
  Diary off         suspends the diary
  Diary on          turns diary on again

Conservation of resources

  Most numerical experiments involve columns of numbers which might extend 
several pages.  It is not necessary to see all of the computations in a project.
Judicious use of diary and files commands such as X(1:5:N) will reduce the 
amount of paperwork.  Before you hand in a project, determine how little is required.


Obtaining Help

  HELP topic  gives help on the topic.
  HELP word  where 'word' is a filename, 
          displays the first comment lines in the M-file 'word.m'.

Housekeeping

  ;      Place at the end of line to suppress the computer echo.
  ,      Used at the end of a line if the computer echo is desired.
  %      This is a comment.

  format short        output displays four decimal places
  format long         output displays fourteen decimal places
  who                 list of variables
  what                list of files
  clear               clear workspace
  clear variables     clear variables
  clear functions     clear functions
  clc                 clear display
  clg                 clear graph

Assignment Statements

  Èx = 2;
  Èy = x^2 -3*x + 2;

Form of a MATLAB Program M-File of executable statements

%  <program-name>
{<specification-statements>}
{<executable-statements>}

Form of a MATLAB Subroutine M-File

function (output-list) = <subroutine-name> (argument-list)
{<specification-statements>}
{<executable-statements>}

Example, store the following subroutine in the M-file;  sroot.m

function  r = sroot(A)
% Newton's method to find  A^(1/2)
p0 = 1;                             % Starting value.
for k=1:50,
  p1 = (p0+A/p0)/2;
  disp(p1);
  if abs(p1-p0)/p1 < eps, break, end;
  p0 = p1;
end

Form of a function (or subroutine) call.

È  sroot(5)

   3
   2.33333333333333
   2.23809523809524
   2.23606889564336
   2.23606797749998
   2.23606797749979
   2.23606797749979


Form of a MATLAB function M-File

function <output-list> = <function-name> (argument-list)
{<specification-statements>}
{<executable-statements>}
<output-name> = <returned computation>

  Store the following functions in the M-files:  f.m  and  G.m

function y = f(x)
y = exp(-x./10) + sin(x);

function W = G(Z)       % Z is a 1 by 2 vector
x = Z(1);
y = Z(2);
W = [x.^2-y.^2  2*x.*y];

Form of a Function call.
Èf(pi/2)

  ans =
    1.85463599915323

ÈG([2 1])

  ans =
    3     4

Arrays

  All variable in MATLAB are treated as arrays. A scalar is a one by one array.
  Initialization can fill an array with either zeros or ones.

ÈZ = zeros(1,5)         % Initialize a row vector with zeros.

  Z =
    0     0     0     0     0

ÈW = zeros(3,1)         % Initialize a column vector with zeros.

  W =
    0
    0
    0

ÈM = ones(2,4)          % Initialize a matrix with ones.

  M =
    1     1     1     1
    1     1     1     1

Èsize(M)

  ans =
    2     4

Vectors

  Vectors can be entered and stored as a matrix with one row or one column

ÈV = [1,2,3,4]

  V =
    1     2     3     4


Èlength(V)

  ans =
    4

Èsum(V)         % The sum of the elements of V.

  ans =
    10

Èmean(V)        % The mean of the elements of V.

  ans =
    2.5000


Transpose 

ÈW =  [1,
     2,
     3,
     4]

  W =
       1
       2
       3
       4
ÈW'

  ans =
    1     2     3     4

Colon

  Used for creating a list and it is used for selecting part(s) of a list.

ÈX = 1:20;          % A list of integers from 1 to 20.
ÈY = X.^2;          % A list of their squares.
ÈY(10:20)           % Display only the last 11 entries.

  ans =
    100  121  144  169  196  225  256  289  324  361  400

ÈA = [1  2  3  4,
      5  6  7  8,
      9 10 11 12];

ÈA(1,3)             % Select one element in a matrix.

  ans =
    3

ÈA(2:3, 1:2)        % Select a sub-matrix.

  ans =
    5     6
    9    10


Arithmetic Operations

  +    Addition
  -    Subtraction
  *    Multiplication
  /    Division
  ^    Power


Arithmetic Operations for arrays (also useful for functions to be plotted)

  .+  Element-wise addition
  .-  Element-wise subtraction
  .*  Element-wise multiplication
  ./  Element-wise division  or  use  (  ).^(-1)
  .^  Element-wise power

ÈA = [1 2,
      3 4];
ÈA^2                 % Square a matrix.

  ans =
     7    10
    15    22

ÈA.^2                % Square each element in a matrix.
  ans =
    1     4
    9    16

ÈC = inv(A)          % Find the inverse of a matrix.
  C =
    -2.0000    1.0000
     1.5000   -0.5000

ÈA*C                 % Verify that C is the inverse.
  ans =
    1.0000         0
    0.0000    1.0000

Relational Operators

  ==   Equal to
  ~=   Not equal to
  <    Less than
  >    Greater than
  <=   Less than or equal to
  >=   Greater than or equal to

Logical Operators

  ~    Not  Complement
  &    And  True if both operands are true
  |    Or  True if either (or both) operands are true

Boolean Values

  1    True
  0    False

IF (Block) Control Statement

Performs the series of {<executable-statement>} following it 
or transfers control to an ELSEIF, ELSE, or ENDIF statement, 
depending on (<logical-expression>).

if (<logical-expression#1>),
  {<executable-statements>}
elseif (<logical-expression#2>),
  {<executable-statements>}
end


if (<logical-expression#1>),
  {<executable-statements>}
elseif (<logical-expression#2>),
  {<executable-statements>}
        
else
  {<executable-statements>}
end


Break

if n==3, break, end

for k=1:100,
  x=sqrt(k);
  if x>5, break, end
end


For loop

sum1 = 0;
  for k = 1:1:10000,
  sum1 = sum1 + 1/k;
end
sum1

  sum1 =
      9.78760603604434

sum2 = 0;
for k = 10000:-1:1,
  sum2 = sum2 + 1/k;
end
sum2

  sum2 =
      9.78760603604439

for j = 1:5,
  for k = 1:5,
    A(j,k) = 1/(j+k-1);
  end
end
A                        % The 5 by 5 Hilbert matrix A will be displayed.


While (Block) Control Statement

m = 10;
k = 0;
while k<=m
  x = k/10;
  disp([x, x^2, x^3]);   % A table of values will be printed.
  k = k+1;
end


Pause statement

  pause

Mathematical functions

  cos(x)    cosine (radians)
  sin(x)    sine (radians)
  tan(x)    tangent (radians)
  exp(x)    exponential  exp(x)
  acos(x)   inverse cosine (radians)
  asin(x)   inverse sine (radians)
  atan(x)   inverse tangent (radians)
  log(x)    natural logarithm base  e
  log10(x)  common logarithm base  10
  sqrt(x)   square root
  abs(x)    absolute value
  round(x)  round to nearest integer
  fix(x)    round towards zero
  floor(x)  round towards -°
  ceil(x)   round towards +°
  sign(x)   signum function
  cosh(x)   hyperbolic cosine
  sinh(x)   hyperbolic sine
  tanh(x)   hyperbolic tangent
  acosh(x)  inverse hyperbolic cosine
  asinh(x)  inverse hyperbolic sine
  atanh(x)  inverse hyperbolic tangent
  real(z)   real part of complex number z
  imag(z)   imaginary part of complex number z
  conj(z)   complex conjugate of the complex number z
  angle(z)  argument of complex number z
  rem(p,q)  remainder when p is divided by q


Data Analysis

  max       maximum value
  min       minimum value
  mean      mean value
  median    median value
  std       standard deviation
  sort      sorting
  sum       sum the elements
  prod      form product of the elements
  cumsum    cumulative sum of elements
  cumprod   cumulative product of elements
  diff      approximate derivatives (differences)
  hist      histogram
  corrcoef  correlation coefficients
  cov       covariance matrix


Graphics

  Store the following script in the M-file;  sketch.m 

X = 0:pi/8:pi;
Y = sin(X);
axis([-0.2 3.2 -0.1 1.1]);
plot(X,Y);
hold on;
plot([-0.2 3.2],[0,0],[0,0],[-0.1 1.1]);
xlabel('x');
ylabel('y');
title('Graph of y = sin(x)');
grid;
axis;
hold off;

  Issue the command  sketch  and obtain the graph



Remark. Data used by the plot command must be two vectors of equal length.
  
  X =
    0  0.3927 0.7854 1.1781 1.5708 1.9635 2.3562 2.7489  3.1416
  Y =
    0  0.3827 0.7071 0.9239 1.0000 0.9239 0.7071 0.3827  0.0000


Polynomial functions

  The coefficients of a polynomial are stored as a coefficient list.

  ÈC = [1 -3 2]
  C =
    1    -3     2

  If  C  is a vector whose elements are the coefficients  of a polynomial, 
  then polyval(C,x)  is the value of the polynomial evaluated at x.  

  Èfor x=0:0.5:3,
    disp([x,polyval(C,x)]),
  end

  0           2
  0.5000      0.7500
  1           0
  1.5000     -0.2500
  2           0
  2.5000      0.7500
  3           2


Finding the roots of a polynomial.  Let  p(x)  =  x5 - 10x4 + 35x3 - 50x2 + 24

ÈC = [1  -10  35  -50  24]
C =
     1   -10    35   -50   24

Èroots(C)
ans =
    4.0000
    3.0000
    2.0000
    1.0000

Other operations with polynomials are:

  conv     polynomial multiplication
  polyfit  polynomial curve fitting


  Graph the polynomial  p(x)  =  x5 - 10x4 + 35x3 - 50x2 + 24

  Store the following script in the M-file;  sketch.m 

C = [1  -10  35  -50  24];
X=-0.2:0.1:4.2;
Y=polyval(C,X);
axis([-0.2 4.2 -2.3 4.3]);
plot(X,Y);
hold on;
plot([-0.2 4.2],[0,0],[0,0],[-2.3 4.3]);
xlabel('x');
ylabel('y');
title('Graph of a polynomial.');
grid;
axis;
hold off;

  Issue the command  sketch  and obtain the graph.



  For function of the independent variable x one can define f
  as a text string:

f = 'sin(x)'

  Then use the fplot command

fplot(f,[0 10]);



3-dimensional graphs

  Store the following script in the M-file;  sketch.m 

[X Y] = meshdom(-1:0.1:1, -1:0.1:1);
Z = X.^2 - Y.^2;
mesh(Z);
title('Graph of z = x^2 - y^2');

  Issue the command  sketch  and obtain the graph.


More commands for matrices

  zeros    zero matrix
  ones     matrix of ones
  rand     random elements
  eye      identity matrix
  meshdom  domain for mesh plots
  rot90    rotation of matrix elements
  fliplr   flip matrix left-to-right
  flipud   flip matrix up-and-down
  diag     extract or create diagonal
  tril     lower triangular part
  triu     upper triangular part
  '        transpose


Solution of a linear system  AX = B

ÈA = [1  2  3  4,    % Enter the matrix A.
      2  5  1  1,
      3  1  2  1,
      4  1  1  3];

  A = [1  2  3  4,
       2  5  1  1,
       3  1  2  1,
       4  1  1  3];

ÈB = [2 1 3 4]'      % Enter the vector B.

  B =
    2
    1
    3
    4

ÈX = A\B             % Solve the linear system AX = B.

  X =
     0.8333
    -0.2273
     0.2576
     0.2121

ÈA*X                 % Verify that X is the solution.

  ans =
    2
    1
    3
    4


Eigenvectors and eigenvalues

ÈA = [1  2  3  4,    % Enter the matrix A.
      2  5  1  1,
      3  1  2  1,
      4  1  1  3];

È[V E] = eig(A)      % V is a matrix of eigenvectors.
                     % E is a diagonal matrix of eigenvalues.

  V =
    -0.2397   -0.0481   -0.8000    0.5479
     0.8438    0.0977    0.0966    0.5187
    -0.1880   -0.8201    0.3733    0.3908
    -0.4418    0.5618    0.4597    0.5272

  E =
    3.6856         0         0         0
         0    1.3717         0         0
         0         0   -2.9395         0
         0         0         0    8.8822
