matlab functions part ii - miami university · 2013-10-28 · matlab functions – part ii greg...

56
MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September 2013

Upload: others

Post on 01-Aug-2020

3 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

MATLAB

Functions – Part II

Greg Reese, Ph.D

Research Computing Support Group

Academic Technology Services

Miami University

September 2013

Page 2: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

MATLAB

Functions – Part II

© 2010-2013 Greg Reese. All rights reserved 2

Page 3: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

3

Part I

• Write scripts

• Run MATLAB functions

• Write and run our own functions

• Use our functions in MATLAB

plotting and optimization routines

• Write and use anonymous

functions

Page 4: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

4

Part II

• Document functions

• Detect number of inputs and outputs

• Subfunctions

• Nested functions

Page 5: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

5

Page 6: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

6

To find out how to use a MATLAB function you

type the command

help function_name

If you don't know function name, can look for

important word in function description with

lookfor word

We can incorporate our functions in the MATLAB help system so help and lookfor

work on custom code

Page 7: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

7

Look at results for MATLAB csvread()

Try It

1. Type help csvread

2. Type lookfor 'comma separated'

3. Type type csvread

Page 8: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

8

>> help csvread

CSVREAD Read a comma separated value file.

M = CSVREAD('FILENAME') reads a comma separated value formatted file

FILENAME. The result is returned in M. The file can only contain

numeric values.

M = CSVREAD('FILENAME',R,C) reads data from the comma separated value, etc.

>> lookfor 'comma separated'

lists - Comma separated lists.

csvread - Read a comma separated value file.

csvwrite - Write a comma separated value file.

>> type csvread

function m = csvread(filename, r, c, rng)

%CSVREAD Read a comma separated value file.

% M = CSVREAD('FILENAME') reads a comma separated value formatted file

% FILENAME. The result is returned in M. The file can only contain

% numeric values.

%

% M = CSVREAD('FILENAME',R,C) reads data from the comma separated value

etc.

Page 9: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

9

help displays first group of

contiguous comment lines in file

• Traditionally put right after function line

• Blank line breaks contiguous group

– To display blank, put in line with only a

percent sign

Page 10: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

10

Example – help output

In file doc_check.m function [ result details ] = doc_check( fileName )

% DOC_CHECK Check a function m-file for correct documentation.

%

% Check that first comment has function name in capital letters and line

% ends with a period, that every input and output parameter is documented,

% etc. See explanation for "details" output parameter for full list

>> help doc_check

DOC_CHECK Check a function m-file for correct documentation.

Check that first comment has function name in capital letters and line

ends with a period, that every input and output parameter is documented,

etc. See explanation for "details" output parameter for full list

Page 11: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

11

H1 or description line

• H1 = first line in help description

• lookfor uses this line

– Make line descriptive of function

– Include words user would most likely

search for

Page 12: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

12

Example – lookfor output

In file doc_check.m function [ result details ] = doc_check( fileName )

% DOC_CHECK Check a function m-file for correct documentation

>> lookfor documentation

doc_check - Check a function m-file for correct documentation.

builddocsearchdb - Build documentation search database

doc - Display HTML documentation in the Help browser.

docsearch - Search HTML documentation in the Help browser.

Page 13: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

13

Suggestions for documentation

• H1 line

• Longer description of functionality

• Description of parameters

• Description of errors and how they're

handled

• References

Page 14: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

14

H1 line suggestions

• File name in caps*

• End in period*

• Contain words likely to be searched for

* MATLAB conventions. Don't know if they have functionality

Page 15: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

15

Longer description suggestions

• Name of algorithm, inputs and outputs,

e.g. "Run's Reese's algorithm on the

students in the class and produces a list

of slackers and hard workers"

• Don't put in details spelled out further in

documentation

Page 16: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

16

Parameter suggestions

• Definition

• Data type, e.g., scalar, vector, matrix, etc.

– For vector, whether row, column or either

• Units

• Range

– Be careful with > and ≥

• Optional or required

– Default if optional input

Page 17: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

17

Error suggestions

• Conditions that cause error

• State of output if error

• Internal state if error, e.g., "All open files in

routine will be closed if there is an error"

• Error reporting mechanism

– error()

– errordlg()

– Text of message

Page 18: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

18

Example

In file doc_check.m function [ result details ] = doc_check( fileName )

% DOC_CHECK Check a function m-file for correct documentation.

%

% Check that first comment has function name in capital letters and line

% ends with a period, that every input and output parameter is documented,

% etc. See explanation for "details" output parameter for full list

%

% REQUIRED INPUT

% fileName - name of file to check

% REQUIRED OUTPUT

% result - true if all items checked for are correct, false otherwise

% OPTIONAL OUTPUT

% details - all values true or false

% details(1) - first word of first comment line is function name in caps

% details(2) - first comment line ends with a period

% etc.

% ERRORS

% If can't open or read file, calls error()

fid = fopen( fileName );

% etc.

Page 19: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

19

Example - errors

Output for help doc_check.m >> help doc_check

DOC_CHECK Check a function m-file for correct documentation.

Check that first comment has function name in capital letters and line

ends with a period, that every input and output parameter is documented,

etc. See explanation for "details" output parameter for full list

REQUIRED INPUT

fileName - name of file to check

REQUIRED OUTPUT

result - true if all items checked for are correct, false otherwise

OPTIONAL OUTPUT

details - all values true or false

details(1) - first word of first comment line is function name in caps

details(2) - first comment line ends with a period

etc.

ERRORS

If can't open or read file, calls error()

Page 20: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Documentation

20

References

• Full citations for books, papers, etc.

• Web sites

– URL

– Date downloaded

• External codes used

– MATLAB central

– sourceforge.net

– university

Page 21: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

21

Documentation

Questions?

Page 22: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Input / Output

Arguments

22

Page 23: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

23

One function can have different numbers of

inputs or outputs. Most MATLAB functions

are like this

fminbnd

Find minimum of single-variable function on fixed interval

Syntax

x = fminbnd(fun,x1,x2)

x = fminbnd(fun,x1,x2,options)

[x,fval] = fminbnd(...)

[x,fval,exitflag] = fminbnd(...)

[x,fval,exitflag,output] = fminbnd(...)

Page 24: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

24

Why different number of inputs?

• Save caller from always entering argument that

has commonly used value

– e.g., delimiter in tokenizer usually a space

• Save caller from entering redundant arguments

– e.g., correlation( x, y ) computes cross-correlation, for

autocorrelation want correlation( x ) instead of

correlation( x, x )

• Allow caller to enter extra information if available

– e.g., pass graph title to plotting routine

Page 25: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

25

In a function, get number of arguments passed to function with nargin

Example – download scale.m function [ y expansion ] = scale( x, m, b )

% SCALE - linearly scale x so that y = m*x + b

% x - unscaled data, row or column vector

% Optional input arguments

% m - slope, scalar ~= 0, default = 1

% b - y-intercept, scalar, default = 0

%

% Required output

% y - scaled data, same dimensions as x

% Optional output

% expansion - optional output, scalar,

% expansion = (yMax-yMin)/(xMax-xMin)

Page 26: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

26

Typical verification of number of inputs function [ y expansion ] = scale( x, m, b )

% verify right number of input arguments

if nargin == 1

m = 1;

b = 0;

elseif nargin == 2

b = 0;

elseif nargin ~= 3

error( 'USAGE: y = scale( x, m, b ) m, b optional' );

end

If missing inputs, set them

If not max number of inputs, bail out

Page 27: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

27

Can verify data type

% verify data type

if ~isvector( x )

error( 'x must be a vector' );

elseif ~isscalar( m ) | ~isscalar( b )

error( 'm and b must be scalars' );

end

Page 28: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

28

Can verify range

%verify range

if m == 0

error( 'm must not be zero' );

end

Page 29: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

29

Try It >> y = scale( magic(3) )

??? Error using ==> scale at 23

x must be a vector

>> y = scale( 1:5, 2 )

y = 2 4 6 8 10

>> y = scale( 1:5, 2, [ 5 6] )

??? Error using ==> scale at 25

m and b must be scalars

>> y = scale( 1:5, 2, 1, 5 )

??? Error using ==> scale

Too many input arguments.

>> y = scale( 1:5, 2, 1 )

y = 3 5 7 9 11

Page 30: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

30

Why different number of outputs?

• Provide caller with less important

computations

– e.g., [R,P]=corrcoef(...) can return main

result R (correlation coefficients) and optionally

P (p-values)

• Provide caller with information about

processing that took place

• Provide caller with information for use with

other functions

• Provide caller with information about any

errors

Page 31: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

31

Example – MATLAB fminbnd() [x,fval] = fminbnd(...) returns the value of the objective function computed in

fun at x.

[x,fval,exitflag] = fminbnd(...) returns a value exitflag that describes the exit

condition of fminbnd:

1 fminbnd converged to a solution x based on options.TolX.

0 Maximum number of function evaluations or iterations was reached.

-1 Algorithm was terminated by the output function.

-2 Bounds are inconsistent (x1 > x2).

[x,fval,exitflag,output] = fminbnd(...) returns a structure output that contains

information about the optimization:

output.algorithm Algorithm used

output.funcCount Number of function evaluations

output.iterations Number of iterations

output.message Exit message

Main results

Exit status

Processing information

Page 32: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

32

In a function, get number of arguments requested by caller with nargout

Example – scale.m function [ y expansion ] = scale( x, m, b )

% SCALE - linearly scale x so that y = m*x + b

% x - unscaled data, row or column vector

% Optional input arguments

% m - slope, scalar ~= 0, default = 1

% b - y-intercept, scalar, default = 0

%

% Required output

% y - scaled data, same dimensions as x

% Optional output

% expansion - optional output, scalar,

% expansion = (yMax-yMin)/(xMax-xMin)

Continues on next slide

Page 33: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

33

Processing different number of outputs function [ y expansion ] = scale( x, m, b )

% compute main output

if nargout == 1

y = m * x + b;

elseif nargout == 2

y = m * x + b;

expansion = ( max(y) - min(y) ) / ( max(x) - min(x) );

else

error( 'USAGE: [ y expansion ] = scale( x, m, b ) m, b

optional' );

end

If optional output desired,

compute it

If not max number of inputs, bail out

Page 34: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Arguments

34

Try It >> scale( 1:5 )

??? Error using ==> scale at 42

USAGE: [ y expansion ] = scale( x, m, b ) m, b optional

>> y = scale( 1:5 )

y = 1 2 3 4 5

>> y = scale( 1:5, 3 )

y = 3 6 9 12 15

>> [ y ratio ] = scale( 1:5, 3 )

y = 3 6 9 12 15

ratio = 3

>> [ y ratio z ] = scale( 1:5, 3 )

??? Error using ==> scale

Too many output arguments.

Page 35: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

35

Arguments

Questions?

Page 36: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Subfunctions

36

Page 37: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Subfunctions

37

A function m-file can contain more than one

function. All functions other that the first one

are called subfunctions.

Subfunctions –Used mainly to carry out tasks that should be

separated from primary function but unlikely to be used

by other m-files

– Help avoid having a lot of m-files

– Override (used in place of) other functions of same

name

Page 38: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Subfunctions

38

Subfunctions in a file

• Start with a function line

• End at next function line or at end of file

• Are only visible (usable) by the primary

function or the other subfunctions

• Can come in any order as long as

primary function comes first

• Cannot access variables in other

subfunctions or in the primary function

Page 39: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Subfunctions

39

Example – download newstats.m function [avg, med] = newstats(u) % Primary function

% NEWSTATS Find mean and median with internal functions.

% From MATLAB help on subfunction

n = length(u);

% Note subfunction mean() gets called, not MATLAB's mean()

avg = mean(u, n);

med = my_median(u, n);

function a = mean(v, n) % Subfunction

% Calculate average.

a = sum(v)/n;

function m = my_median(v, n) % Subfunction

% Calculate median.

w = sort(v);

if rem(n, 2) == 1

m = w((n+1) / 2);

else

m = (w(n/2) + w(n/2+1)) / 2;

end

Page 40: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Subfunctions

40

Try It

Call primary function

>> [ av med ] = newstats( 1:11 )

av = 6

med = 6

Call subfunction

>> med2 = my_median( 1:11, 11 )

??? Undefined function or method 'my_median' for

input arguments of type 'double'.

Page 41: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Subfunctions

41

Try It

Verify overridden mean()called by putting line

disp( 'In newstats mean' );

in subfunction mean()

>> [ av med ] = newstats( 1:11 )

In newstats mean

av = 6

med = 6

Page 42: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Subfunctions

42

Strange but True

Although you can't access subfunctions

from outside their file, you can get help

on them!

1. Write normal help stuff for subfunction

2. On command line type help filename>subfunction_name

where filename is the name of the file

(without the .m) that the subfunction is in

Page 43: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Subfunctions

43

Try It

After the function line for my_median put

some help lines and print them by using

the help command on the command line function m = my_median(v, n)

% This is my median

% Land that I love

>> help newstats>my_median

This is my median

Land that I love

Page 44: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

44

Subfunctions

Questions?

Page 45: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested

Functions

45

function3

Page 46: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested Functions

46

A nested function is a function defined

within another function

Nested functions often passed by

function handle to functions that

manipulate other functions – e.g., ezplot(), fminbnd(), etc.

– Can be used instead of anonymous functions if

function has more than one expression

Page 47: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested Functions

47

To define a nested function, just

write it within another function

Example

function outer( a, b, c )

...

function inner( a )

...

end

...

end

Nested

function

Page 48: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested Functions

48

Nested functions

• Can be nested within other nested

functions

• Cannot be inside any MATLAB program control statement, i.e., if, else,

elseif, switch, for, while,

try, or catch statement

• Must always be terminated by an end statement

Page 49: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

49

Nested Functions

MATLAB Help says:

"M-file functions don't normally require a terminating end statement. This rule does

not hold, however, when you nest

functions. If an M-file contains one or more

nested functions, you must terminate all

functions (including subfunctions) in the M-file with end, whether or not they

contain nested functions."

Page 50: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested Functions

50

You can call a nested function

• From the level immediately above

it. (In the following code, function

A can call B or D, but not C or E.)

• From a function nested at the

same level within the same parent

function. (Function B can call D,

and D can call B.)

• From a function at any lower level.

(Function C can call B or D, but

not E.)

• You can also call a subfunction

from any nested function in the

same M-file.

function A(x, y) % Primary function

B(x, y);

D(y);

function B(x, y) % Nested in A

C(x);

D(y);

function C(x) % Nested in B

D(x);

end

end

function D(x) % Nested in A

E(x);

function E(x) % Nested in D

...

end

end

end

Page 51: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested Functions

51

The scope of a variable is the range

of functions that have direct access

to the variable.

When define a variable in a function,

scope normally that function alone

• Calling function cannot access called

function's variables

• A subfunction cannot access another

subfunction's variables

Page 52: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested Functions

52

Big power of nested functions:

A nested function has

access to the variables in all

functions in which it is nested

Page 53: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested Functions

53

• A variable that has a value assigned

to it by the primary function can be

read or overwritten by a function

nested at any level within the

primary

• A variable that is assigned in a

nested function can be read or

overwritten by any of the functions

containing that function

Page 54: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

Nested Functions

54

Example – download and run nested_fibonacci.m

function nested_fibonacci % primary function

% nested function

function sum = print_and_sum( ix )

if ix < 3

sum = 1;

else

% nested function can access "indexes"

% variable in containing function

sum = indexes(ix-1) + indexes(ix-2);

fprintf( '%d = %d + %d\n', sum,...

indexes(ix-1), indexes(ix-2) );

end

end

indexes = 1:8;

% apply print_and_sum to every element of numbers,

% save results in a vector and display the vector

fib = arrayfun( @print_and_sum, indexes );

fib

end % end of nested_fibonacci

Page 55: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

55

Nested Functions

Questions?

Page 56: MATLAB Functions Part II - Miami University · 2013-10-28 · MATLAB Functions – Part II Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University

56

The End