CHAPTER 1: INTRODUCTION INTO MATLAB COMPUTING
Lecture 1.3: Mathematical
functions and M-files
Elementary mathematical functions:
·
sqrt: square
root function (MATLAB operates both with real and complex numbers
universally)
ans = 0 + 2.2361i
% A quadratic equation,
a*x^2 + b*x + c = 0, has two solutions (roots):
% x = (-b
+/- sqrt(b^2 – 4*a*c))/(2*a)
a = 1; b = 1; c = 10;
x1 = (-b
+ sqrt(b^2-4*a*c))/(2*a)
x2 = (-b -
sqrt(b^2-4*a*c))/(2*a)
% the two solutions are complex since b^2 < 4*a*c
a = 1; b
= 10; c = 1;
x1 = (-b
+ sqrt(b^2-4*a*c))/(2*a)
x2 = (-b -
sqrt(b^2-4*a*c))/(2*a)
% the two roots are real since b^2 > 4*a*c
x2 = -0.5000 - 3.1225i
x1 = -0.1010
x2 = -9.8990
·
sin, cos, tan: trigonometric functions
·
asin, acos, atan: inverse trigonometric functions
·
sinh, cosh, tanh: hyperbolic functions
·
asinh, acosh, atanh: inverse hyperbolic functions
·
exp, log, log10: exponential functions
a1 =
cos(3-4*i) % MATLAB functions work for complex arguments
a2 = exp(7+5*i)
a3 = tan(0:1:5) % MATLAB functions work for vector arguments
a4 = cosh([ 0,1; -1,-2;
0.1,0.2])
% MATLAB functions work for
matrix arguments, such that
% the output of MATLAB
functions reproduces the input structure
% Note that the
matrix-vector calls to MATLAB functions are more efficient
% computationally than pointwise calls for each element of an array
-27.0349 + 3.8512i
a2 =
3.1107e+002 -1.0516e+003i
a3 =
0 1.5574
-2.1850 -0.1425 1.1578
-3.3805
a4 =
1.0000 1.5431
1.5431 3.7622
1.0050 1.0201
b1 = acos(0.5) % the argument of the standard "acos" is
between [-1,1]
b2 = acos(5) % the MATLAB
"acos" is analytically continued beyond [-1,1]
b3 = acosh(5) % imaginary
part of acos(5) is the same as real part of acosh(5)
b4 = acosh(0.5) % vice
verse
b5 = log(exp(5)) % log(x)
is the logarithm of base e
b6 = log10(1000) % log10(x)
is the logarithm of base 10
format long; b7 = atan(inf)
% the range of atan(x) is between [-pi/2,pi/2]
pi/2, format short;
b2 = 0 - 2.2924i
b3 = 2.2924
b4 = 0 + 1.0472i
b5 = 5
b6 = 3.0000
b7 = 1.57079632679490
ans = 1.57079632679490
·
real, imag, conj: real, imaginary parts of a complex number, and the complex conjugate
number
·
abs, angle: absolute value of a complex
number, and the phase angle of a complex number
z = 1 +
2*i; % a complex number
r = abs(z), theta = angle(z)
% polar form of a complex number
comp1 = real(z) -
r*cos(theta) % Euler formulas for complex exponentials
comp2 = imag(z) - r*sin(theta)
theta = 1.1071
comp1 = -2.2204e-016
comp2 = 0
·
round: rounding to the nearest integer
·
floor: rounding to the smallest integer
·
ceil: rounding
to the largest integer
·
fix: rounding
to the smallest integer if positive and to the largest integer if negative
·
sign: 1
if positive, 0 if zero, and –1, if negative
c1 = round(1.5), c2 = round(1.4999999), c3 =
round(-1.5), c4 = round(-1.4999999)
d1 = floor(1.9999), d2 =
floor(-1.0001), d3 = ceil(1.0001), d4 = ceil(-1.99999)
e1 = fix(1.99999), e2 = fix(-1.99999), e3 = sign(1.01), e4 = sign(-1.01)
c2 = 1
c3 = -2
c4 = -1
d1 = 1
d2 = -2
d3 = 2
d4 = -1
e1 = 1
e2 = -1
e3 = 1
e4 = -1
·
mod,rem: remainders upon division
% rem(x,y) = x – y*fix(x/y)
% rem(x,y) = mod(x,y) if
sign(x) = sign(y)
f1 = mod(5,3), f2 = rem(5,3)
f3 = mod(-5,3), f4 = rem(-5,3)
f5 = mod(5,-3), f6 = rem(5,-3)
f7 = mod(-5,-3), f8 = rem(-5,-3)
f2 = 2
f3 = 1
f4 = -2
f5 = -1
f6 = 2
f7 = -2
f8 = -2
·
factorial: factorial of an integer
number
·
factor: factorize an integer number
into prime numbers
·
isprime: 1 if a number is a prime
number and 0 if not
g1 = factorial(5), g2 =
factorial(15), g3 = factor(150), g4 = isprime(150)
g2 = 1.3077e+012
g3 = 2
3 5 5
g4 = 0
% the functions are not continued for non-integer values
N must be a positive integer
% Remove the numbers divisible by 3 from a vector:
x = [-9,
0, 2, 5, 3, 7, 2, 0, 6, 12, 214342124187]
disp(sprintf('
%12.0f ',x));
m = 0;
for k = 1
: length(x) % looping through the vector x
if mod(x(k),3)
~= 0 % comparison if x(k) is not divisible by 3
m =
m + 1;
y(m)
= x(k); % saving x(k) into a dynamically created vector y
end
end
x = y
1.0e+011 *
-0.0000 0 0.0000
0.0000 0.0000 0.0000
0.0000 0 0.0000
0.0000 2.1434
-9
0 2 5 3
7 2 0 6
12 214342124187
x =
2 5 7 2
Standard API (Application
Programming Interface)_functions:
·
sort: the function reorders
elements of a vector to ascending order
y = sort(x) % both
row-vectors and column-vectors can be sorted
[y,index] = sort(x); %
index show how elements of y appear in x: y = x(ind)
x(ind)
y = 1
1 2 3 4 7
10
ans = 1 1 2 3 4 7 10
·
sum: the function summates all elements of a vector
A = [ 1,2,3; -4,-5,-6] % a
two-dimensional array (matrix)
sum(A) % returns the row-vector for sums of each column of A
ans = 28
A = 1
2 3
-4
-5 -6
ans =
-3 -3 -3
·
max,min: find the maximum, minimum
element of a vector
[maxX,indX] = max(x) % maxX - the maximal element, indX - its
position in x
[minX,indX] = min(x) % if the minimum element is multiple, indX is
the index of the first element
[maxA,indA] = max(A) % returns the row vectors for max of each column of A
indX = 4
minX = 1
indX = 2
maxA = 1
2 3
indA = 1 1 1
·
rand(n): generate a square matric (n
by n) of random numbers, each random number is in [0,1]
a1 = rand(1), a2 = rand(1), a3 = rand(1)
a2 = 0.0185
a3 = 0.8214
·
rand('seed',k): initialization of the random
number generator by a seed number k (>=1)
NB: If the seed number is
the same, the sequence of random numbers becomes the same. In order to generate
a different sequence of random numbers, the seed number is chosen according to
a random factor (e.g. by count of the day, time in seconds, etc.)
c = clock % returns a
row-vector of length 6
k = c(2)*c(3)*c(4)*c(5)*c(6) % this product has 3*10^7
combinations and changes every second during the year
rand('seed',k); % initialization of the random number generator
depends on the time of computations
for n = 1 : 10
m = ceil(12*rand(1)); % randomly choose one the 12 integer
numbers between 1 and 12 for 10 times
fprintf('the random number is: %3.0f\n',m);
end
2.0010
0.0120 0.0280 0.0110
0.0190 0.0023
k = 1.5934e+005
the random number is: 11
the random number is: 4
the random number is: 10
the random number is: 6
the random number is: 3
the random number is: 9
the random number is: 1
the random number is: 6
the random number is: 8
the random number is: 5
·
eval('stringName'): execute the command
prescribed by the string "stringName"
FunctionName = input('Type a function name: ','s');
% an user is supposed to type a name of valid MATLAB function
x = 0 :
0.2 : 1;
strCommand
= [ FunctionName, '(x)' ]; % concatanetion of two strings
y = eval(strCommand) % evaluate the command, e.g. y = sin(x)
Type a function name: sin
y =
0 0.1987
0.3894 0.5646 0.7174
0.8415
Type a function name: exp
y =
1.0000 1.2214
1.4918 1.8221 2.2255
2.7183
% Example of authomatical creating names of files:
for k = 1 : 1000
y = exp((k-1)*0.1); % the data y is dynamically created for each
value of k
if ( k <= 10 )
s = sprintf('save file00%1d y -ascii',k-1); % saving the data y
into file "file00k" for k < 10
elseif ( k <= 100 )
s = sprintf('save file0%1d y -ascii',k-1); % saving the data y
into file "file0k" for 10 <= k < 100
else
s = sprintf('save file%1d y -ascii',k-1); % saving the data y
into file "filek" for 100 <= k < 1000
end
eval(s); % executing the string with the command to save the
data, 1000 files are created in the loop
end
M-file scripts and
functions:
M-files are useful for long commands and procedures, they can be saved to disk and corrected as many times as needed.
·
script m-files:
·
function m-files:
function [mean,stdev] =
mean_stdev(x)
% [mean,stdev]
= mean_stdev(x)
% x is a
vector, mean and stdev are scalars
% the
function computes the mean value and the standard deviation
% of a data sample x
n =
length(x); % x is a vector
if ( n ~=
0 ) % if x is not empty vector
mean
= sum(x)/n; % compute the mean value of x
varComp
= sum((x-mean).^2)/n; % compute the variance of x
stdev
= sqrt(varComp); % compute the standard deviation of x
end
[mu,st] = mean_stdev(x)
x = 3;
[mu,st] =
mean_stdev(x)
st = 2.8723
mu = 3
st = 0
varComp % the variable "varComp" is defined in the
function "mean_stdev",
% but this variable is not accessible in the current working space
3
??? Undefined function or variable 'varComp'.
function y = powerfunction(x,n)
y = x.^n; % the pointwise power ".^" works both for scalars and vectors
x = [ 1 2 3 4 5 6 ]; powerfunction(x,3)
9
ans =
1 8 27 64 125 216
% compute a weighted
average of a function y = f(x) at three points a,b,c by using the formula:
% f_av = (f(a) + 2 f(b) +
f(c))/4
function f_av
= average(f,a,b,c)
a1 =
feval(f,a);
b1 = feval(f,b);
c1 = feval(f,c);
f_av = 0.25*(a1 + 2*b1 + c1);
% call to the standard MATLAB function y = sqrt(x)
w2 = average('sin',1,2,3)
% call to the standard MATLAB function y = sin(x)
1.3901
w2 =
0.7003