Download presentation

Presentation is loading. Please wait.

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

Similar presentations

OK

Chapter 8 and 9 Review: Logical Functions and Control Structures Introduction to MATLAB 7 Engineering 161.

Chapter 8 and 9 Review: Logical Functions and Control Structures Introduction to MATLAB 7 Engineering 161.

© 2018 SlidePlayer.com Inc.

All rights reserved.

Ads by Google

Ppt on electric meter testing jobs Short ppt on french revolution Display ppt online Ppt on social media analytics Ppt on needle stick injury at work Ppt on accounts receivable management Ppt on 9/11 conspiracy theories Ppt on classical economics versus Ppt on international business management Download ppt on fundamental rights and duties citizens