[email protected] engr-25_functions-2.ppt 1 bruce mayer, pe engineering/math/physics 25:...

40
[email protected] • ENGR-25_Functions-2.ppt 1 Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods Bruce Mayer, PE Licensed Electrical & Mechanical Engineer [email protected] Engr/Math/Physics 25 Chp3 MATLAB Functions: Part2

Upload: nelson-hersom

Post on 14-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

[email protected] • ENGR-25_Functions-2.ppt1

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Bruce Mayer, PELicensed Electrical & Mechanical Engineer

[email protected]

Engr/Math/Physics 25

Chp3 MATLABFunctions:

Part2

[email protected] • ENGR-25_Functions-2.ppt2

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt3

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt4

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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 2.1013 - 1.1897i

[email protected] • ENGR-25_Functions-2.ppt5

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt6

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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!

[email protected] • ENGR-25_Functions-2.ppt7

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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))^2ans = 0.0589

[email protected] • ENGR-25_Functions-2.ppt8

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Built-In Trig Functions

MATLAB trig fcns operate in radian mode • Thus sin(5) returns the sine

of 5 rads, NOT the sine of 5°.

Command Conventional Math Functioncos(x) Cosine; cos x

cot(x) Cotangent; cot x

csc(x) Cosecant; csc x

sec(x) Secant; sec x

sin(x) Sine; sin x

tan(x) Tangent; tan x

rads

rads

180

[email protected] • ENGR-25_Functions-2.ppt9

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Built-In Inverse-Trig Functions

MATLAB trig-1 fcns also operate in radian mode• i.e., They Return Angles in RADIANS

Command Conventional Math Functionacos(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 tangentTwo

aTan’s?

[email protected] • ENGR-25_Functions-2.ppt10

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Why Two aTan’s?

Consider the Situation at Right

(-4,3)(-4,3)(-4,3)

(4,-3)

37°

143°

87.3675.0arctan

43arctan

87.3675.0arctan

43arctan

x

x

Due to aTan range

−/2 y /2

[email protected] • ENGR-25_Functions-2.ppt11

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Why Two aTan’s? cont

Calculator Confusion from

(-4,3)(-4,3)(-4,3)

(4,-3)

37°

143°

14343arctan43arctan37

MATLAB Solves This problemwith atan2 which allows input of the CoOrds to ID the proper Quadant

MATLAB atan>> q1 = atan(-3/4)q1 = -0.6435>> q2 = atan(3/-4)q2 = -0.6435

MATLAB atan2>> q3 = atan2(-3,4)q3 = -0.6435>> q4 = atan2(3,-4)q4 = 2.4981

[email protected] • ENGR-25_Functions-2.ppt12

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

>> z1 = 4 - 3jz1 = 4.0000 - 3.0000i >> z2 = -4 + 3jz2 = -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

[email protected] • ENGR-25_Functions-2.ppt13

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

“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(θ)

acosd(y) asind(y) atand(y) acotd(y) acscd(y) asecd(y)

NO atan2d(y)

though(we’llmake one)

[email protected] • ENGR-25_Functions-2.ppt14

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Built-In Hyperbolic FunctionsCommand Conventional Math Function

cosh(x) Hyperbolic cosine.

coth(x) Hyperbolic cotangent

csch(x) Hyperbolic cosecant

sech(x) Hyperbolic secant

sinh(x) Hyperbolic sine

tanh(x) Hyperbolic tangent

[email protected] • ENGR-25_Functions-2.ppt15

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Built-In Inverse-Hyp FunctionsCommand Conventional Math Functionacosh(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

>> acosh(37)ans = 4.3039>> acosh(-37)ans = 4.3039 + 3.1416i

[email protected] • ENGR-25_Functions-2.ppt16

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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).

[email protected] • ENGR-25_Functions-2.ppt17

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

UDF Example

The Active m-File Linesfunction 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

[email protected] • ENGR-25_Functions-2.ppt18

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt19

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt20

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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.

>> a=-37; b=73; c=19;>> s = avg3(a,b,c);>> aa = -37>> bb = 73>> cc = 19>> TriTot??? Undefined function or variable 'TriTot'.

[email protected] • ENGR-25_Functions-2.ppt21

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

UDF – 2nd Example

New Function

tetf t cos6 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);ecos =cos(w.*t)./ePart;

w & t can be Arrays

[email protected] • ENGR-25_Functions-2.ppt22

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

UDF – 2nd Example cont

Pass Arrays to DecayCos tetf t cos6>> 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]

[email protected] • ENGR-25_Functions-2.ppt23

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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 Power-Dissipated, Pres, in an Electrical Resistor given its Resistance, R, and Voltage-Drop, v,as input arguments

R

v

i

ation Represent Circuit

[email protected] • ENGR-25_Functions-2.ppt24

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt25

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Examples of Fcn Def Lines1. 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)

[email protected] • ENGR-25_Functions-2.ppt26

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt27

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Example Free Fall cont

0vgttv tvgtddttvdt

02

0 2

1

Use Newtonian Mechanics to analyze the Ballistics of the falling Object

The Velocity and Distance-Traveled as a function of time & Original Velocity

[email protected] • ENGR-25_Functions-2.ppt28

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Free Fall/Drop MATLAB Fcnfunction [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;

[email protected] • ENGR-25_Functions-2.ppt29

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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.3117spd_fps =121.3310

[email protected] • ENGR-25_Functions-2.ppt30

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt31

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Calling Function drop cont

3. The inputs and outputs may be arrays:

[email protected] • ENGR-25_Functions-2.ppt32

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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.

[email protected] • ENGR-25_Functions-2.ppt33

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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.

[email protected] • ENGR-25_Functions-2.ppt34

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Private WorkSpace

Cmd WindowWorkSpace

Function-1WorkSpace

CommandWindow

Function1

INPUTS toFunction-1

OUTPUTS fromFunction-1

[email protected] • ENGR-25_Functions-2.ppt35

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Make “atan2d” Functionfunction 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)

a1 =

143.1301

>> a2 = atan2d(-3,4)

a2 =

-36.8699

(-4,3)(-4,3)(-4,3)

(4,-3)

37°

143°

[email protected] • ENGR-25_Functions-2.ppt36

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

All Done for Today

Thisworkspacefor rent

[email protected] • ENGR-25_Functions-2.ppt37

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Bruce Mayer, PELicensed Electrical & Mechanical Engineer

[email protected]

Engr/Math/Physics 25

Appendix

6972 23 xxxxf

[email protected] • ENGR-25_Functions-2.ppt38

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

Calling Function drop – 1

1. Make as current directory• C:\Working_Files_Laptop_0505\BMayer\

Chabot_Engineering\ENGR-25_Comp-Meth\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

[email protected] • ENGR-25_Functions-2.ppt39

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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

[email protected] • ENGR-25_Functions-2.ppt40

Bruce Mayer, PE Engineering/Math/Physics 25: Computational Methods

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.