Engr/Math/Physics 25 Chp3 MATLAB Functions: Part2 Bruce Mayer, PE Licensed Electrical & Mechanical Engineer BMayer@ChabotCollege.edu Engineering/Math/Physics 25: Computational Methods 1 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Learning Goals Understand the difference Built-In and User-Defined MATLAB Functions Write User Defined Functions Describe Global and Local Variables When to use SUBfunctions as opposed to NESTED-Functions Import Data from an External Data-File • As generated, for example, by an Electronic Data-Acquisition System Engineering/Math/Physics 25: Computational Methods 2 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Functions (ReDeaux) MATLAB Has Two Types of Functions 1. Built-In Functions Provided by the Softeware • e.g.; max, min, median 2. User-Defined Functions are .m-files that can accept InPut Arguments/Parameters and Return OutPut Values Engineering/Math/Physics 25: Computational Methods 3 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Array Function Operations MATLAB will treat a variable as an array automatically. For example, to compute the square roots of 7, 11 and 3-5j, type >> u = [7, 11, (3-5j)] >> sqrt(u) ans = 2.6458 3.3166 Engineering/Math/Physics 25: Computational Methods 4 2.1013 - 1.1897i Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Expressing Fcn Arguments We can write sin2 in text, but MATLAB requires parentheses surrounding the 2 • The 2 is called the fcn argument or parameter To evaluate sin2 in MATLAB, type sin(2) • The MATLAB function name must be followed by a pair of parentheses that enclose the argument To express in text the sine of the 2nd element of the array x, we would type sin[x(2)]. • However, in MATLAB you cannot use square brackets or braces in this way, and you must type sin(x(2)) Engineering/Math/Physics 25: Computational Methods 5 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Expressing Fcn Arguments cont Evaluate sin(x2 + 5) → type sin(x.^2 + 5) Evaluate sin(√x+1) → type sin(sqrt(x)+1) Using a function as an argument of another function is called function composition. • Check the order of precedence and the number and placement of parentheses when typing such expressions Every left-facing parenthesis requires a right-facing mate. • However, this condition does NOT guarantee that the expression is CORRECT! Engineering/Math/Physics 25: Computational Methods 6 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Expressing Fcn Arguments cont Another common mistake involves expressions like cos2y, which means (cosy)2. In MATLAB write this expression as (cos(y))^2 or cos(y)^2 Do NOT write the Expression as • cos^2(y) • cos^2y • cos(y^2) >> cos(pi/1.73) ans = -0.2427 >> (cos(pi/1.73))^2 ans = 0.0589 Engineering/Math/Physics 25: Computational Methods 7 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Built-In Trig Functions Command cos(x) cot(x) csc(x) sec(x) sin(x) tan(x) Conventional Math Function Cosine; cos x Cotangent; cot x Cosecant; csc x Secant; sec x Sine; sin x Tangent; tan x MATLAB trig fcns operate in radian mode • Thus sin(5) returns the sine rads 180 rads of 5 rads, NOT the sine of 5°. Engineering/Math/Physics 25: Computational Methods 8 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Built-In Inverse-Trig Functions Command Conventional Math Function acos(x) Inverse cosine; arccos x. acot(x) Inverse cotangent; arccot x. acsc(x) Inverse cosecant; arccsc x asec(x) Inverse secant; arcsec x asin(x) Inverse sine; arcsin x atan(x) Inverse tangent; arctan x atan2(y,x) Four-quadrant inverse tangent Two aTan’s? MATLAB trig-1 fcns also operate in radian mode • i.e., They Return Angles in RADIANS Engineering/Math/Physics 25: Computational Methods 9 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Why Two aTan’s? Consider the Situation at Right 143° (-4,3) x arctan 3 4 x arctan 0.75 36.87 arctan 3 4 arctan 0.75 36.87 37° Due to aTan range (4,-3) −/2 y /2 Engineering/Math/Physics 25: Computational Methods 10 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt 143° Why Two aTan’s? cont (-4,3) Calculator Confusion from 37 arctan 3 4 arctan 3 4 143 37° MATLAB Solves This problem with atan2 which allows input of the CoOrds to ID the proper Quadant MATLAB atan MATLAB atan2 >> q1 = atan(-3/4) q1 = -0.6435 >> q2 = atan(3/-4) q2 = -0.6435 >> q3 = atan2(-3,4) q3 = -0.6435 >> q4 = atan2(3,-4) q4 = 2.4981 Engineering/Math/Physics 25: Computational Methods 11 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt (4,-3) atan2 built into Complex angle As noted in the Discussion of Complex numbers converting between the RECTANGULAR & POLAR forms require that we note the Range-Limits of the atan function MATLAB’s angle function uses atan2 Engineering/Math/Physics 25: Computational Methods 12 >> z1 = 4 - 3j z1 = 4.0000 - 3.0000i >> z2 = -4 + 3j z2 = -4.0000 + 3.0000i >> r1 = abs(z1) r1 = 5 >> r2 = abs(z2) r2 = 5 >> theta1 = atan2(imag(z1),real(z1)) theta1 = -0.6435 >> theta2 = atan2(imag(z2),real(z2)) theta2 = 2.4981 >> z1a = r1 *exp(j *theta1) z1a = 4.0000 - 3.0000i >> z2b = r2 *exp(j *theta2) z2b = -4.0000 + 3.0000i Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt “Degree” Trig Functions MATLAB now has Trig Functions that Operate on angles in DEGREES (º) Example: Y = cosd(θ) • Where is Measured in Degrees cosd(θ) sind(θ) tand(θ) cotd(θ) cscd(θ) secd(θ) Engineering/Math/Physics 25: Computational Methods 13 acosd(y) asind(y) atand(y) acotd(y) acscd(y) asecd(y) NO atan2d(y) though (we’ll make one) Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Built-In Hyperbolic Functions Command cosh(x) coth(x) csch(x) sech(x) sinh(x) tanh(x) Conventional Math Function Hyperbolic cosine. Hyperbolic cotangent Hyperbolic cosecant Hyperbolic secant Hyperbolic sine Hyperbolic tangent Engineering/Math/Physics 25: Computational Methods 14 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Built-In Inverse-Hyp Functions Command Conventional Math Function acosh(x) Inverse Hyperbolic cosine. acoth(x) Inverse Hyperbolic cotangent acsch(x) Inverse Hyperbolic cosecant asech(x) Inverse Hyperbolic secant asinh(x) Inverse Hyperbolic sine atanh(x) Inverse Hyperbolic tangent >> asinh(37) ans = 4.3042 >> asinh(-37) ans = -4.3042 Engineering/Math/Physics 25: Computational Methods 15 >> acosh(37) ans = 4.3039 >> acosh(-37) ans = 4.3039 + 3.1416i Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt User-Defined Functions (UDFs) The first line in a function file must begin with a FUNCTION DEFINITION LINE that has a list of inputs & outputs. • This line distinguishes a function m-file from a script m-file. The 1st Line Syntax: function [output variables] = name(input variables) • Note that the OUTPUT variables are enclosed in SQUARE BRACKETS, while the input variables must be enclosed with parentheses. • The function name (here, name) should be the same as the file name in which it is saved (with the .m extension). Engineering/Math/Physics 25: Computational Methods 16 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt UDF Example The Active m-File Lines function ave3 = avg3(a, b, c) TriTot = a+b+c; ave3 = TriTot/3; • Note the use of a semicolon at the end of the lines. This prevents the values of TriTot and ave3 from being displayed Engineering/Math/Physics 25: Computational Methods 17 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt UDF Example cont “Call” this Function with its OutPut Agrument >> TriAve = avg3(7,13,-3) TriAve = 5.6667 To Determine TriAve the Function takes • a=7 • b = 13 • c = −3 Engineering/Math/Physics 25: Computational Methods 18 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt UDF Example cont Call the avg3 function withOUT its output argument and try to access its internal value, avg3. You will see an error message. >> avg3(-23,19,29) ans = 8.3333 >> ave3 ??? Undefined function or variable 'ave3'. The variable ave3 is LOCAL to the UDF • It’s Value is NOT defined OutSide the UDF Engineering/Math/Physics 25: Computational Methods 19 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt UDF Example cont The variables a, b, & c are local to the function avg3, so unless you pass their values by naming them in the command window, their values will not be available in the workspace outside the function. The variable TriTot is also local to the function. Engineering/Math/Physics 25: Computational Methods 20 >> a=-37; b=73; c=19; >> s = avg3(a,b,c); >> a a = -37 >> b b = 73 >> c c = 19 >> TriTot ??? Undefined function or variable 'TriTot'. Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt UDF – 2nd Example New Function f t e t 6 cost Write Function DecayCos with inputs of t & ω function ecos = DecayCos(t,w) % Calc the decay of a cosine % Bruce Mayer, PE • ENGR25 • 28Jun05 % INPUTS: % t = time (sec) % w = angular frequency (rads/s) % Calculation section: ePart = exp(t/6); w & t can be ecos =cos(w.*t)./ePart; Arrays Engineering/Math/Physics 25: Computational Methods 21 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt UDF – 2nd Example cont Pass Arrays to DecayCos f t e t 6 cost >> p = DecayCos([1:3],[11:13]) p = 0.0037 0.3039 0.1617 Note that in MATLAB • [11:13] [11:1:13] = [ 11, 12, 13] Engineering/Math/Physics 25: Computational Methods 22 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt UDF – Multiple Outputs A function may have more than one output. These are enclosed in square brackets [ ] • The OUPput is on the LEFT-hand side of the “=“ sign in the “function definition” line For example, the function Res computes the Electrical Current, Ires, and Poweri Dissipated, Pres, in an Electrical Resistor given its Resistance, R, v R and Voltage-Drop, v, as input arguments Engineering/Math/Physics 25: Computational Methods 23 Circuit Represent ation Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt UDF – Multiple Outputs cont Calling the function Res for 4.7Ω and 28 V • Res has 2-INputs & 2-OUTputs >> [I1 P1] = res(4.7,28) I1 = 5.9574 P1 = 166.8085 Engineering/Math/Physics 25: Computational Methods 24 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Examples of Fcn Def Lines 1. One input, one output: function [area_square] = square(side) 2. Vector-Brackets are optional for one output: function area_square = square(side) 3. Three inputs, one output (Brackets Optional): function [volume_box] = box(height,width,length) 4. One input, Two outputs (Vector-Brackets Reqd): function [area_circle,circumf] = circle(radius) 5. Output can be a Plot as well as number(s) function sqplot(side) Engineering/Math/Physics 25: Computational Methods 25 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Example Free Fall Consider an object with arbitrary mass, m, falling downward • under the acceleration of gravity • with negligible air-resistance (drag) • With original velocity v0 Take DOWN as POSITIVE direction Engineering/Math/Physics 25: Computational Methods 26 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Example Free Fall cont Use Newtonian Mechanics to analyze the Ballistics of the falling Object The Velocity and Distance-Traveled as a function of time & Original Velocity vt gt v0 1 2 d vt dt d gt v0t 0 2 Engineering/Math/Physics 25: Computational Methods 27 t Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Free Fall/Drop MATLAB Fcn function [dist, vel] = drop(g, v0, t); % Calc Speed and distance-traveled by % dropped object subject to accel of gravity % Bruce Mayer, PE ENGR25 27Jun05 % % Parameter/Argument List % g = accel of gravity % v0 = velocity at drop point (zero-pt) % t = falling time % % Calculation section: vel = g*t + v0; dist = 0.5*g*t.^2 + v0*t; Engineering/Math/Physics 25: Computational Methods 28 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Calling Function drop 1. The variable names used in the function definition may, but need not, be used when the function is called: >> a = 32.17; % ft/s^2 >> v_zero = -17; % ft/s >> tf = 4.3; % s >> [dist_ft, spd_fps] = drop(a, v_zero, tf) dist_ft = 224.3117 spd_fps = 121.3310 Engineering/Math/Physics 25: Computational Methods 29 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Calling Function drop cont 2. The input variables need not be assigned values outside the function prior to the function call: >> [ft_dist, fps_spd] = drop(32.17, -17, 4.3) ft_dist = 224.3117 fps_spd = 121.3310 Engineering/Math/Physics 25: Computational Methods 30 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Calling Function drop cont 3. The inputs and outputs may be arrays: Engineering/Math/Physics 25: Computational Methods 31 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Local Variables The names of the input variables given in the function definition line are local to that function • i.e., the Function sets up a PRIVATE Workspace This means that other variable names can be used when you call the function All variables inside a function are erased after the function finishes executing, except when the same variable names appear in the output variable list used in the function call. Engineering/Math/Physics 25: Computational Methods 32 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Global Variables The global command declares certain variables global, and therefore their values are available to the basic workspace and to other functions that declare these variables global The syntax to declare the variables a, x, and q as GLOBAL is: global a x q Any assignment to those variables, in any function or in the base workspace, is available to all the other functions declaring them global. Engineering/Math/Physics 25: Computational Methods 33 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Private WorkSpace Cmd Window WorkSpace Command Window OUTPUTS from Function-1 INPUTS to Function-1 Function 1 Engineering/Math/Physics 25: Computational Methods 34 Function-1 WorkSpace Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt 143° (-4,3) Make “atan2d” Function function Q = atan2d(Y,X); % Bruce Mayer, PE * 8Sep10 % ENGR25 * Fcn Lecture % % Modifies Built-in Function atan2 to return answer in DEGREES % Q = (180/pi)*atan2(Y,X); >> a1 = atan2d(3,-4) >> a2 = atan2d(-3,4) a1 = a2 = 143.1301 Engineering/Math/Physics 25: Computational Methods 35 -36.8699 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt 37° (4,-3) All Done for Today This workspace for rent Engineering/Math/Physics 25: Computational Methods 36 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Engr/Math/Physics 25 Appendix Bruce Mayer, PE Licensed Electrical & Mechanical Engineer BMayer@ChabotCollege.edu f x 2 x 7 x 9 x 6 3 2 Engineering/Math/Physics 25: Computational Methods 37 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Calling Function drop – 1 1. Make as current directory • C:\Working_Files_Laptop_0505\BMayer\ Chabot_Engineering\ENGR-25_CompMeth\E25_Demo 2. Use FILE => NEW => M-FILE to open m-file editor 3. To Slide-28 and Copy the “drop” Text 4. Paste drop-Text into m-file editor and save-as drop.m Engineering/Math/Physics 25: Computational Methods 38 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Calling Function drop - 2 5. Test drop using SI units >> [y_m, s_mps] = drop(9.8, 2.3, .78) y_m = 4.7752 s_mps = 9.9440>> Engineering/Math/Physics 25: Computational Methods 39 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt Calling Function drop - 3 6. The inputs and outputs may be arrays: >> [ft_fall, fps_vel] = drop(32.17,-17, [0:.5:2.5]) ft_fall = 0 -4.4787 -0.9150 10.6913 30.3400 58.0313 fps_vel = -17.0000 -0.9150 15.1700 31.2550 47.3400 63.4250 This function call produces the arrays ft_fall and fps_vel, each with six values corresponding to the six values of time in the array t. Engineering/Math/Physics 25: Computational Methods 40 Bruce Mayer, PE BMayer@ChabotCollege.edu • ENGR-25_Functions-2.ppt