Sei sulla pagina 1di 24

5-2

What does the Matlab function fplot do?



How to use fzero to find find a root of an equation?

What is a global variable?

How the meshgrid, view and surf functions are
used to create 3-D plots.




Readings: Matlab by Pratap
Chapter 4.3.3,5.6, 6.1,6.3
5-3


>> fplot(@sin, [-10 10]); (plots sin(x) between -10 and 10)
>> xlabel(x-axis);
>> ylabel(y-axis);
>> title(y = sin(x));
>> text(-0.5,-0.5,any text,Fontsize,20); (text starts at (-.5,-.5))
>> grid on;
>> axis([-10 10 -1.5 1.5]); (resize Figure window,
axis([xmin xmax ymin ymax]))


Use the fplot command to plot either built-in or user defined
functions (p. 168)
5-5
We will consider only methods for finding real roots.
Definition (for a function of one variable y = f(x) )
If value r satisfies
f(r) = 0
then r is called a root or a ("zero") of f .

Exact Solutions
For some functions, we can calculate roots exactly;
- Polynomials up to degree 4
- Simple transcendental functions;
sin x = 0, which has an infinite number of roots:

5-6
fzero -- built-in Matlab function for finding one root for a
function y = f(x) that has only one variable.
(see Matlab book p. 94)

Requires a starting point.
The function f must be continuous.
Fast convergence!
Works with polynomials but will return only one real
root if it exits, so use the roots function for polynomials.
5-7
Problem: Find a root of the function f(x) = sin(x) near x= .5 .
>> fzero(@sin, .5)
ans =
1.8428e-18
Notice that sin(0) = 0 but fzero returned a value
close to but not exactly equal to zero .
The expression @sin is called a function handle. A function
handle is a MATLAB value that provides a means of calling
a function indirectly.

Problem: Find a root of the function f(x) = x
2
- e
x
near x= 0 .
>> fzero(x.^2-exp(x) , 0)
ans =
-0.7035
5-8
One form of the fzero function is:
fzero(@function_name, x0)

Where function_name is either the name of a built-in Matlab
function or the name of a user defined function.
x0 is an initial guess for the root. If you have no idea what
x0 should be then try using the fplot function to plot the
function.

Another form of the fzero function is:
fzero(expression in one variable, x0)
5-9
If fzero cannot find a root then it will tell you.
Example
>> fzero(x log(x), 1) % log is natural logarithm
Exiting fzero: aborting search for an interval containing a sign
change because complex function value encountered during
search (Function value at -0.28 is 0.99297-3.1416i)
Check function or try again with a different starting value.
Exiting fzero: aborting search for ...
ans =
NaN
NaN means not a number

If you dont believe this then seeing is believing so ...
>> fplot( @(x) x-log(x) , [0,5] ) % or fplot(x-log(x) , [0,5])
>> axis([-1,5,0,5]);

5-11
All variables declared in a function are local to that
function. That is, assigning or changing the value of a
variable in the function has no affect on a variable with the
same name in the workspace or another function(unless
you pass the value as an argument).
You may want to be able to change the variable in your
workspace or share values with other functions.
To do this you must use the global command (see p98).
Consider the example on the next slide. As a naming
convention, we will use all capital letters for global
variables.
5-12
1. Problem Definition
Write a function named total that returns the sum of the values
passed to it though the input variable x. The function total also
appends the value of x to a global variable named LIST. LIST
contains the history of values passed to the function total.
2. Refine, Generalize, Decompose the problem definition
(i.e., identify sub-problems, I/O, etc.)

Assume x is a scalar. (check to see if total works for row
vectors)
Since LIST is global we must type
global LIST

in both the function total and at the Matlab prompt.
5-13
Natural-Language Algorithm

To add the value of x to the end of the LIST use the
Matlab code:
LIST = [LIST , x];
To return the sum of all values in this new list:
result = sum(LIST);

3. Develop Algorithm (processing steps to solve problem)
5-14
4. Write the Function" (Code)
Use the Matlab editor to create a file total.m .
function result = total(x)
% function result = total(x)
% Programmer: Tom Gambill
% Date: 2/10/01
% Input: a scalar, x
% Output: The function total returns the sum of all values
% passed to this function. If you need to access
% these values, you must use the command
% global LIST
global LIST
LIST = [LIST, x];
result = sum(LIST);
5-15
5. Test and Debug the Code
Note the execution sequence on the next slide.
6. Run Code
Does the function work if x is a row vector?
5-17
(continued from previous slide)
5-18
(continued from previous slide)
We can reset LIST from the Matlab prompt.
(LIST = empty vector)
5-19
Example:
Plot the 3-D surface described by the equation,




in the region in the x-y plane from x = -5 to 5 and
y = -4 to 4.

Step 1) solve the equation for z,





(continued on the next slide)
2 2
4
cos( )*cos( )* 0
x y
x y e z
+
=
2 2
4
cos( )*cos( )*
x y
z x y e
+
=
5-20
Step 2) create two vectors x and y . The values
of x and y will determine the region in the xy
plane over which the surface is plotted.

>> x = linspace(-3,3,7);
>> y = linspace(-2,2,5);

Step 3) Use the meshgrid function to create two
matrices, X and Y . We will use these to
compute Z.

>> [X , Y] = meshgrid(x,y)
5-21
3 2 1 0 1 2 3
3 2 1 0 1 2 3
3 2 1 0 1 2 3
3 2 1 0 1 2 3
3 2 1 0 1 2 3

(
(

(
(

(

(
(


X =
Y =
2 2 2 2 2 2 2
1 1 1 1 1 1 1
0 0 0 0 0 0 0
1 1 1 1 1 1 1
2 2 2 2 2 2 2

(
(

(
(
(
(
(

5-22
Step 4) compute Z by using the X and Y created by meshgrid,
>> R = sqrt(X.^2+Y.^2);
>> Z = cos(X).*cos(Y).*exp(-R./4)
Z =
0.1673 0.0854 .1286 .2524 0.1286 0.854 0.1673
.2426 .1286 0.2050 0.4208 0.2050 .1286 .2426
.4676 .2524 0.4208 1.000 0.4208 .2524 .4676
.2426 .1286 0.2050 0.4208 0.2050 .1286 .2426
0.1673 0.0854 .1286 .2524 .1286 0.08




54 0.1673
(
(
(
(
(
(
(

5-23
Step 4) compute Z by using the X and Y created by meshgrid,
>> R = sqrt(X.^2+Y.^2);
>> Z = cos(X).*cos(Y).*exp(-R./4);
Step 5) graph in 3-D by applying the surface function,
>> surf(X,Y,Z);
5-24
We can use the Matlab functions fzero to find zeros
or roots of a function of one variable.
The function fzero is generic but finds only one root,
the function roots applies only to polynomials but
finds all roots.

The function fplot is used when you have an explicit
function, (user defined or built-in). The plot function
can be used for both explicitly defined functions and
raw data for which we dont know the functional
relationship.

The global command allows more than one function
to share(access) a single copy of a variable. You
can also share the global variable with the active
workspace.

3-D plots can be done in a 5-step process using the
built-in functions meshgrid and surf .

Potrebbero piacerti anche