Scripts and Functions Matlab’s Command prompt is where you can enter commands to be executed immediately… Just like a calculator You can see what you’ve.

Slides:



Advertisements
Similar presentations
Lecture 14 User-defined functions Function: concept, syntax, and examples © 2007 Daniel Valentine. All rights reserved. Published by Elsevier.
Advertisements

Lecture 5.
Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. A Concise Introduction to MATLAB ® William J. Palm III.
A MATLAB function is a special type of M-file that runs in its own independent workspace. It receives input data through an input argument list, and returns.
M AT L AB Programming: scripts & functions. Scripts It is possible to achieve a lot simply by executing one command at a time on the command line (even.
Lecture 2 Introduction to C Programming
Introduction to C Programming
Introduction to C Programming
Chapter 6: User-Defined Functions I
Chapter 6: User-Defined Functions I
Fall 2006AE6382 Design Computing1 2D Plotting in Matlab Learning Objectives Discover how Matlab can be used to construct 2D plots. Topics Structure of.
Introduction to C Programming
Introduction to Array The fundamental unit of data in any MATLAB program is the array. 1. An array is a collection of data values organized into rows and.
Fundamentals of Python: From First Programs Through Data Structures
Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1.
Fortran 1- Basics Chapters 1-2 in your Fortran book.
1 Tips for solving Project 1 Reactor SO 3 SO 2 +O 2.
© The McGraw-Hill Companies, 2006 Chapter 4 Implementing methods.
BRIAN D. HAHN AND DANIEL T. VALENTINE THIRD EDITION Essential MATLAB® for Engineers and Scientists.
Matlab Basics Tutorial. Vectors Let's start off by creating something simple, like a vector. Enter each element of the vector (separated by a space) between.
MATLAB for Engineers 4E, by Holly Moore. © 2014 Pearson Education, Inc., Upper Saddle River, NJ. All rights reserved. This material is protected by Copyright.
Recap Function M-files Syntax of Function M-Files Comments Multiple Input and Output Functions.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 2 Chapter 2 - Introduction to C Programming.
Advanced Topics- Functions Introduction to MATLAB 7 Engineering 161.
What does C store? >>A = [1 2 3] >>B = [1 1] >>[C,D]=meshgrid(A,B) c) a) d) b)
Chapter 3 MATLAB Fundamentals Introduction to MATLAB Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
Chapter 1 – Matlab Overview EGR1302. Desktop Command window Current Directory window Command History window Tabs to toggle between Current Directory &
Chapter 6 Review: User Defined Functions Introduction to MATLAB 7 Engineering 161.
Recap Saving Plots Summary of Chapter 5 Introduction of Chapter 6.
Analyzing Functions (4.16) y=f(x) MATLAB. Functional Analysis includes: Plotting and evaluating a function Finding extreme points Finding the roots (zeros.
Lecture 26: Reusable Methods: Enviable Sloth. Creating Function M-files User defined functions are stored as M- files To use them, they must be in the.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 2 - Introduction to C Programming Outline.
JavaScript Introduction and Background. 2 Web languages Three formal languages HTML JavaScript CSS Three different tasks Document description Client-side.
Fall 2006AE6382 Design Computing1 Scripts and Functions Matlab’s Command prompt is where you can enter commands to be executed immediately… –Just like.
MATLAB (Matrix Algebra laboratory), distributed by The MathWorks, is a technical computing environment for high performance numeric computation and.
Fundamentals of Programming I Overview of Programming
User-Written Functions
Release Numbers MATLAB is updated regularly
Chapter 6: User-Defined Functions I
Prof. Mark Glauser Created by: David Marr
Repetition Structures Chapter 9
Chapter 2 - Introduction to C Programming
Matlab Training Session 4: Control, Flow and Functions
Topics Introduction to Repetition Structures
Introduction to MATLAB for Engineers, Third Edition
Chapter 4 MATLAB Programming
CS1371 Introduction to Computing for Engineers
Basic operations in Matlab
Scripts & Functions Scripts and functions are contained in .m-files
Writing Shell Scripts ─ part 3
Chapter 2 - Introduction to C Programming
Programmazione I a.a. 2017/2018.
Outline Matlab tutorial How to start and exit Matlab Matlab basics.
User-Defined Functions
MATLAB DENC 2533 ECADD LAB 9.
User Defined Functions
Exception Handling Chapter 9.
Chapter 2 - Introduction to C Programming
Chapter 2 - Introduction to C Programming
MATLAB Tutorial Dr. David W. Graham.
Chapter 2 - Introduction to C Programming
Lecture 2 Introduction to MATLAB
Coding Concepts (Basics)
Chapter 2 - Introduction to C Programming
Chapter 6: User-Defined Functions I
Vectors and Matrices In MATLAB a vector can be defined as row vector or as a column vector. A vector of length n can be visualized as matrix of size 1xn.
Experiment No. (1) - an introduction to MATLAB
Chapter 2 - Introduction to C Programming
Matlab Basics Tutorial
Introduction to C Programming
Presentation transcript:

Scripts and Functions Matlab’s Command prompt is where you can enter commands to be executed immediately… Just like a calculator You can see what you’ve done but it must be re-entered at the command prompt to be recalculated Only the results (variables) are retained in the Matlab workspace (diary on will log commands and results to a diary file; diary off disables this) What if you want to enter different values for radius or length? >> length=5.5; >> radius=2.25; >> volume=pi.*radius^2.*length volume = 87.4737 AE6382 Design Computing Fall 2006

Matlab Scripts Matlab scripts are the solution to this problem! You can create a “script” that can be repeatedly executed This is the basic Matlab “program” Scripts are simply text files containing Matlab statements You can use any text editor but the built-in editor indents and uses color to highlight the language syntax Script files always have the “.m” extension, e.g., m-files When a script (m-file) is executed, it is simply read sequentially and each line is presented to the Matlab command prompt just like it was typed by hand Speed and repeatability are key features Matlab control & loop statements (e.g., if, for, while…) can be executed in this way AE6382 Design Computing Fall 2006

Example Script in an m-file Use File/New/M-file to start Matlab editor Save file with .m extension in directory in Matlab’s path Type m-file name at prompt to execute >> myscript Enter the length of a cylinder: 8 Now enter the radius: 2.4 Volume of cylinder is: 144.76 Enter the length of a cylinder: 10 Now enter the radius: 1 Volume of cylinder is: 31.416 >> AE6382 Design Computing Fall 2006

Script Workspace When commands are executed, the results are left in the Matlab BASE workspace. whos will list all the current variables in the workspace Scripts can make use of variables already defined in the Base workspace >> myscript Enter the length of a cylinder: 10 Now enter the radius: 1 Volume of cylinder is: 31.416 >> whos Name Size Bytes Class length 1x1 8 double array radius 1x1 8 double array volume 1x1 8 double array Grand total is 3 elements using 24 bytes >> >> density=100; >> myscript Enter the length of a cylinder: 10 Now enter the radius: 1 Weight of cylinder is: 3141.6 >> AE6382 Design Computing Fall 2006

More Scripts… Try out commands indivudually… Use scripts to collect together commands that can be used to solve more complicated problems. Scripts can call other scripts Can “chain” together individual small programs Each script can be tested and debugged separately PROBLEMS: All scripts share same Base workspace Variables can be confused and mis-used (may accidentally overwrite a previously defined variable) Can’t localize results (create individual workspaces) In other words, we can’t encapsulate variables and constants inside a script where they are hidden from other code. AE6382 Design Computing Fall 2006

Matlab Functions (m-functions) M-functions are like “functions” in algebra Algebra: function is a rule that assigns a value based on specified values of the function arguments Matlab: function is a program that computes a returned variable based on specified values of the function arguments >> cylinder(1,10) ans = 31.4159 AE6382 Design Computing Fall 2006

M-function Structure Function definition Arguments Returned variable function volume=cylinder(radius, length) % CYLINDER computes volume of circular cylinder % given radius and length % Use: % vol=cylinder(radius, length) % volume=pi.*radius^2.*length; Help comments Statements (no end required) NOTE: function names are NOT case sensitive in Windows AE6382 Design Computing Fall 2006

Using M-File Editor to Create a Function From Command menu choose File/New/M-file new edit window will appear with "Untitled" enter code for your new function when saving, make sure file name is same as function name (the file name is what Matlab uses to identify your m-functions) On Your Own: Figure out what all the options in the File, Edit, View & Text menus do… AE6382 Design Computing Fall 2006

Using Comments in M-functions Comments immediately following function statement will be listed by the Matlab Help function Place comments that define what your function does Include comments to illustrate how to use function Include version, date and author >> help cylinder CYLINDER computes volume of circular cylinder given radius and length Use: vol=cylinder(radius, length) >> AE6382 Design Computing Fall 2006

M-function Workspace Each time an m-function is executed, a new workspace is created just for that instance All variables except arguments and returned variable are defined only in the function workspace Function variables are not defined in Base workspace, nor are Base variables defined in function workspace Function workspace is destroyed when function completes Function variables are “hidden” from world (and from accidental misuse or alteration) >> cylinder(1,10) ans = 31.4159 >> whos Name Size Bytes Class ans 1x1 8 double array Grand total is 1 elements using 8 bytes AE6382 Design Computing Fall 2006

M-function Workspace-cont’d You can even define other M-functions inside the first M-function! These are called “sub-functions” Each has its own local function workspace independent of any other function workspace These workspaces are created and destroyed with each function invocation (nothing persists between invocations) Sub-functions are available only inside the primary function and can be used in other sub-functions Convention: begin sub-functions with local_myfun(…) On your own: find out about Matlab’s “private” functions AE6382 Design Computing Fall 2006

global Variables Sometimes it is awkward to provide ALL variables to function in arguments “Fixed” variables are a good case These are often called “parameters” Consider a new variable “density” in our examples Suppose is doesn’t change for all of our examples Why have to enter it as a third argument each time? Solution: global variables Declaring a variable as global in a workspace means that it may be accessed in another workspace if it is also declared as a global variable in that workspace too. Convention suggests using UPPER CASE to delineate all global variables Don’t use global variables unless all else fails… they can cause a myriad of problems and are considered dangerous! AE6382 Design Computing Fall 2006

Example of the global Statement DENSITY is shared in both the Base and the function workspaces Any function that includes DENSITY in its global statement will also share this variable >> global DENSITY >> DENSITY=100; >> cylinderwt(1,10) ans = 3.1416e+003 AE6382 Design Computing Fall 2006

M-functions Can Return Multiple Values The returned variable from an M-function can be a scalar or an array (even a cell array) M-functions can use the [ ] constructor to return an array formed from multiple scalar values >> [area, volume]=cylinderAV(1,10) area = 69.1150 volume = 31.4159 >> result=cylinderAV(1,10) result = >> whos Name Size Bytes Class ans 1x1 8 double array area 1x1 8 double array result 1x1 8 double array volume 1x1 8 double array Note that using only a single returned variable receives only the first of multiple values AE6382 Design Computing Fall 2006

M-functions are the Core of Matlab Matlab scripts must be processed line by line by the command processor: TIME CONSUMING, SLOW! M-functions are compiled into “p-code” the first time they are invoked and this p-code is then executed This is MUCH faster than command interpretation Editing an M-function will discard the old p-code Repeated function executions are much faster this way! You can force-compile an M-function into p-code and save the p-code in a “p-file” pcode myfunction creates myfunction.p The p-code can be distributed just like an M-function Users cannot easily decode your function Learn to make use of M-functions! AE6382 Design Computing Fall 2006

More M-function Details If you encounter an error condition in a function: Executing the error('…') function will exit the function and terminate your script in the command window A less traumatic solution is the warning('…') function which is similar but continues execution in the function M-functions can be invokes using fewer arguments that specified in the function definition Use the nargin function to determine the actual number of input arguments supplied in a given invocation of the function Your function must then predefine those arguments that are not supplied by the invocation The nargout function is similar for output (return) arguments AE6382 Design Computing Fall 2006

Example M-function (tic / toc ) %TIC Start a stopwatch timer. % The sequence of commands % TIC, operation, TOC % prints the number of seconds required for the operation. % % See also TOC, CLOCK, ETIME, CPUTIME. % Copyright 1984-2000 The MathWorks, Inc. % $Revision: 5.8 $ $Date: 2000/06/01 16:09:45 $ % TIC simply stores CLOCK in a global variable. global TICTOC TICTOC = clock; function t = toc %TOC Read the stopwatch timer. % TOC, by itself, prints the elapsed % time (in seconds) since TIC was used. % t = TOC; saves the elapsed time in t, % instead of printing it out. % % See also TIC, ETIME, CLOCK, CPUTIME. % Copyright 1984-2000 The MathWorks, Inc. % $Revision: 5.9 $ $Date: 2000/06/01 16:09:47 $ % TOC uses ETIME and the value of CLOCK % saved by TIC. global TICTOC if isempty(TICTOC) error('You must call TIC before calling TOC.'); end if nargout < 1 elapsed_time = etime(clock,TICTOC) else t = etime(clock,TICTOC); AE6382 Design Computing Fall 2006

And More Details… How are M-functions located? Suppose Matlab encounters a name, velocity check to see if velocity is a variable in current workspace? is velocity a built-in Matlab function? is velocity a sub-function in the current function? is velocity.p (and then velocity.m) a private function? is velocity.p (and then velocity.m) in the current directory? is velocity.p (and then velocity.m) in the Matlab path, searching from the current directory down? The first instance is used and any others are ignored This can cause problems if you don’t understand… It can also let you replace functions with different versions It is not quite like “overloading” in object-oriented languages… AE6382 Design Computing Fall 2006

A Special M-function: feval Sometimes you may want to pass along the NAME of a function that you want another function to use… Suppose you have an M-function called, fmax, and it finds the maximum of a given function, like the one shown below. Suppose you invoke fmax as: [f, x]=fmax(x0, x1) where f is the max value which occurs at x in the range x0x1 How do you tell fmax to use myfunc(x) which defines f(x)? f(x) x f(x)=myfunc(x) AE6382 Design Computing Fall 2006

feval - continued Use the feval function: a = feval(‘myfunc’, x) Is equivalent to: a = myfun(x) » y=sin(pi/4) y = 0.7071 » yy=feval('sin', pi/4) yy = NOTE: feval shouldn't be used to replace normal function calls… AE6382 Design Computing Fall 2006

Use of feval in an M-function Let's create an M-function to evaluate an arbitrary function that we will define with another M-function call it "evaluate" see listing below (or help) for calling syntax To use this, we will need to write another M-file to define our own special function. myfun will contain the function name as a string (or explicit call) we must specify the start, stop values and number of points AE6382 Design Computing Fall 2006

Example: Using evaluate() Here is a particular user-defined function to evaluate over the specified range of x values Executing: And here is the graphical result… >> [x,y]=evaluate('trig',0,5.*pi,100); >> plot(x,y), xlabel('x'), ylabel('y') >> AE6382 Design Computing Fall 2006

A More Complicated Example Suppose we want to find the minimum of a function Let's use the "humps" function in Matlab (rather than writing one) Let's use Matlab's powerful fminbnd function >> x=-0.5:0.05:2; >> y=humps(x); >> plot(x,y), xlabel('x'), ylabel('y') >> Minimum AE6382 Design Computing Fall 2006

Using fminbnd() See help fminbnd and the textbook for many more details about this function… On your own: figure out how to find zeros (roots) >> x=-0.5:0.05:2; >> y=humps(x); >> plot(x,y), xlabel('x'), ylabel('y') >> edit humps.m >> [x,y]=fminbnd('humps', 0.4, 1.0) x = 0.6370 y = 11.2528 >> hold on >> plot(x,y,'ro') >> NOTE: maxima of f(x) are minima of -f(x) AE6382 Design Computing Fall 2006

Application: Solving ODE’s Matlab includes a number of functions to solve Ordinary Differential Equations (ODE’s), including Initial Value Problems (IVP’s), Boundary Value Problems (BVP’s) and Partial Differential Equations (PDE’) Let’s consider a simple IVP in the form of a familiar ODE (an sdof vibration problem): Matlab’s ode23() and ode(45) functions use the Runge-Kutta-Fehlberg method to solve ODE’s expressed as: AE6382 Design Computing Fall 2006

Solving an ODE: setup We can convert an Nth order ODE into N first order ODE’s using a simple algorithm: In more compact forms: or AE6382 Design Computing Fall 2006

Matlab ode45( ) Syntax >> help ode45 ODE45 Solve non-stiff differential equations, medium order method. [T,Y] = ODE45(ODEFUN,TSPAN,Y0) with TSPAN = [T0 TFINAL] integrates the system of differential equations y' = f(t,y) from time T0 to TFINAL with initial conditions Y0. Function ODEFUN(T,Y) must return a column vector corresponding to f(t,y). Each row in the solution array Y corresponds to a time returned in the column vector T. To obtain solutions at specific times T0,T1,...,TFINAL (all increasing or all decreasing), use TSPAN = [T0 T1 ... TFINAL]. (truncated) [T,Y] are the returned values and each row defines a value of t where the solution is computed along with the corresponding solutions, yi , in successive columns. But we need to provide a function to compute f(t,y) whenever ode45( ) needs it… We also need to specify the start and end times and initial conditions in the arguments to ode45( ) AE6382 Design Computing Fall 2006

rhs( ) function for ode45( ) m-function will compute f(t,y) for ode45( ) returns the RHS column vector NOTE: If you need to pass parameter values to compute the RHS (e.g, zeta or g(t)), these can be added to the ode45( ) function call (see help ode45) AE6382 Design Computing Fall 2006

Solving the Problem… See help ode45 for more options >> [tt,yy]=ode45('rhs', [0 35],[1 0]'); >> whos Name Size Bytes Class tt 205x1 1640 double array yy 205x2 3280 double array Grand total is 615 elements using 4920 bytes >> plot(tt,yy(:,1)) See help ode45 for more options You supply this m-function… Note the sizes of the returned variables You can plot either column of yy as needed How would you construct a phase plane plot (e.g., y versus y’)? AE6382 Design Computing Fall 2006

A More Interesting RHS… Note how g(t) is formed here Result is familiar square pulse with ringing oscillations AE6382 Design Computing Fall 2006