MATLAB Lecture 4. Programming in MATLAB: 4.1 Setting The Search Path
MATLAB Lecture 4. Programming in MATLAB: 4.1 Setting The Search Path
Spring 2007
In the latest versions of MATLAB, the environment supports editing and debugging m-les. Select new from the le menu to begin a new MATLAB program. To modify existing m-les, we choose open from the le menu.
4.2 m-Files
The les of MATLAB programs have the .m extension. One basic application is to group a sequence of commands. For example, a template for the le my script.m may look like function my script % comment about what the script does sequence of statements
If the search path is set right (or when my script.m is in the right directory), executing >> type my_script will display the denition of my script.m. Our rst example sums two numbers. We create a le my sum.m with content: function s = my sum(a,b) % returns the sum of a and b s = a+b; In general, the keyword function is followed by an equation. The right hand side of that equation starts with the name of the function, followed by the sequence of arguments, enclosed by round brackets. The name of the function must correspond to the name of the le. Functions may return multiply multiple results, as the le sumavg.m denes a function that returns sum and average of two numbers: Jan Verschelde, 16 April 2007 UIC, Dept of Math, Stat & CS MATLAB Lecture 4, page 1
MCS 320
Spring 2007
function [sum,avg] = sumavg(a,b) % returns the sum and average of a and b sum = a+b; avg = (a+b)/2; MATLAB does not require type declarations, which allows exible programming.
MCS 320
Spring 2007
The increment may be omitted if it correspond with the default value one. For example in for i=1:10, i will take the values 1 through 10. The increment can be any number, as in for i=1:0.1:10, or may be negative, like in for i=10:1:1, where i ranges over all integer numbers from 10 down to 1. We have seen the syntax for ranges when we created vectors to dene ranges to sample functions for plotting, e.g.: t = -pi:0.1:pi. While the vector t can be created with a for loop, this construction will be very inecient as it requires MATLAB to increase the storage for t dynamically each time a new element is added to the vector. The general structure of the while loop looks like while condition sequence of commands end With break, we exit the innermost for or while loop.
MCS 320
Spring 2007
4.7 Assignments
1. Give an implementation for the function y = staircase(x) dened as follows : 0 if x 1 1 for 1 < x 2 y= 2 if 2 < x Use staircase to make a plot of the function. 2. To plot a function, we rst must generate a range, evaluate the function at that range, and then execute the plot command. Write an implementation for the function plotfun(f,a,b,n) to plot the function f over the interval [a,b] using n+1 equally spaced points. 3. The derivative of a function f can be approximated by
f (x+h)f (x) , h
for h > 0.
Write an m-le to dene the function derive that takes as input a function f and two numbers: h and x. On return is the approximation for the derivative f (x), computed using the formula above. 4. Give the m-le to implement the function avgfun which takes the name of a function and a vector as arguments and returns the average of the function values evaluated at the vector. For a function f , and for a vector x of size n, avgfun returns 1 n
n
f (xi )
i=1
Complete the code below function avgfun(f,x) % returns average of f evaluated at x 5. Write a MATLAB function to implement the composition of two functions. Complete: function y = compose(f,g,x) % % returns f(g(x)) % Give is the MATLAB command to compute sin(cos(3)), using compose. 6. As you may know, 2 converges to one.
MCS 320
Spring 2007
function a = apply (f,x0,n) % % applies the function f n times starting at x0, % e.g, apply(f,x0,0) returns x0 % apply(f,x0,1) returns f(x0) % apply(f,x0,2) returns f(f(x0)), etc... %
2.
7. To nd a xed point x = f (x) for some function f , we may apply the iteration xk+1 = f (xk ), (a) Write the MATLAB function, using prototype function x = fixpti(f,x0,n) % % Applies the fixed-point iteration x(k+1) = f(x(k)) % n times, starting at the point x0. % On return is the final value for x of this iteration. % (b) Give the function call to compute a xed point of x = sin(x), using 30 iterations, and starting at 1. 8. The midpoint rule to compute a denite integral evaluates the function at the midpoint of the b a+b . f (x)dx (b a)f integration interval : 2 a (a) Write an implementation for the function function intval = midpoint1(f,a,b) that returns the integral of f over the interval [a, b] using the midpoint rule. Choose any linear function for f and verify analytically that the midpoint rule returns the exact value of the integral. (b) Dividing [a, b] in n subintervals of equal length, and applying the midpoint rule to each subinn1 b 1 terval, we obtain the approximation f (x)dx hf a + (i + )h , h = ba . n 2 a i=0 Write an implementation for the function intval = midpoint(f,a,b,n) to apply the midpoint rule using n subintervals of [a,b]. Do help quad to learn about the built in MATLAB command to evaluate denite integrals numerically. Compare the result your function gives you with the output of quad. k = 0, 1, . . .