Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction to Matlab & Data Analysis

Similar presentations


Presentation on theme: "Introduction to Matlab & Data Analysis"— Presentation transcript:

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 ) Download: playTicTacToe.m , isLegalMove.m , isPlayerWon.m, getNextMove.m, myFactorial.m Weizmann 2010 ©

2 Goals Top down design 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 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 Variables - The Data Objects, Functions Are The Actions
Input (Object / Data): X = 80 90 95 100 98 88 92 Functions: y = mean(x) y = sum(x) y = max(x) Output: (Data) 91.85 643 100

5 A Function Is a Black Box
Output Input 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 5 5

6 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: function my_sum = sumTwoNums(a,b) my_sum = a+b; The input variables Assign the output variables (else - Matlab will give an error)

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'); my_sum = a+b; First line help: Usage Input Output Examples Testing for proper variables Calculations and Output assignment

8 Each Instance of A Function Run Has Its Own Workspace
Assume we wrote the function: function my_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 y = 4 s = 7 Function Workspace: a = 3 b = 4 my_sum = 7

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 b = 0; otherwise error('Incorrect input'); end y = a*x.^2 + b*x + c; Switch according to input arguments number Default value

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 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 Example - Write a function subtractTwoNums Add Help to the function
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 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 Top Down Design and Debugging – Tic-Tac-Toe Example
Problem specifications: Build a tic-tac-toe game for two players.

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

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

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 A “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

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

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

21 Recursion – factorial example
I don’t know what is factorial of 3 But I know it is 3 multiply the factorial of 2 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 I don’t know what is factorial of 2 But I know it is 2 multiply the factorial of 1 Ah ha! The factorial of 1 is 1!

22 Summary Top down design 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 "Introduction to Matlab & Data Analysis"

Similar presentations


Ads by Google