Upload
clinton-lawrence-hancock
View
219
Download
1
Tags:
Embed Size (px)
Citation preview
1
Functions
Advantages
Name, parameters, return info
Flow of the data when running functions
Menus Functions
Applying Functions to Real Projects
2
FunctionsWhy functions?
Clarity – Replace multiple lines of code with a single function call
Modularity – Edit / replacement easily performed without impacting calling program
Reuse – Function can be shared for use with other programs
3
Function Review1 Parameter, 1 Return-Value
1. The problem
2. Recall the layout
3. Create the definition
4. "Flow" of data
5. Testing
4
Functions
Function definition:
The code that performs the task for which the function was created.
function [locs pks]=peakseek(x, minpeakdist, minpeakh)% documentation
<function body>
*Source: http://www.mathworks.com/matlabcentral/fileexchange/26581-peakseek
Terminology:
5
Functions
Function header – top line of function definition
function [locs, pks]=peakseek(x, minpeakdist, minpeakh)
Function name ParametersReturn variables
What you want to call the function; also the main part of the file name
Variables in the function that receive a copy of the input values
Variables in the function that will receive the output values
All of the variables – parameters and return variables - are “local” to the function. This means that they only exist (and are only usable) in the function.
Every function has its own variables!
6
Functions
Function call – the command telling MATLAB to execute the function definition
[indx, xvals] = peakseek(xvector, min_dist, min_h)
Function name – “go execute this function”
Arguments (input values)
Argument variables exist in the calling program – they are NOT variables from the function!
Collection variables – these variables receive the values returned by the function (the values stored in the return variables)
– information to be used by the function. These values are copied into the corresponding parameters of the function
7
FunctionsFunction call
Function headerfunction [locs pks]=peakseek(x, minpeakdist, minpeakh)
[indx xvals] = peakseek(xvector, min_dist, min_h)
Arguments copied into parametersReturn values copied into collection variables
The function body executes: it uses these values to calculate the values of return-values.
8
FunctionsMain program (test.m): Function (peakseek.m):
.
.
.[indx, xvals] = peakseek(xvector, min_dist, min_h)...
function [locs, pks]=peakseek(x,minpeakdist, minpeakh)...
“Going”
“Returning”
Variables inside functions are NOT available in the main program (or other functions). Likewise for variables in the main program – they are not available in the functions! 8
9
Real life: MenusExample function – process menu:
function destination = ShowMenu(dests)% Use it as: destination = ShowMenu(dests)% decides which destination user wants
%find how many option user hass = size(dests);rows = s(1); %store # of rows
choice = 0; %so loop runs oncewhile choice<1 || choice>rows || mod(choice,1)~=0 clc fprintf('Where do you want to go? \n');
%show each destination for d = 1:rows fprintf('%d. %s\n', d, dests(d, :)); end choice = input(‘Enter destination number:'); end
%copy actual final destinationdestination = dests(choice, :);
Example function call
% Make the option listdests = strvcat('Atlanta', 'Chicago', 'New York'); % Call the functionoption = ShowMenu(dests);
Where do you want to go? 1. Atlanta 2. Chicago 3. New YorkEnter destination number:2
10
FunctionsAs programs grow, begin thinking of programs as
sequences of “code blocks”. Code blocks are sections of the program that together perform a task or are naturally aligned.
Frequently, these code blocks fit naturally into functions. Just a few examples:
- showing and processing a menu- reading / writing disk files- numeric computations
function MyPi = approx_pi( n )
% pi = approx_pi( n )
% Approx. pi based on the “circle area” algorithm
% n = number of iterations (~10000000 = 3 DP Accuracy)
% Matthew Verleger ([email protected])q = n;
count = 0;
while( q > 0 )
x = rand(1);
y = rand(1);
if( sqrt(( x^2 + y^2 )) <= 1 )
count = count + 1;
end
q = q - 1;
end
MyPi = 4 * (count/n);
}This is EXACTLY the same code as the single program version
clear
clc
for I = 1:8
N = 10^I;
MyPi = approx_pi( N );
fprintf(‘%d Iterations: pi = %f\n’, N, MyPi);
end
Calling Our Function
q, count, x, and y don’t exist out here!
The Real Advantage of Functions!
function MyPi = approx_pi( n )
% pi = approx_pi( n ) - Approx. pi based on Newton’s algorithm
% n = number of iterations (20 = 6 DP Accuracy)
%Matthew Verleger ([email protected])
MyPi = 0;
for I = 0:n
MyPi = MyPi + ((2^I)*(factorial( I )^2))/factorial( 2*I+1);
end
MyPi = 2*MyPi;
Testing
Experiment in the command window with function calls Replace the parameter by a real value The function returns a value. It is stored in the default
variable name ans as usual.
14
Wrapping Up
To create a function:1. Open the editor, type function, the return-info, the name, the
parameters, the documentation, then the code
2. Save the file. Match the filename with the name of the function.
3. Change the directory so the function shows in the Current Directory panel
4. Test thoroughly in the command window
5. Once complete, build the main code
6. Test thoroughly again!
Now you can combine arrays, functions, loops together from now on!
15
FunctionsMultiple arguments & return values
1. The client's wish
2. Creating the function1. Function's name, Parameter list, Return-info,
Documentation, and Code Body, saving it.
3. Testing in the command window
4. Testing with a main file
5. A new client comes along1. Ignoring return values
16
17
1. The client's wish:
Create a function which receives 3 arguments (a height, a mass and the unit system used) and calculates the BMI value (body-mass-index: a measure of body fat) and the BMI category.
The client also gives these as indications:
BMI Category depends on BMI value:Underweight <=18.5Normal weight = 18.5-24.9Overweight = 25-29.9Obesity = BMI of 30 or greater
Step2. I/O of the function
3 parameters, 2 return-values
18
bmiCalculator()
Unit system
Bmi value
weight
height
Bmi category
2. Determine the return-info
Create a function which receives 3 arguments (a height, a mass, and the unit system used) and calculates the BMI value (body-mass-index: a measure of body fat) and the BMI category.
19
Data calculated becomes return info.When more than one variable comes back enclose the return list inside [ ] .
2. Choose a function name
Create a function which receives 3 arguments (a height, a mass, and the unit system used) and calculates the BMI value (body-mass-index: a measure of body fat) and the BMI category.
20
Name it so it represents what it does
2. Create the parameter list
Create a function which receives 3 arguments (a height, a mass, and the unit system used) and calculates the BMI value (body-mass-index: a measure of body fat) and the BMI category.
21
Inputs received become parameters.Separated by COMMAS all in ( ).
2. Save the function
Save the function in the directory of your choice,
22
• But keep the filename that MATLAB gives you by default.
2. Create the function body
2323
BMI Category depends on BMI value:Underweight <=18.5Normal weight = 18.5-24.9Overweight = 25-29.9Obesity = BMI of 30 or greater
3. "Flow" of data
2424
1. Values for these parameters will come from the arguments in the function call.
3. "Flow" of data
2525
2. Using only the given parameters, this code executes, thus solving for the return values.
One day, if needed, you may define new variables to compute intermediate steps.
Remember that all these variables are deleted when the function is done with its job.
3. Testing - Experiment
This is the ‘experimental’ stage!
27
Hardcoded arguments just to test!
The function returns two VALUES.
>>>>>> Remember to create two VARIABLES capable of holding those two values.
2828
>>[x,y]=bmiCalculator(1.65,55,'metric')
1. PASS
2. USE and CALCULATE
3. STORE RESULTS IN RETURN VARIABLES
4. RETURN
5. COLLECT
Flow of
data
29
4. Testing - Main file
There will now be 2 files in the current directory:
The algorithm is:
% prompt unit system
% prompt height and weight
% calculate bmi and status
% display both
30
4. Code 1 – CLI (Command Line Interface)
1. Ask for inputs.
2. Pass arguments to the function.
4. Show results.
3. Collect the return values.
Almost Wrapping Up
Meet with the client, give the software, go on vacations…
But another client just walks in, having heard of the bmiCalculator… His request is slightly different: "I just care about the category, not the actual value of the bmi.
Can you help me?"
34
35
5. Ignoring Return Values
Suppose a stack of books What if you want the 3rd
book (the yellow one) from the top?
You must collect the 1st and 2nd (red and green) before collecting the 3rd (yellow).
It is exactly the same with the return-values.• They come out in order.• To access the 3rd return value the code must collect the 1st and
2nd.
5. Ignoring Return Values
Every variable UP TO the one wanted must be collected in a variable. (but the later ones may be skipped)
Trick: name the variable trash, dummy, ignore, a word that obviously reflects that it is not-to-be used later.
You may even delete that variable specifically using clear36
Try it! Look at the Workspace.
5. Ignoring Return Values Use the 'tilde' operator
37The ~ indicates "there is no need to store it". COMMA IS MANDATORY.
SAME function, DIFFERENT call. Yay!
MATLAB version 7.9 (R2009b) and up ONLY
38
Previous version of MATLAB Previous versions of MATLAB do not allow the use of the ~
symbol.
Use a dummy variable name to store the data. The name reminds YOU (programmer) that this variable is of no use later on, so choose wisely!
It is a MUST to collect all the return data to the left of the one wanted.
Wrapping Up
Try it out! Type-up this example and make it work. At most, this should take 15 minutes.
In order:
1. Create a function file.
2. Save it and change to the directory where it is.
3. Test and experiment in the command window
4. Create the main file afterwards
Only practice makes perfect, and the more functions you create, the easier programming will get:
INCLUDING the final project!40
41
Common ErrorsProgrammer Defined Functions
1. Using F5
2. “Nothing seems to be different between each run”
3. Lots of words underlined orange
4. Using clear
5. Prompt again within the function
6. Forgetting the commas, and the [ ]
Error 6: Syntax Errors
Know your general syntax rules1. Multiple parameters must be separated by commas.
51
Error 6: Syntax Errors
Know your general syntax rules1. Multiple parameters must be separated by commas.
2. Multiple return-values must be enclosed in square brackets.
3. Omit the equal sign if there is no return value.
52
[ ]
Error 6: Syntax Errors
Know your general syntax rules1. Multiple parameters must be separated by commas.
2. Multiple return-values must be enclosed in square brackets.
3. Omit the equal sign if there is no return value.
53