Presentation on theme: "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."— Presentation transcript:
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.2.2,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 (see Matlab book 3.8)
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 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.
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 don’t 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 4.3.3). 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-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 = -3 to 3 and y = -2 to 2. Step 1) solve the equation for z, (continued on the next slide)
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-25 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-26 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 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.