There are several ways you can use functions in MATLAB. There are
built-in functions such as the sine and cosine functions, there are
special means to deal with polynomials, there is the ability to work
with symbolic functions and you can define your own functions using
5.1 Built-in functions
Listed below are some of the basic functions built into MATLAB.
First the standard trigonometric functions
exponential functions and logarithmic functions.
||Meaning of the operation
||sign of x (+1, -1, or 0)
||logarithm base 10
Here are some functions that make the display of numbers nicer:
. Typical ones can be either short, long, or
rat. For example the command >> format rat will cause the
display to use fractions when appropriate
Here are some functions which are useful for dealing with vectors or matrices
call the semicolon operator. It generates a
numbers between a and b of step size h.
The cross command find the
between 2 three-dimensional vectors.
The dot command find the
between two vectors.
The ``dot'' or period before an operator
such as * for multiplication, or ``/'' for
division or ``^'' for exponentiation. Tells MATLAB to
operate ``element by element'' or ``point by point''. For an example
look at a
dot operator example
The help command accesses MATLAB's
built-in help facility. To try it out try the command: help
The prod command takes the product of a
list of numbers, when given a matrix it takes the product of each
column returning a column vector. Here is how one could implement
the factorial command, n!:
>> n = 10; prod(1:n) % returns 10! = 3628800 = 10*9*8*...*1
The roots command find zeroes of a
polynomial. Click here to see
The sum command adds the entries in a
list or the columns in a matrix. For example, let's see that the sum
1 + 22 + 32 + иии + n2 is a perfect square when n = 24.
>> n=1:24; % thenumber 1 through 24
>> a = sum(n.^2); % need a dot as n is a list
ans = 70 % a perfect square
Except for n=1 this is the only n for which this is true. Here is
an example to simulate the number of heads in 100 coin tosses 250
>> r = rand(100,250); % 100 random numbers in [0,1] 250 times
>> r = floor(r+.5); % takes integer part of r + .5
% this is a number 0 or 1 with equal
>> a = sum(r); % adds down the columns, giving 250
>> hist(a); % plot a histogram -- bell shaped
the symbol ' or
single-quote indicates transpose. It switches a row
a column vector or vice versa.
Here are some MATLAB commands for plotting functions:
Despite its name, this command plots a surface
of revolution of a curve around the z-axis. The curve is entered
in a vector of radius values. (That is you plot the surface given by
x2 + y2 = f(z)2.) To plot a sphere you could enter the
>> z = -1:.1:1;
>> r = sqrt(1 - z.^2);
puts a grid up during a
The command linspace(a,b,n) generates
n points equally spaced over the closed interval [a,b]. Note that if
you wish to divide an interval into 10 equal subintervals, you need
11 points including the end points of the interval. If you omit
n then the command linspace(a,b) generates 100
equally spaced points over [a,b]. Similar to
creates a matrix of x and y values to be used in plotting
three-dimensional graphs. It is used in the following manner:
>> [x,y] = meshgrid(-1:.1:1,-pi,:.1,pi);
The plot command is used to plot lists
of data. In its simplest use if x and y are the
same size list, then plot(x,y) plots the x list
verse the y list. More advanced features are possible. See
page or click
The three-dimensional plotting function. The
command plots3(x,y,z) plots the points (xi,yi,zi) with
a straight line connecting the point (xi,yi,zi) to
Will plot a sphere. See
help sphere for
Creates a graph of a surface. It is called by
>> surf(x,y,z), where x, y and z
are matrices. To use it you would typically create the values of
x and y with the meshgrid command, and the value
of z as a function of x and y.
This command changes the view or perspective of a
three dimensional graph. You can call it with two angles or a
vector. The vector is a three-dimensional vector that points in the
opposite direction than where you are looking from. For example,
view([1,1,1]) will give a view of the origin as if you are
looking from the point (1,1,1).
The zoom command is usually followed by
either an on or off. When on it allows you to
explore the current plot with your mouse. ``Dragging'' out a window
will force MATLAB to ``zoom in'' on that area. To undo this double
click the mouse. As well, clicking in an
area will force a similar effect.
There are a number of MATLAB commands that allow one to work easily
with polynomials. For example:
commands if you can't find a definition.
To use any of these built-in functions you need to be familiar with
the shorthand convention MATLAB uses to store polynomials.
Since a polynomial is determined by its coefficients
(why?), it is only necessary to keep track of these numbers not the powers
. For example, 15x3
+ 12 is associated with the list
(15,0,-6,12). Now a list in MATLAB can be a row
column vector. MATLAB takes the convention that polynomials will be row
so the polynomial above would be
p = [15,0,-6,12] % notice commas not semicolons -- row vector
If we wanted to find the roots of the polynomial 15x3
+ 12, or
the solutions to the equation 15x3
+ 12=0 we could use the
>> roots(p) % notice answer is a column vector
-1.07097 + 0.00000i % this is the real number -1.07097
0.53549 + 0.67841i % these two are complex conjugates
0.53549 - 0.67841i
A general fact about polynomials tells us that a 3rd degree polynomial
will have 3 roots. So we start with a row vector with 4 entries, and we
get back a column vector with 3 entries.
5.3 Function m-files
If you want to explore many functions, it is tedious to keep
retyping and/or using the Up Arrow key to repeat commands. Here we
learn to simplify our work with
A script file will be a file that stores a sequence of keystrokes that
makes it easier to reuse, or easier to edit if it is complicated.
An m-file (or function m-file) in MATLAB is the way subroutines are
implemented. Knowledge of how to create m-files can make MATLAB a very
powerful tool for studying mathematics.
SAVING COMMAND SEQUENCES IN M-FILES OR SCRIPT FILES
if you are working on the CSI network, and you do not already have a
diskette in drive A you need to inform MATLAB where to find your
personal script files. Try the command
>. path(path,'a:\'); % or restart MATLAB with diskette in a:
To create a new script file in Windows 3.1:
Open the file menu (by clicking on FILE on the menu bar with
the left mouse button);
- click on NEW in the menu; a sub menu will appear;
- click on the M-FILE option.
This will open a new untitled file in the Notepad editor (it is
possible to set up MATLAB to use other editors). You should
resize and arrange your windows so that it is easy to go back and
forth between the MATLAB Command window and the Notepad window.
- You are know ready to go!
Script file exampleeg:script-file
Type in the following lines in the Notepad window. (Nothing will
happen in the MATLAB window.) After typing a couple lines, choose
Save As from the Notepad File menu. Save the file under the name
``limit.m'': you must use the extension ``.m'' or MATLAB
will not recognize it. Choose Save from the File menu when you're
done, but leave the Notepad window open. You will have written a
program in the MATLAB language.
This program uses a shortcut: instead of writing
x=[.1 .01 .001 ...], we write
x=(.1).*(n) where n=1,2,3,...
%%%% this file should be saved as limit.m
%%%% a % (percent sign) makes a comment to the end of the line
clear % gets rid of old definitions
format long % gives more digits in the answer
n= 1:1:6; % the numbers 1 though 6
x=-(.1).^n; % the numbers 10^(-1) through 10^(-6)
[x;y]' % limit from left in a table form
x=(.1).^n; % or use x = -x with x above
[x;y]' % limit from right in a table form
(Recall: MATLAB ignores text following a
After saving the file, return to the MATLAB Command window (by
clicking somewhere inside the window), and type
>> limit % evaluates the file limit.m
Note that you don't type the ``.m''. MATLAB should begin to execute
the commands just as if you had typed them in the Command window.
If you made an error while typing the file limit.m, MATLAB will
halt on the line with the error and print out an error
message. Simply return to the Notepad window, fix
the error, Save the file, and try typing
limit again in the
Command window. If you already closed the Notepad window,
Click on Open in the File menu (in the Command window),
find limit.m in the file list and reopen the file.
Note: MATLAB does not find syntax errors before
running the program since it uses an
interpreter rather than a compiler (like C or Pascal).
moral: MATLAB beeps when it is trying to get your
attention. This means it can't figure out what you mean. Pay
attention and find out why it beeped, its just trying to help you.
- Function m-files
In order to create functions in MATLAB we need to have an understanding
of how MATLAB handles the following computer related concepts
Format of the m-file: what is the syntax.
- Input and Output of data: how to pass arguments
- looping: for loops
- Conditional expressions: how to direct the flow
- Calling the function from MATLAB.
Let's look first at an example to illustrate these points. The
function n! in mathematics is shorthand for 1 и 2 иии
n. In MATLAB there is no built-in factorial function. Lets define one
as fact. our function fact should have as its input
a non-negative integer, and its output should be the factorial.
function y = fact(n) % the function word is a non-comment. y
% is the name of the output variable
% and n is the name the m-file gives
% to the input variable.
if n < 0
% this line prints out an error message
fprintf("factorial needs a non-negative integer\n");
% returns if there is an error
y = 1; % initialize the value of y
for i = 1:n % a loop
y = y*i;
end % end the loop
Let's analyze the important lines.
function y = fact(n)
This line follows the syntax of a function m-file. The first word if
the keyword function. Then the return value
or output, in this case the
value of y. What does the return value equal, the function
name without the .m extension, in this case fact,
and then the input, in this case n. Hence when n is
referred to in the file, it refers to the input value.
if n < 0
This is the syntax for a conditional test. The simplest usage is
as in the factorial example.
In general, it can be
An example in general can be given with the heavyside function:
function y = h(x) % save this a h.m
if x < 0
y = -1; % so h(-5) = -1
elseif x = 0
y = 0; % h(0) = 0
elsif x > 0 % and h(5) = 1
y = 1;
fprintf(stderr,"factorial needs a non-negative integer\n");
This is one way to pass a message back to MATLAB. The command
fprintf is the print function, the word stderr tells
MATLAB where to print the upcoming message (in this case where error
messages go), and the line in quotes is the message. The
the end of line character.
for i = 1:n
This is main looping construct. This increases the value of i
from 1 to n where n is the number given to
fact when the function is called.
The general syntax for a for loop is
for x = array
Whew, that was a lot of work considering the following commands
will find the factorial:
>> prod(1:n); % product of 1,2...n
>> gamma(n+1); % gamma function is related to factorial
The array can be quite general. Here are some examples which can be
run from the command line, or put into an m-file
>> tot = 0; % our total
>> for i = 1:2:100 % just the odd numbers
> tot = tot + i; % you may have a different prompt
>> end; tot % prints sum of odd numbers between 1
% and 99
>> x = randn(1,100); % a list of 100 normally distributed
% random numbers
>> temp = 1:100; % the number 1 through 100
>> for i = temp(x < -2 | x > 2) % these are outliers in the data
> x(i) = 0 % make outliers 0
The last example uses some a complicated way to get the array or
list of numbers to index over. It takes only those indices for the
list x which have x-values less than -2 or bigger than 2.
Another looping construct is the while command. This has
An simple example could be to construct the first n Fibonacci
numbers. These numbers are 1,1,2,3,5,8,13,21,34,55 if n is 10.
function fib = fib(n) % save as fib.m. return name same as
% function name. That's okay!
fib = ones (1, n); % fib = [1,1,1,1,1,1,1,1,1,1] if n=10
i = 3;
while (i <= n)
fib (i) = fib (i-1) + fib (i-2); % 1+1=2, 1+2=3, 2+3=5, 3+5=8 ...
i=i+1; % increment i
The while loops keeps looping until the condition that i be
less than or equal to n is no longer true. The command ones
is a simple way of making a sequence of all ones. Of course we
should check that n is an integer bigger than 3. Don't
forget to increment your expression or you'll find an infinite
loop. (you can use the control-c key sequence to disable this.
>> i = 1;while i < 2
> fprintf(``Help me! I'm stuck in an endless loop\n'')
Some more examples of m-files:
Evaluating functions from mathematics.
Suppose you wanted to evaluate the function f(x) several times in
the course of a mathematical experiment. One way to type less is with
function y = f(x) % save as f.m
y = 1 - x.^2/2 + x.^4/4; % 5 terms in Taylor series for cosine
% x. Notice the dots
This was written so that both x and y could be lists
of numbers. To use this we might do this in a MATLAB session
>> x = linspace(0,pi);
>> y = f(x);z=cos(x); % pass f(x) a list of numbers. No
>> plot(x,y,x,z) % compare approximation to cosine x
>> h=.01, difquo = (f(x+h) - f(x))/h % compute difference quotient
>> plot(x,difquo,x,sin(x)) % compare difference quotient.
- Writing your own
Suppose you want to make plotting of a function simple, but you don't
want to use ezplot as it works only for symbolic functions. Here is a
simple m-file you could use. Can you think of any extensions you might
function y = myezplot(f,a,b)
%% myezplot: called with a function defined in an m-file, a and b
%%graphs the function f defined in f.m over the range of
%% values specified by the range [a,b]. If a and b are omitted it
%% takes the interval [-5,5] as a default.
if nargin = 1
for x = linspace(a,b) % loop over x in [a,b]
y(i) = feval(f,i) % call the function in f.m. Needs to use
To call this function you would first define your function in
a m-file, say yourfunc.m, then you would use the command
>> myezplot(yourfunc,0,3) % plots yourfunc between 0 and 3
This example uses the variable nargin which is a count of the
number of arguments in the input. As well
it shows how you can pass a function name to a function. You need to
use the command feval to evaluate the function.