Presentation is loading. Please wait.

Presentation is loading. Please wait.

Weizmann 2010 © 1 Introduction to Matlab & Data Analysis Tutorial 7: Functions and Program Design Please change directory to directory E:\Matlab (cd E:\Matlab;)

Similar presentations


Presentation on theme: "Weizmann 2010 © 1 Introduction to Matlab & Data Analysis Tutorial 7: Functions and Program Design Please change directory to directory E:\Matlab (cd E:\Matlab;)"— Presentation transcript:

1 Weizmann 2010 © 1 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 )http://www.weizmann.ac.il/midrasha/courses/MatlabIntro//course_outline.htm Download: playTicTacToe.m, isLegalMove.m, isPlayerWon.m, getNextMove.m, myFactorial.m

2 2 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

3 3 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

4 4 Variables - The Data Objects, Functions Are The Actions X = Input (Object / Data): Functions: y = mean(x)y = sum(x)y = max(x) Output: (Data)

5 5 A Function Is a Black Box 5 InputOutput function A function is a black box It hides the code and its workspace and communicates with the “world” using the input and output variables

6 6 Functions M file structure function my_sum = sumTwoNums(a,b) my_sum = a+b; The file is a Matlab functionThe output variables (if there are few use []: [out1 out2] ) Assign the output variables (else - Matlab will give an error) Should be same as the name of the file sumTwoNums.m: The input variables

7 7 Functions Documentation and Variable Verification function my_sum = sumTwoNums(a,b) % SUMTWONUMS sum to scalars % this function sums two scalar % and returns the result % INPUT: % a - the first scalar % b - the second scalar % % OUTPUT: % my_sum - the sum of a and b; sum = a+b if (~isscalar(a)) error('First argument is not a scalar'); end if (~isscalar(b)) error('Second argument is not a scalar'); end my_sum = a+b; First line help: Usage Input Output Examples Testing for proper variables Calculations and Output assignment

8 8 Each Instance of A Function Run Has Its Own Workspace In the workspace we run: a = 1; b = 2; x = 3; y = 4; s = sumTwoNums(x, y) What is the output? s = 7 function my_sum = sumTwoNums(a,b) my_sum = a + b; Assume we wrote the function: Matlab Workspace:  a = 1  b = 2  X = 3  y = 4  s = 7 Function Workspace:  a = 3  b = 4  my_sum = 7

9 9 Matlab Functions Can Be Called With Fewer Input Arguments Than Specified Consider a function that computes function y = calSecondOrderPoly(x, a, b, c) switch nargin case 4 % do nothing case 3 c = 0; case 2 c = 0; b = 0; otherwise error('Incorrect input'); end y = a*x.^2 + b*x + c; Switch according to input arguments number Default value

10 10 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);

11 11 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; if nargout == 2 y_derivative = 2*a*x + b; end Checks number of output arguments Can help avoid expensive computations when they are not necessary

12 12 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]

13 13 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

14 14 Top Down Design and Debugging – Tic-Tac-Toe Example Problem specifications: Build a tic-tac-toe game for two players.

15 15 Lets break the problem top-down Play Tic-Tac-Toe Get Next Move Get rowGet column Check whether the move is legal Display the game matrix Update the game matrix Check for a winner Announce the winner Initiate the game matrix Have some game matrix

16 16 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 1NaN 2 ‘ X ‘‘ – ‘ ‘ O ‘‘ – ‘ “Num_mat” - 3x3 numeric matrix“display_mat” - 3x9 char matrix

17 17 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 ( for i=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 Get row Get column Check if it is a legal move “Flags” – A variable which holds information about the program status and helps you control the flow A

18 Weizmann 2010 © 18 Lets look at the code of the main function: edit playTicTacToe.m; Notice the local functions

19 19 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!

20 20 Error Syntax errors – Lets try to run playTicTacToe 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 … function func1() func2() function func2() Try func3(); Catch disp(‘Caught’); end function func4 () A = ones(1,1); B = A(1,2); func1; function func3() func4()

21 21 Recursion – factorial example function res = myFactorial(x) % check: x is a non-negative integer if (x == 0 || x == 1) res = 1; else res = x * myFactorial(x-1); end Ah ha! The factorial of 1 is 1! I don’t know what is factorial of 3 But I know it is 3 multiply the factorial of 2 I don’t know what is factorial of 2 But I know it is 2 multiply the factorial of 1

22 22 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


Download ppt "Weizmann 2010 © 1 Introduction to Matlab & Data Analysis Tutorial 7: Functions and Program Design Please change directory to directory E:\Matlab (cd E:\Matlab;)"

Similar presentations


Ads by Google