Sei sulla pagina 1di 22

Introduction to Matlab

& Data Analysis

Tutorial 7:
Functions and Program Design
Please change directory to directory E:\Matlab (cd E:\Matlab;)
From the course website
(
http://www.weizmann.ac.il/midrasha/courses/MatlabIntro//course_outline.
htm
)
Download:

Weizmann 2010

playTicTacToe.m , isLegalMove.m , isPlayerWon.m, getNextMove.m,

Goals

Introduction
Functions M file structure
Functions workspace
Functions Input and output

Top down design


Local functions
Debugger
Recursion
More:

Functions and commands


Functions and the matlab search path
2

Function Is an Independent
Piece of Code Which Performs
a Task
Function (subroutine, method,
procedure, or subprogram)
is a portion of code within a
larger program,
which performs a specific task
and
can be relatively independent
of the remaining code.

One M-file, One Task, One Workspace

Variables - The Data


Objects, Functions Are The
Actions

Input (Object / Data):


X= 80
Functions:

90

95 100 98

88

92

y=mean(x) y= sum(x) y= max(x)


Output:
(Data)

91.85

643

100
4

A Function Is a Black Box

Output

function

Input

A function is a black box

It hides the code and its workspace and


communicates with the world using
the input and output variables

Functions M file structure


The file is a Matlab
function
The output variables (if there are few use []: [out1
out2] )
Should be same as the name of the
file
sumTwoNums.m:
functionmy_sum=sumTwoNums(a,b)

my_sum=a+b;

Assign the output variables


(else - Matlab will give an
error)

The input
variables
6

help:

Functions
Documentation and
Variable Verification First line

Usage
Input
Output
Examples
Testing for
proper
variables

functionmy_sum=sumTwoNums(a,b)
%SUMTWONUMSsumtoscalars
%thisfunctionsumstwoscalar
%andreturnstheresult
%INPUT:
%athefirstscalar
%bthesecondscalar
%
%OUTPUT:
%my_sumthesumofaandb;sum=a+b

if(~isscalar(a))
error('Firstargumentisnotascalar');
end
if(~isscalar(b))
error('Secondargumentisnotascalar');
end

Calculations and Output


my_sum=a+b;
assignment

Each Instance of A
Function Run Has Its
Assume we
wrote the
function:
Own
Workspace
functionmy_sum=sumTwoNums(a,b)
my_sum=a+b;

In the workspace we run:


a=1;
b=2;
x=3;
y=4;
s=sumTwoNums(x,y)

What is the output?


s=7

Matlab
Workspace:

a=1
b=2
X=3

Function
Workspace:

a=3
b=4
my_sum =
7

y=4
s=7
8

Matlab Functions Can Be Called


With Fewer Input Arguments Than
Specified
Consider a function that computes

ax bx c
2

functiony=calSecondOrderPoly(x,a,b,c)
switchnargin
case4
%donothing
case3
Default
c=0;
case2
value
c=0;
b=0;
otherwise
error('Incorrectinput');
end

y=a*x.^2+b*x+c;

Switch
according to
input arguments
number

Matlab Functions Can Be Called With


Fewer Output Arguments Than
Specified

Recall:

[r,c] = find(A) , ind = find(A);

sorted_A= sort(A); [sorted_A, sort_ind] = sort(A);

Now lets improve our function such that if it


called with two output arguments, the
second argument is the derivative:

[y,y_derivative]=calSecondOrderPoly(x,a,b,c);

[ax 2 bx c,2ax b]
10

Matlab Functions Can Be Called With


Fewer Output Arguments Than
Specified
function[y,y_derivative]=calSecondOrderPoly(x,a,b,c)

y=a*x.^2+b*x+c;
Checks number

of output
ifnargout==2
arguments
Can help avoid
y_derivative=2*a*x+b;
expensive
end

computations when
they are not necessary

11

Example

Write a function subtractTwoNums

Input: a, b
Output: a-b

Add Help to the function


Try calling the function (Debugger)
*Extra: if the function needs to
return two output variables:

Output: [a-b, b-a]


12

Top Down Design

A method to solve complex


problems
Principles:

Start from large problems to


small
A function does one task
Think before you code

13

Top Down Design and


Debugging Tic-Tac-Toe
Example

Problem
specifications:
Build a tic-tac-toe
game for two players.

14

Lets break the problem topdown


Play Tic-Tac-Toe
Have some
game matrix
Initiate the
game matrix
Update the
game matrix

Get Next Move

Get column

Get row

Check for a winner

Announce the winner

Check whether
the move is legal

Display the
game matrix
15

Choosing the Data Structures

We will use two game matrices

Warning: We use it here for simplicity, usually it


is better to avoid data duplication

Num_mat - 3x3 numeric


matrix

display_mat - 3x9 char


matrix

NaN

NaN

NaN

NaN

NaN

NaN

NaN

16

Writing the functions


Go with the (control)
flow
Play Tic-Tac-Toe

Initiate game matrix


Initiate who won flag variable to 0
Initiate current player flag variable to
1
Loop 9 times (fori=1:9):

Get Next Move


Update game matrix
Display game matrix
Check for winner if found a winner:

Update who won flag (1 or 2) and Break

Switch the current player flag 1<->2

Announce winner according to the who


won flag variable

Flags
A variable which
holds information
about the
program status
and helps you
control the flow

Get row
Get column
Check if it is
a legal move
17

Lets look at the code of the main


function:
edit playTicTacToe.m;
Notice the local functions

Weizmann 2010

18

Debugging Run Time


Errors

Our weapons:
Break points

Red
Gray
Modifying a file

Debug buttons

Debug menu
Stop if errors / warn

There are two bugs


Lets find them . .

To the code!
19

func1;

Error

Syntax errors

Lets try to run playTicTacToe

functionfunc1()
func2()
functionfunc2()
Try

Runtime errors

You can plant in the code


disp() massages that will
help you debug.
You should use errors when
the input of the function is
not valid
Debugger

func3();
Catch
disp(Caught);

end
functionfunc3()
func4()
functionfunc4()
A=ones(1,1);
B=A(1,2);

20

Recursion factorial
example
functionres=myFactorial(x)

%check:xisanonnegativeinteger

if(x==0||x==1)
res=1;
else
res=x*myFactorial(x1);
end

Ah ha!
The factorial of 1 is 1!

I dont know what is


factorial of 3
But I know it is 3 multiply
the factorial of 2

I dont know what is


factorial of 2
But I know it is 2 multiply
the factorial of 1

21

Summary

Introduction
Functions M file structure
Functions workspace
Functions Input and output

Top down design


Local functions
Debugger
Recursion
More:

Functions and commands


Functions and the matlab search path
22

Potrebbero piacerti anche