Ch03 - Faculty
Download
Report
Transcript Ch03 - Faculty
PowerPoint to accompany
Introduction to MATLAB 7
for Engineers
William J. Palm III
Chapter 3
Functions and
Files
Copyright © 2005. The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
AGENDA
What is a function?
How are they helpful in problem solving?
Writing a user-defined Matlab function
Using built in Matlab functions for doing complex math
Finding the min and max of a math curve using vector min
and max functions
Writing a complex valued function to compute a mechanical
system response
3-2
A MATLAB function is…
A package of code stored in a .m-file
Dedicated to a particular task, such as
Calculating a math formula (sqrt)
Organizing values in a vector (sort)
A powerful way to solve complex problems
Big task is broken into subtasks
Subtasks are coded into functions
Functions are tested individually
Entire solution is assembled from functions
Some common mathematical functions: Table 3.1–1
Exponential
exp(x)
Exponential; e x
sqrt(x)
Square root; x
Logarithmic
log(x)
Natural logarithm; ln x
log10(x)
Common (base 10) logarithm;
log x = log10 x
(continued…)
3-3
Some common mathematical functions (continued)
Complex
abs(x)
angle(x)
conj(x)
imag(x)
real(x)
Absolute value.
Angle of a complex number.
Complex conjugate.
Imaginary part of a complex number.
Real part of a complex number.
(continued…)
3-4
Some common mathematical functions
(continued)
Numeric
ceil(x)
fix(x)
floor(x)
round(x)
sign(x)
3-5
Round to nearest integer toward ∞.
Round to nearest integer toward zero.
Round to nearest integer toward -∞.
Round toward nearest integer.
Signum function:
+1 if x > 0; 0 if x = 0; -1 if x < 0.
More? See pages 142-148.
Last week we created circle.m
A SCRIPT file
just like running
matlab commands
only easier to modify
and rerun
Today we create
FUNCTION files
like SCRIPTs but with
more rules for getting
data into and out of
very modular
each function does
only one thing ideally
We begin with
circleFn.m
Our first User Defined Function
User-Defined Functions – how to make your own
The first line in a function file must begin with a function
definition line that has a list of inputs and outputs. This line
distinguishes a function M-file from a script M-file. Its syntax is
as follows:
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).
3-18
More? See pages 148-149.
User-Defined Functions: Example
function z = fun(x,y)
u = 3*x;
z = u + 6*y.^2;
Note the use of a semicolon at the end of the lines. This
prevents the values of u and z from being displayed.
Note also the use of the array exponentiation operator
(.^). This enables the function to accept y as an array.
3-19
(continued …)
User-Defined Functions: Example (continued)
Call this function with its output argument:
>>z = fun(3,7)
z =
303
The function uses x = 3 and y = 7 to compute z.
(continued …)
3-20
You can use arrays as input arguments:
>>r = fun([2:4],[7:9])
r =
300
393
498
3-25
A function may have more than one output. These are
enclosed in square brackets.
For example, the function rectangle computes the area
A and perimeter P of a rectangle, given its length and
width as an input argument.
function [A, P] = rectangle(l,w)
A = l.*w;
% note .* for vector data
P = 2*l + 2*w;
3-26
The function is called as follows, if the length is 4 and
width is 2,
>>[A, P] = rectangle(4,2)
A =
8.0
P =
12.0
if you just want the area you can say:
>>A = rectangle(5,3);
A =
15.0
3-27
Using vector data with rectangle.m
suppose L = [1:0.1:10], W = [10:-0.1:1]
[A P] = rectangle(L, W);
find max area: max(A)
find max area and what index it is at:
[ m, kmax] = max(A)
find the L and W that gave max Area:
Lmax = L(kmax)
Wmax = W(kmax)
Function Checklist
1)What is the name of the function?
2) What are the arguments?
3) What are the return values?
4) What is the first line of the function file?
5) How can you call (use) the function with the desired data?
Complex Numbers
Incorporate i, the square root of -1
Come about naturally in the quadratic
formula for calculating roots of a 2nd order
polynomial.
Vibration Analysis
Complex numbers are used to represent
sinusoidal quantities (in polar form, pairing
a magnitude with a phase)
They allow rapid calculations of sinewaves
phases and amplitude if they are all at the
same frequency
Based on the famous Euler's formula:
The rectangular
and polar
representations
of the complex
number a + ib.
Figure 3.1–1
Engineers often use
degrees for polar
form and the
following format:
M < Ө a+bi
Ө = arctan(b/a)
a = Mcos(Ө)
b = Msin(Ө) and M = sqrt(a2+b2)
3-6
For a great conceptual aid, see tutorial at
http://www.picomonster.com/
Complex numbers allow us to model the
response of systems to sinusoidal
excitation. The complex valued "system
function" (response) codifies a gain factor
and a phase shift that applies to the input
signal.
Input signal is multiplied by complex
response to form output, a scaled, phaseshifted sinewave
System function varies with frequency
2 Forms of complex numbers
Rectangular form:
3 + 4i
Real + Imag*i
-56 + 23i
or X + Yi
Polar form:
Mag < Phs
(in circuits Phs in degrees)
Converting from one form to
another
Polar to Rect:
X = M * cosd(Phs)
Y = M * sind(Phs)
Rect to Polar
M = sqrt( X^2 + Y^2)
Phs = atan2(Y,X) * 180/pi
convert to deg
atan2 ?
Four quadrant arctangent
Perserves proper quadrant of angle
regular atan only gives results –pi/2 to pi/2
atan2(-5,3)
atan2(4, -2)
and so on...
Quadrant II
Quadrant IV
Rectangular to Polar in matlab
Suppose z = X + Yi
abs(z)
returns magnitude
angle(z) returns angle in radians
Polar to Rect in Matlab
Suppose we have a magnitude M and a
phase Q (in radians)
Z = M*cos(Q) + i*M*sin(Q)
Complex Arithmetic in Matlab
All work:
z1 + z2
z1/z2
z1*z2
according to the definition of complex
numbers
Operations with Complex Numbers
>>x = -3 + 4i;
>>y = 6 - 8i;
>>mag_x = abs(x)
mag_x =
5.0000
>>mag_y = abs(y)
mag_y =
10.0000
>>mag_product = abs(x*y)
50.0000
(continued …)
3-7
Operations with Complex Numbers (continued)
>>angle_x = angle(x)
angle_x =
2.2143
>>angle_y = angle(y)
angle_y =
-0.9273
>>sum_angles = angle_x + angle_y
sum_angles =
1.2870
>>angle_product = angle(x*y)
angle_product =
1.2870
3-8
More? See pages 143-145.
Practice using abs( ) and
angle( ) functions