260 likes | 270 Views
Learn how to plot functions with fplot and find roots using fzero. Understand global variables and create 3D plots using meshgrid and surf. Discover solutions for functions of one variable. Practice with examples and explore function handles.
E N D
What will I learn in this lecture? 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.2.2,4.3.3,5.6, 6.1,6.3
fplot Use the fplot command to plot either built-in or user defined functions (see Matlab book 3.8) >>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]))
Roots of functions of one variable • 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: We will consider only methods for finding real roots.
fzero - finds roots of functions • fzero -- built-in Matlab function for finding one root for a function y = f(x) that has only one variable. • (see Matlab book 4.2.2, 5.6) • 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.
Using fzero - An Example 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) = x2 - ex near x= 0 . >> fzero(‘x.^2-exp(x)’ , 0) ans = -0.7035
fzero - Matlab function 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. x0is an initial guess for the root. If you have no idea whatx0 should be then try using thefplotfunction to plot the function. Another form of the fzero function is: fzero(‘expression in one variable’, x0)
Using fzero - when it doesn't find a root 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 = NaNNaN means “not a number”
If you don’t believe this then “seeing is believing” so ...>> fplot( @(x) x-log(x) , [0,5] ) % orfplot(‘x-log(x)’ , [0,5])>> axis([-1,5,0,5]);
global Variables 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 4.3.3). Consider the example on the next slide. As a naming convention, we will use all capital letters for global variables.
Function - total 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.) Assumex is a scalar. (check to see if total works for row vectors) Since LIST is global we must type globalLIST in both the function total and at the Matlab prompt.
Function - total 3. Develop Algorithm (processing steps to solve problem) 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);
Function - total 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);
Function - total 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?
Function - total (continued from previous slide)
Function - total (continued from previous slide)We can reset LIST from the Matlab prompt. (LIST = empty vector)
3-D Plotting Example: Plot the 3-D surface described by the equation, in the region in the x-y plane from x = -3 to 3 and y = -2 to 2. Step 1) solve the equation for z, (continued on the next slide)
3-D Plotting Step 2) create two vectors xand y . The values of x andy 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)
3-D Plotting X = Y =
3-D Plotting X Y
3-D Plotting Step 4) compute Z by using the X and Y created by meshgrid, >>Z = cos(X).*cos(Y).*exp(-sqrt(X.^2+Y.^2)./4) Z =
3-D Plotting X Y Z
3-D Plotting 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);
What have I learned in this lecture? 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 andraw data for which we don’t 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 .