Title: Advanced Plotting
 1Chapter 5 Advanced Plotting and Model Building 
 2- Matlab, Maple  Mathematica  plots are part of 
the package!!!  - Type help graph2d or graph3d to get help
 
  35-2
Anatomy of a typical xy (2D) plot. Figure 5.11
Scale on axis  range and spacing of the 
numbers. Here both axis are linear (later will 
see logarithmic). 
More? See pages 260-261. 
 45-3
The following MATLAB session plots y  0.4 Ö1.8x 
for 0  x  52, where y represents the height of 
a rocket after launch, in miles, and x is the 
horizontal (downrange) distance in miles. gtgtx  
00.152  create vector of finely spaced 
pts gtgty  0.4sqrt(1.8x)  to produce a smooth 
curve gtgtplot(x,y) gtgtxlabel(Distance 
(miles)) gtgtylabel(Height (miles)) gtgttitle(Roc
ket Height as a Function of Downrange 
Distance,num2str(dist))
The resulting plot is shown on the next slide. 
 55-4
The autoscaling feature in MATLAB selects 
tick-mark spacing. Figure 5.12 
 65-5
- The plot will appear in the Figure window. 
 - You can obtain a hard copy of the plot in several 
ways  - Use the menu system. Select Print on the File 
menu in the Figure window.  -  Answer OK when you are prompted to continue the 
printing process.  - Type print at the command line. 
 -  This command sends the current plot directly to 
the printer.  - Save the plot to a file to be printed later or 
imported into another application such as a word 
processor.  -  You need to know something about graphics file 
formats to use this file properly.  -  See the subsection Exporting Figures. 
 
  75-6
 Note that using the Alt-Tab key combination in 
Windows-based systems will return you to the 
Command window without closing the figure window. 
 If you do not close the window, it will not 
reappear when a new plot command is executed. 
 However, the figure will still be updated. 
 85-7
- Requirements for a Correct Plot 
 - The following list describes the essential 
features of any plot  - Each axis must be labeled with the name of the 
quantity being plotted and its units!  -  If two or more quantities having different units 
are plotted (such as when plotting both speed and 
distance versus time), indicate the units in the 
axis label if there is room, or in the legend or 
labels for each curve.  - Each axis should have regularly spaced tick marks 
at convenient intervals  not too sparse, but not 
too dense with a spacing that is easy to 
interpret and interpolate.  -  For example, use 0.1, 0.2, and so on, rather 
than 0.13, 0.26, and so on. 
(continued ) 
 95-8
Requirements for a Correct Plot (continued)
- If you are plotting more than one curve or data 
set, label each on its plot or use a legend to 
distinguish them.  - If you are preparing multiple plots of a similar 
type or if the axes labels cannot convey enough 
information, use a title.  - If you are plotting measured data, plot each data 
point with a symbol such as a circle, square, or 
cross (use the same symbol for every point in the 
same data set).  -  If there are many data points, plot them using 
the dot symbol. 
(continued ) 
 105-9
Requirements for a Correct Plot (continued)
- Sometimes data symbols are connected by lines to 
help the viewer visualize the data, especially if 
there are few data points.  -  However, connecting the data points, especially 
with a solid line, might be interpreted to imply 
knowledge of what occurs between the data points. 
Thus you should be careful to prevent such 
misinterpretation.  - If you are plotting points generated by 
evaluating a function (as opposed to measured 
data), do not use a symbol to plot the points.  -  Instead, be sure to generate many points, and 
connect the points with solid lines. 
  115-10
The grid and axis Commands The grid command 
displays gridlines at the tick marks 
corresponding to the tick labels. Type grid on 
to add gridlines type grid off to stop plotting 
gridlines. You can use the axis command to 
override the MATLAB selections for the axis 
limits. The basic syntax is axis(xmin xmax ymin 
ymax). This command sets the scaling for the x- 
and y-axes to the minimum and maximum values 
indicated. Note that, unlike an array, this 
command does not use commas to separate the 
values. axis square, equal, auto
More? See pages 264-265. 
 125-11
The effects of the axis and grid commands. 
Figure 5.13 
 135-12
Plot of Complex numbers The plot(y) function 
plots the values in y versus the indices. 
 However, if y is complex plot(y) plots the 
imaginary parts vs real parts, i.e. plot( 
real(y) , imag(y) ) In all other variants of the 
plot function, it ignores the imaginary parts. 
Example z  0.3  0.7i n  00.001100 plot(z
.n) xlabel('Real') ylabel('Imaginary') axis equal 
 145-13
The fplot  smart command for plotting functions 
- plots function specified as string. It 
automatically analyzes the function to pick 
proper spacing, so that plot will show all the 
features of the function  adaptive 
plotting. Syntax is fplot(string,xmin xmax 
ymin ymax) x,y  fplot(cos(tan(x))  
tan(sin(x)),1,2) - automatically picked 
denser points in the more complicated region 
 155-14
Contrast the previous plot with x  10.012 
 y  cos(tan(x))  tan(sin(x)) plot(x,y)  
much less detailed Another form is 
x,yfplot(string,limits)  returns abscissa 
and ordinate values in the column vectors x and 
y, but no plot is produced. The returned values 
can be used for plotting multiple curves etc 
 165-15
Plotting Polynomials with the polyval 
Function. To plot the polynomial 2x5 4x3  2x2 
 10 over the range 4  x  4 with a spacing of 
0.01, you type gtgtx  -40.014  
setting the spacing gtgtp  2,0,-4,2,0,10  
setting the coefficients gtgtplot(x,polyval(p,x)) gtgt
xlabel(x) gtgtylabel(p) 
More? See page 268. 
 175-16
An example of a Figure window. Figure 5.17 
 185-17
Saving Figures To save a figure that can be 
opened in subsequent MATLAB sessions, save it in 
a figure file with the .fig file name extension. 
 To do this, select Save from the Figure window 
File menu or click the Save button (the disk 
icon) on the toolbar. If this is the first time 
you are saving the file, the Save As dialog box 
appears. Make sure that the type is MATLAB 
Figure (.fig). Specify the name you want 
assigned to the figure file. Click OK. 
 195-18
- Exporting Figures 
 - To save the figure in a format that can be used 
by another application, such as the standard 
graphics file formats TIFF or EPS, perform these 
steps  - Select Export Setup from the File menu. 
 -  This dialog lets you specify options for the 
output file, such as the figure size, fonts, line 
size and style, and output format.  - Select Export from the Export Setup dialog. 
 -  A standard Save As dialog appears. 
 - Select the format from the list of formats in the 
Save As type menu.  -  This selects the format of the exported file and 
adds the standard file name extension given to 
files of that type.  - 4. Enter the name you want to give the file, 
less the extension. Then click Save. 
More? See pages 270-271. 
 205-19
- On Windows systems, you can also copy a figure to 
the clipboard and then paste it into another 
application  - Select Copy Options from the Edit menu. The 
Copying Options page of the Preferences dialog 
box appears.  - Complete the fields on the Copying Options page 
and click OK.  - 3. Select Copy Figure from the Edit menu.
 
  215-20
Subplots Matlab can create array of rectangular 
panes  subplots. The syntax is 
subplot(m,n,p). This command divides the Figure 
window into an array of rectangular panes with m 
rows and n columns. The variable p tells MATLAB 
to place the output of the plot command following 
the subplot command into the pth pane. For 
example, subplot(3,2,5) creates an array of six 
panes, three panes deep and two panes across, and 
directs the next plot to appear in the fifth pane 
(in the bottom-left corner). 
 225-21
The following script file created Figure 5.21, 
which shows the plots of the functions y  e-1.2x 
sin(10x  5) for 0  x  5 and y  x3 - 100 for 
-6  x  6. x  00.015 y  
exp(-1.2x).sin(10x5) subplot(1,2,1) plot(x,y)
,axis(0 5 -1 1) x  -60.016 y  
abs(x.3-100) subplot(1,2,2) plot(x,y),axis(-6 
6 0 350)
The figure is shown on the next slide. 
 235-22
Application of the subplot command. Figure 5.21
More on subplots? See page 271. 
 24- Overlay Plots 
 - Simple Overlay 
 - x  -10.012 
 - y1  x.2 - 1 
 - y2  x.3 - 2 
 - plot(x,y1,x,y2) 
 - legend('y1','y2') 
 - Matrix Overlays 
 - plot(A) plots the columns of A vs indices and 
generates n curves where A is matrix with m rows 
and m columns.  - plot(x,A) plots the matrix A vs the vector x, 
where x is either a row vector or column vector 
and A is a matrix with m rows and n columns.  -  If the length of x is m, then each column 
of A is plotted vs vector x  -  If the length of x is n , then each row 
 of A is plotted vs vector x  - plot(A,x) plots the vector x vs the matrix A 
 -  If the length of x is m, then x is plotted 
vs each column of A  -  If the length of x is n , then x is plotted 
vs each row of A  - plot(A,B) plots columns of the matrix B vs 
columns of the matrix A  
  255-23
Data Markers and Line Types To plot y versus x 
with a solid line and u versus v with a dashed 
line, type plot(x,y,u,v,--), where the symbols 
-- represent a dashed line. Table 5.21 gives 
the symbols for other line types. To plot y 
versus x with asterisks () connected with a 
dotted line plot(x,y,). 
 265-24
To plot y versus x with green asterisks () 
connected with a red dashed line, you must plot 
the data twice by typing plot(x,y,g,x,y,r--). 
 27Specifiers for data markers, line types, and 
colors. Table 5.21
Data markers Dot (.) Asterisk () Cross 
() Circle ( ) Plus sign () Square ( ) Diamond 
( ) Five-pointed star (w)
 .    s d p
Line types Solid line Dashed line Dash-dotted 
line Dotted line
     . .
Colors Black Blue Cyan Green Magenta Red White Ye
llow
 k b c g m r w y
Other data markers are available. Search for 
markers in MATLAB help.
Useful when you plot many different data types on 
the same plot
5-26 
 28- We can plot two different sets of data on the 
same plot with  
x1  -10.12 x2  0 0.11.5 y1  -x1.2  
1 y2  x2.3 - 1 plot(x1,y1,x2,y2,'') legend(
'y1','y2')  
 295-27
Use of data markers. Figure 5.22
More? See pages 273-274. 
 305-28
Labeling Curves and Data The legend command 
automatically obtains from the plot the line type 
used for each data set and displays a sample of 
this line type in the legend box next to the 
string you selected. The following script file 
produced the plot in Figure 5.24. x  
00.012 y  sinh(x) z  tanh(x) plot(x,y,x,z
,--),xlabel(x), ... ylabel(Hyperbolic Sine 
and Tangent), ... legend(sinh(x),tanh(x)) 
 315-29
Application of the legend command. Figure 5.24 
 325-30
The gtext and text commands are also useful. 
Figure 5.25
Another way to distinguish graphs is to place 
text next to each one. GTEXT('string') displays 
the graph window, puts up a cross-hair, and waits 
for a mouse button or keyboard key to be pressed. 
 The cross-hair can be positioned with the mouse 
(or with the arrow keys on some computers). 
 Pressing a mouse button or any key writes the 
text string onto the graph at the selected 
location. Example gtext(first line','second 
line') gtext('First line','Second 
line','FontName','Times','Fontsize',12) There 
is also text(x,y,string), but here you have to 
specify x and y coordinates in advance. 
 335-31
Graphical solution of equations To get a first 
guess on solution of two equations in two 
unknowns, plot the equations. Solution is at the 
intersection of two lines. If they do not 
intersect  no solutions, if multiple 
intersections  multiple solutions. Example Circ
uit representation of a power supply and a load. 
Example 5.2-1. Figure 5.26 
 345-32
Plot of the load line and the device curve for 
Example 5.21. Figure 5.27 
 355-33
Application of the hold command. Figure 
5.28 hold  holds the figure still allowing to 
add more plots later. 
HOLD ON holds the current plot and all axis 
properties so that subsequent graphing commands 
add to the existing graph. HOLD OFF returns 
to the default mode whereby PLOT commands erase 
the previous plots and reset all axis properties 
before drawing new plots. It is not really 
needed in many cases because we can plot multiple 
graphs with plot(x,y,x,z,--), but useful here 
because plots are of different types and also 
useful for advanced toolboxes. 
x  -10.011 y1  3  exp(-x).sin(6x) y2  4 
 exp(-x).cos(6x) z  0.1  0.9i  n  
00.0110 plot(z.n) hold on plot(y1,y2) hold 
off 
 365-34
- Hints for Improving Plots 
 - The following actions, while not required, can 
nevertheless improve the appearance of your 
plots  - Start scales from zero whenever possible. 
 - This technique prevents a false impression of the 
magnitudes of any variations shown on the plot.  - Use sensible tick-mark spacing. 
 -  If the quantities are months, choose a spacing 
of 12 because 1/10 of a year is not a convenient 
division.  -  Space tick marks as close as is useful, but no 
closer.  -  If the data is given monthly over a range of 24 
months, 48 tick marks might be too dense, and 
also unnecessary. 
(continued ) 
 375-35
Hints for Improving Plots (continued)
- Minimize the number of zeros in the data being 
plotted.  -  For example, use a scale in millions of dollars 
when appropriate, instead of a scale in dollars 
with six zeros after every number.  - Determine the minimum and maximum data values for 
each axis before plotting the data.  -  Then set the axis limits to cover the entire 
data range plus an additional amount to allow 
convenient tick-mark spacing to be selected.  -  For example, if the data on the x-axis ranges 
from 1.2 to 9.6, a good choice for axis limits is 
0 to 10.  -  This choice allows you to use a tick spacing of 
1 or 2. 
(continued ) 
 385-36
Hints for Improving Plots (continued)
- Use a different line type for each curve when 
several are plotted on a single plot and they 
cross each other  -  for example, use a solid line, a dashed line, 
and combinations of lines and symbols.  -  Beware of using colors to distinguish plots if 
you are going to make black-and-white printouts 
and photocopies.  - Do not put many curves on one plot, particularly 
if they will be close to each other or cross one 
another at several points.  - Use the same scale limits and tick spacing on 
each plot if you need to compare information on 
more than one plot.  - Note 
 - Matlab can create text, titles, and labels using 
Math symbols in TEX  - title(A e-t/\tau)sin(\omega t)) backslash 
\ must precede each TEX character sequence. 
  395-37
Why use log scales? 1) To represent graphs that 
cover wide ranges. 2) To identify certain trends 
in data, because some types of functional 
relationships appear as straight lines when 
plotted using log scale. In the example below we 
have wide variation in both abscissa and 
ordinate, so loglog plot is much more useful. 
 405-39
- Logarithmic Plots 
 - It is important to remember the following points 
when using log scales  - 1) You cannot plot negative numbers on a log 
scale, because the logarithm of a negative number 
is not defined as a real number.  - 2) You cannot plot the number 0 on a log scale, 
because log10 0  ln 0  -.  -  You must choose an appropriately small number as 
the lower limit on the plot.  -  (may just rescale your data to start with 1)
 
(continued) 
 415-40
Logarithmic Plots (continued)
3) The tick-mark labels on a log scale are the 
actual values being plotted they are not the 
logarithms of the numbers. For example, the 
range of x values in the plot in Figure 5.32 is 
from 10-1  0.1 to 102  100. 4) Equal distances 
on a log scale correspond to multiplication by 
the same constant (as opposed to addition of the 
same constant on a rectilinear scale). 
log(ab)  log(a)  log(b) For example, all 
numbers that differ by a factor of 10 are 
separated by the same distance on a log scale. 
 That is, the distance between 0.3 and 3 is the 
same as the distance between 30 and 300. This 
separation is referred to as a decade or 
cycle. Gridlines and tick marks within a decade 
are unevenly spaced. If 8 gridlines or tick 
marks occur within the decade, they correspond to 
values equal to 2, 3, 4, . . . , 8, 9 times the 
value represented by the first gridline or tick 
mark of the decade. 
(continued) 
 425-41
Logarithmic Plots (continued)
The plot shown in Figure 5.32 covers three 
decades in x (from 0.1 to 100) and four decades 
in y and is thus called a four-by-three-cycle 
plot. 
 435-42
- MATLAB has 3 commands for generating plots having 
log scales.  - The appropriate command depends on which axis 
must have a log scale.  - Use the loglog(x,y) command to have both scales 
logarithmic.  - 2. Use the semilogx(x,y) command to have the x 
scale logarithmic and the y scale rectilinear.  - 3. Use the semilogy(x,y) command to have the y 
scale logarithmic and the x scale rectilinear.  
  44Two data sets plotted on four types of plots. 
Figure 5.33
x1  10.23 y1  3x1.2 y2  3exp(x1) y3  
3log(x1) subplot( 2, 2, 1) plot(x1,y1,'d-.',x1,y2
,'-',x1,y3,'o') legend('power','exp','log') grid
 on subplot( 2, 2, 2) semilogx(x1,y1,'d-.',x1,y2,'
-',x1,y3,'o') grid on legend('power','exp','log
') subplot( 2, 2, 3) semilogy(x1,y1,'d-.',x1,y2,'
-',x1,y3,'o') grid on legend('power','exp','log'
) subplot( 2, 2, 4) loglog(x1,y1,'d-.',x1,y2,'-',
x1,y3,'o') grid on legend('power','exp','log') 
y1  power dependence is linear only on 
log log plot y2 - exp is linear only on 
semilogy y3 - log is linear only on semilogx 
 45Application of logarithmic plots An RC circuit. 
 Figure 5.34
Frequency-response plot of a low-pass RC circuit. 
 Figure 5.35
RC  0.1 s   1100   i M  
abs(1./(RCs1)) loglog(imag(s),M) At omega 
about 10 rad/sec the amplitude of any signal with 
freq greater than this one, will decrease by more 
than 30 gt low pass filter 
 46An example of controlling the tick-mark labels 
with the set command. Figure 5.36
Changes tick marks from numbers to text labels 
of months
See pages 287-289.
set(gca,XTicklabel,Jan Feb 
) set(gca,XTick,16) 
 475-43
Specialized plot commands. Table 5.31
Command bar(x,y) plotyy(x1,y1,x2,y2) polar(the
ta,r,type) stairs(x,y) stem(x,y)
Description Creates a bar chart of y versus 
x. Produces a plot with two y-axes, y1 on the 
left and y2 on the right. Produces a polar plot 
from the polar coordinates theta and r, using the 
line type, data marker, and colors specified in 
the string type. Produces a stairs plot of y 
versus x. Produces a stem plot of y versus x. 
 485-48
A polar plot showing an orbit around Sun (at the 
origin) having an eccentricity of 0.5.
Polar plot r  r(theta)  very hard to do by 
hand!!! theta  linspace(0, 2pi,100) r  2 ./ 
(1  0.5cos(theta)/2) polar(theta,r) Class 
T5.3-1 and 3, p291
See pages 290-291. 
 495-49
- Interactive Plotting in MATLAB 
 - This interface can be advantageous in situations 
where  - You need to create a large number of different 
types of plots,  - You must construct plots involving many data 
sets,  - You want to add annotations such as rectangles 
and ellipses, or  -  You want to change plot characteristics such 
as tick spacing, fonts, bolding, italics, and 
colors. 
More? See pages 292-298. 
 505-50
- The interactive plotting environment in MATLAB is 
a set of tools for  - Creating different types of graphs, 
 - Selecting variables to plot directly from the 
Workspace Browser,  - Creating and editing subplots, 
 - Adding annotations such as lines, arrows, text, 
rectangles, and ellipses, and  -  Editing properties of graphics objects, such 
as their color, line weight, and font. 
  515-51
The Figure window with the Figure toolbar 
displayed. Figure 5.41 
 525-52
The Figure window with the Figure and Plot Edit 
toolbars displayed. Figure 5.42 
 535-53
-  The Plot Tools interface includes the 
following three panels associated with a given 
figure.  - The Figure Palette Use this to create and 
arrange subplots, to view and plot workspace 
variables, and to add annotations.  - The Plot Browser Use this to select and control 
the visibility of the axes or graphics objects 
plotted in the figure, and to add data for 
plotting.  -  The Property Editor Use this to set basic 
properties of the selected object and to obtain 
access to all properties through the Property 
Inspector. 
  545-54
The Figure window with the Plot Tools 
activated. Figure 5.43
Note that we can capture all the changes made to 
the plot by File-gt Generate M-file 
 555-55
Function Discovery. The power function y  2x 
-0.5 and the exponential function y  101-x . 
Figure 5.38 
 56My example x  linspace(0.1,2,10) y1  1  
0.5x y2  2x.2 y3  10.(0.3(1x)) subplot( 
2, 2, 1) plot(x,y1,'d-.',x,y2,'-',x,y3,'o') lege
nd('linear','power','10x') grid on subplot( 2, 
2, 2) semilogx(x,y1,'d-.',x,y2,'-',x,y3,'o') gri
d on subplot( 2, 2, 3) semilogy(x,y1,'d-.',x,y2,'
-',x,y3,'o') grid on subplot( 2, 2, 
4) loglog(x,y1,'d-.',x,y2,'-',x,y3,'o') grid on 
 575-56
- Using the Linear, Power, and Exponential 
Functions to Describe data.  - Each function gives a straight line when plotted 
using a specific set of axes  - The linear function y  mx  b gives a straight 
line when plotted on rectilinear axes.  -  Its slope is m and its intercept is b. 
 - The power function y  bxm gives a straight line 
when plotted on log-log axes.  - 3. The exponential function y  b(10)mx and its 
equivalent form y  bemx give a straight line 
when plotted on a semilog plot whose y-axis is 
logarithmic. 
More? See pages 299-300. 
 585-57
- Steps for Function Discovery 
 - Summary of the procedures to find a function that 
describes a given set of data  - Assume one of the function types - linear, exp, 
or power - can describe the data.  - Examine the data near the origin. 
 -  The exponential function y  b10(mx) can never 
pass through the origin  -  The linear function y  mx  b can pass through 
the origin only if b  0.  -  The power function y  bxm can pass 
through the origin but only if m gt 0.  
  595-60
Steps for Function Discovery (continued)
2. Plot the data using rectilinear scales. If 
it forms a straight line, then it can be 
represented by the linear function and you are 
finished. Otherwise, if you have data at x  
0, then a. If y(0)  0, try the power 
function. b. If y(0) ¹ 0, try the exponential 
function. If data is not given for x  0, 
proceed to step 3. 
 605-61
Steps for Function Discovery (continued)
3. If you suspect a power function, plot the 
data using log-log scales. Only a power 
function will form a straight line on a log-log 
plot. If you suspect an exponential 
function, plot the data using the semilog scales. 
 Only an exponential function will form a 
straight line on a semilog plot.
(continued) 
 615-62
Steps for Function Discovery (continued) 
4. In function discovery applications, we use 
the log-log and semilog plots only to identify 
the function type, but NOT to find the 
coefficients b and m. The reason is that it 
is difficult to interpolate on log scales and we 
can do it much better on the linear scales. 
 625-63
The polyfit function. Table 5.51
Command p  polyfit(x,y,n)
Description Fits a polynomial of degree n to 
data described by the vectors x and y, where x is 
the independent variable. Returns a row vector 
p of length n  1 that contains the polynomial 
coefficients in order of descending powers. 
 635-64
Using the polyfit Function to Fit Equations to 
Data. Syntax p  polyfit(x,y,n) where x and y 
contain the data, n is the order of the 
polynomial to be fitted, and p is the vector of 
polynomial coefficients. The linear function 
y  mx  b. In this case the variables w and z 
in the polynomial w  p1z p2 are the original 
data variables x and y, and we can find the 
linear function that fits the data by typing p  
polyfit(x,y,1). The first element p1 of the 
vector p will be m, and the second element p2 
will be b. 
 645-65
The power function y  bxm. In this case 
 log10 y  m log10x  log10b (5.55) which has 
the form w  p1z  p2 where the 
polynomial variables w and z are related to the 
original data variables x and y by w  log10 y 
and z  log10x. Thus we can find the power 
function that fits the data by typing p  
polyfit(log10(x),log10(y),1) The first element 
p1 of the vector p will be m, and the second 
element p2 will be log10b. We can find b from b  
10p2 . 
 655-66
The exponential function y  b(10)mx. In this 
case log10 y  mx  log10b 
 (5.56) which has the form w  p1z  
p2 where the polynomial variables w and z are 
related to the original data variables x and y by 
w  log10 y and z  x. We can find the 
exponential function that fits the data by typing 
 p  polyfit(x, log10(y),1) The first element 
p1 of the vector p will be m, and the second 
element p2 will be log10b. We can find b from b  
10p2 .
More? See pages 302-303. 
 66My Example Stretch of a spring data
clear all clf disp('----------------------------
----') x   5, 1010100  y   0 19 57 94 
134 173 216 256 297 343 390  p  
polyfit(x,y,1) xv  linspace(min(x),max(x),1000) 
yv  polyval(p,xv) residuals  y - 
polyval(p,x) dmax  max(abs(residuals)) D  
sqrt( sum(residuals.2) / length(x)) 
 subplot(2,1,1) plot(x,y,'o',xv,yv) grid 
on title('D  ',num2str(D), dmax  
',num2str(dmax)) subplot(2,1,2) plot(x,residual
s,'') grid on title('Residuals') Fitting 
line p  4.0693 x -25.4071 Fitting 
quadratic, just make it polyfit(x,y,2) p  
0.0049x2  3.5629x -17.1145
Fitting line 
 675-67
Fitting a linear equation An experiment to 
measure force and deflection in a cantilever 
beam. Example 5.5-1. Figure 5.53 
 685-68
Plots for the cantilever beam example. Figure 
5.54 
 69clear all clf disp('----------------------------
----') x   0100800  y   0 0.09 0.18 
0.28 0.37 0.46 0.55 0.65 0.74 p  
polyfit(x,y,1) xv  linspace(min(x),max(x),1000) 
yv  polyval(p,xv) k  1/p(1) residuals  y - 
polyval(p,x) dmax  max(abs(residuals)) D  
sqrt( sum(residuals.2) / length(x)) 
 subplot(2,1,1) plot(x,y,'o',xv,yv) grid 
on title('D  ',num2str(D),' dmax  
',num2str(dmax)) xlabel('Force') 
ylabel('Deflection') subplot(2,1,2) plot(x,resi
duals,'') grid on title('Residuals') p  
0.0009x - 0.0018 k  1/(p(1)  1079.1 
lb/inch ( f  kx ) 
Note that the book actually plots just x  f/k, 
not the full polynomial. 
 70Fitting an exponential function. Temperature of 
a cooling cup of coffee, plotted on various 
coordinates. 
clear all clf disp('----------------------------
----') x   0 620 2262 3482  y   145 130 
103 90  y  y - 68  subtract room 
temperature subplot(2,2,1) plot(x,y,'o-') xlabel
('Time (sec)') ylabel('Relative Temperature 
(F)') subplot(2,2,2) semilogy(x,y,'o-') xlabel(
'Time (sec)') ylabel('Relative Temperature 
(F)') p  polyfit(x,log10(y),1) m  p(1) b  
10p(2) xv  linspace(min(x),max(x),1000) yv  
b10.(mxv) t120  (log10(120-68) - 
log10(b))/ m  subplot(2,2,3) semilogy(xv,yv68,
x,y68,'o',t120,120,'') xlabel('Time (sec)') 
ylabel('Relative Temperature (F)') 
 subplot(2,2,4) plot(xv,yv68,x,y68,'o',t120,120,
'') xlabel('Time (sec)') ylabel('Relative 
Temperature (F)') p  -0.0002 x  1.8889 m 
 -1.5563e-004 b  77.4361 The model is T  
68  b10(mt) 
 715-69
Fitting an exponential function. Temperature of 
a cooling cup of coffee, plotted on various 
coordinates. Example 5.5-2. Figure 5.55 
 725-70
Fitting a power function. An experiment to 
verify Torricellis principle. Example 5.5-3. 
Figure 5.56 
 73x   6315  times   9 8 7 6 flow  
1./times y  flow p  polyfit(log10(x),log10(y
),1) m  p(1) b  10p(2) xv  linspace(min(x),max
(x),1000) yv  bxv.m subplot(2,1,1) loglog(x
v,yv,x,y,'o') xlabel('Volume (cups)') 
ylabel('Flow Rate (cups/sec)') axis('tight') 
 subplot(2,1,2) plot(xv,1./yv,x,1./y,'o') xlabel('
Volume (cups)') ylabel('Fill time 
(sec)') axis('tight') disp('Extrapolation') V 
 36 f36  bVm filltime  1/f36 ----------------
------------------------------------ p  
0.4331x - 1.3019 m  0.4331 b  
0.0499 Extrapolation V  36 f36  
0.2356 filltime  4.2452 
 745-71
Flow rate and fill time for a coffee pot. Figure 
5.57 
 755-72
The Least Squares Criterion used to fit a 
function f (x). It minimizes the sum of the 
squares of the residuals, J. J is defined 
as We can use this criterion to compare 
the quality of the curve fit for two or more 
functions used to describe the same data. The 
function that gives the smallest J value gives 
the best fit.
m
S
 f (xi )  yi 2 (5.61)
J 
i1 
 765-73
Illustration of the least squares criterion. 
Figure 5.61 
 775-74
The least squares fit for the example data. 
Figure 5.62
See pages 312-315. 
 78My Example of Linear Fit
- clear all clf 
 - x   0 3 8 
 - y   1 4 10 
 -  
 - p  polyfit(x,y,1) 
 -  
 - pval  polyval(p,x) 
 - J  sum( ( pval - y ).2 ) 
 - xvec  linspace(min(x),max(x),100) 
 - yvec  polyval(p,xvec) 
 - plot(xvec,yvec,x,y,'o') 
 - -------------------------------- 
 - p  1.1327 0.8469 
 - pval  0.8469 4.2449 9.9082 
 - J  0.0918
 
  795-75
The polyfit function is based on the 
least-squares method. Its syntax is
p  polyfit(x,y,n)
Fits a polynomial of degree n to data described 
by the vectors x and y, where x is the 
independent variable. Returns a row vector p of 
length n1 that contains the polynomial 
coefficients in order of descending powers.
See page 315, Table 5.6-1. 
 805-76
Regression using polynomials of first through 
fourth degree. Figure 5.63
The program is on pages 315 to 316. 
 81My Example from polyfit
 Improving code on p 315 and changing data clear 
all clf x  -210 y  -23x  
5exp(0.3x) xp  linspace( min(x), 
max(x),1000) for k  14  power of polynomials 
 coeff  polyfit(x,y,k) yp  
polyval(coeff,xp) J  sum( (polyval(coeff,x) - 
y).2 ) subplot(2,2,k) plot(xp,yp,x,y,'o') 
 axis ( min(x)-0.2 max(x)0.2 ... 
min(y)-0.2 max(y)0.2 ) xlabel('x') 
ylabel('x') title('Polyn deg  
',num2str(k),... ' J  
',num2str(J)) end 
 825-77
Beware of using polynomials of high degree. An 
example of a fifth-degree polynomial that passes 
through all six data points but exhibits large 
excursions between points. Figure 5.64 
 83My example, exact polynomial fit of high degree.
 p 317 exact polyn fit of high degree clear all 
clf x  06 y  -48rand(size(x)) xp  
linspace( min(x), max(x),1000) for k  36  
power of polynomials coeff  polyfit(x,y,k) 
yp  polyval(coeff,xp) J  sum( 
(polyval(coeff,x) - y).2 ) subplot(2,2,k-2) 
plot(xp,yp,x,y,'o') axis ( min(x)-0.2 
max(x)0.2 ...  min(y)-0.2 max(y)0.2 
) xlabel('x') ylabel('x') 
title('Polyn deg  ',num2str(k),... ' 
 J  ',num2str(J)) end 
 845-78
Assessing the Quality of a Curve Fit Denote the 
sum of the squares of the deviation of the y 
values from their mean y by S, which can be 
computed from
m
S
(yt  y )2 (5.62)
S 
i1 
 855-79
This formula can be used to compute another 
measure of the quality of the curve fit, the 
coefficient of determination, also known as the 
r-squared value. It is defined as
 (5.63)
The value of S indicates how much the data is 
spread around the mean, and the value of J 
indicates how much of the data spread is 
unaccounted for by the model. Thus the ratio J 
/ S indicates the fractional variation 
unaccounted for by the model. 
 865-80
For a perfect fit, J  0 and thus r 2  1. Thus 
the closer r 2 is to 1, the better the fit. The 
largest r 2 can be is 1. It is possible for J 
to be larger than S, and thus it is possible for 
r 2 to be negative. Such cases, however, are 
indicative of a very poor model that should not 
be used. As a rule of thumb, a good fit accounts 
for at least 99 percent of the data variation. 
This value corresponds to r 2 ³ 0.99.
More? See pages 319-320. 
 87Quality of Curve Fit (my example)
 p 319 Curve fitting example clear all clf x  
-210 y  -23x  2sin(x) ym  mean(y) xp  
linspace( min(x), max(x),1000) for k  14  
power of polynomials coeff  polyfit(x,y,k) 
yp  polyval(coeff,xp) J  sum( 
(polyval(coeff,x) - y).2 ) S  sum( (y - 
ym).2 ) r2  1 - J/S subplot(2,2,k) 
plot(xp,yp,x,y,'o') axis ( min(x)-0.2 
max(x)0.2 ...  min(y)-0.2 max(y)0.2 
) xlabel('x') ylabel('x') title('Deg 
 ',num2str(k),... ' J  
',num2str(J)... ' S  ',num2str(S)... 
 ' r2  ',num2str(r2)) end 
 88- Scaling the Data 
 - The effect of computational errors in computing 
the coefficients can be lessened by properly 
scaling the x values. You can scale the data 
yourself before using polyfit. Some common 
scaling methods are  - Subtract the minimum x value or the mean x value 
from the x data, if the range of x is small, or  - Divide the x values by the maximum value or the 
mean value, if the range is large. 
More? See pages 323-324.
5-81 
 895-82
Effect of coefficient accuracy on a sixth-degree 
polynomial. Top graph 14 decimal-place accuracy. 
 Bottom graph 8 decimal-place accuracy. Figure 
5.65
More? See pages 320-321. 
 905-83
Avoiding high degree polynomials Use of two 
cubics to fit data. Figure 5.66
See pages 321-322. 
 91Example 5.6.1 Estimation of Traffic Flow
x   19901999  y  2.1 3.4 4.5 5.3 6.2 6.6 
6.8 7 7.4 7.8 p  polyfit(x,y,3) Warning 
Polynomial is badly conditioned. Add points with 
distinct X values, reduce the degree of 
the polynomial, or try centering and 
scaling as described in HELP POLYFIT.
subtract off initial year
clear all clf disp('----------------------------
----') x   19901999  - 1990 y  2.1 3.4 
4.5 5.3 6.2 6.6 6.8 7 7.4 7.8 p  
polyfit(x,y,3) xv  linspace(min(x),max(x),1000)
 yv  polyval(p,xv) subplot(2,1,1) plot(xv,yv,
x,y,'o') xlabel('year') ylabel('Cars 
(millions)') axis('tight') residuals  y - 
polyval(p,x) subplot(2,1,2) plot(x,residuals,'o'
) xlabel('year') ylabel('Cars 
(millions)') axis('tight') title('Residuals') p 
 0.0087(x -1990)3 - 0.1851(x-1990)2  
 1.5991(x  1990)  2.0362 
J  sum( (polyval(coeff,x) - y).2 ) S  sum( 
(y - ym).2 ) r2  1 - J/S Get r2  0.9972  
very good! 
 92Traffic Flow Alternative approach using mu
clear all clf disp('----------------------------
----') x   19901999   y  2.1 3.4 4.5 5.3 
6.2 6.6 6.8 7 7.4 7.8 p,s,mu  
polyfit(x,y,3) xv  linspace(min(x),max(x),1000)
 yv  polyval(p,xv,s,mu) subplot(2,1,1) plot(x
v,yv,x,y,'o') xlabel('year') ylabel('Cars 
(millions)') axis('tight') residuals  y - 
polyval(p,x,s,mu) subplot(2,1,2) plot(x,residuals
,'o') xlabel('year') ylabel('Cars 
(millions)') axis('tight') title('Residuals')  
Using s and mu to center the polynomial around 
average of x and its standard deviation mu   
aver std  
 935-84
Using Residuals Residual plots of four models. 
Figure 5.67
See pages 325-326. 
 945-85
Linear-in-Parameters Regression Comparison of 
first- and second-order model fits. Figure 5.68
See pages 329-331. 
 955-86
Basic Fitting Interface MATLAB supports curve 
fitting through the Basic Fitting interface. 
Using this interface, you can quickly perform 
basic curve fitting tasks within the same 
easy-to-use environment. The interface is 
designed so that you can  Fit data using a 
cubic spline or a polynomial up to degree 10.  
Plot multiple fits simultaneously for a given 
data set.  Plot the residuals.  Examine the 
numerical results of a fit.  Interpolate or 
extrapolate a fit.  Annotate the plot with the 
numerical fit results and the norm of 
residuals.  Save the fit and evaluated results 
to the MATLAB workspace. 
 965-87
The Basic Fitting interface. Figure 5.71 
 975-88
A figure produced by the Basic Fitting 
interface. Figure 5.72
More? See pages 331-334. 
 987-32
Applications of interpolation A plot of 
temperature data versus time. Figure 7.41 
 99 P 446 my example clear all clf  temperature 
measured every  2 hours, but need it every 
hour x  0224 y  60  20sin(2pix/24) xv 
 linspace( min(x),max(x),1000) yv  60  
20sin(2pixv/24) xint  024 yint  
interp1(x,y,xint) plot(xv,yv,x,y,'o',xint,yint,'
') 
 1007-33
Temperature measurements at four locations. 
Figure 7.42
More? See pages 444-449. 
 1017-34
Linear interpolation functions. Table 7.41
Command Y_int  interp1(x,y,x_int)
Description Used to linearly interpolate a 
function of one variable y  f (x). Returns a 
linearly interpolated vector y_int at the 
specified value x_int, using data stored in x and 
y. 
 1027-35
Table 7.41 Continued
Z_int  interp2(x,y,z,x_int,y_int)
Used to linearly interpolate a function of two 
variables y  f (x, y). Returns a linearly 
interpolated vector z_int at the specified values 
x_int and y_int, using data stored in x, y, and z. 
 1037-36
Cubic-spline interpolation The following 
session produces and plots a cubic-spline fit, 
using an increment of 0.01 in the x values. gtgtx 
 7,9,11,12 gtgty  49,57,71,75 gtgtx_int  
70.0112 gtgty_int  spline(x,y,x_int) gtgtplot(x
,y,o,x,y,--,x_int,y_int),... xlabel(Time 
(hr)),ylabel(Temperature (deg F),... 
title(Temperature Measurements at a Single 
Location),... axis(7 12 45 80) This produces 
the next figure. 
 1047-37
Linear and cubic-spline interpolation of 
temperature data. Figure 7.43
More? See pages 449-452. 
 105 P 451 my example splines clear all 
clf disp('-----------------------')  Just a 
random set of temperature data x  0224 y  
60  20rand(size(x)) xint  linspace( 
min(x),max(x),1000) yint  interp1(x,y,xint,'spli
ne') plot(x,y,'o',x,y,'-.',xint,yint) legend('Dat
a','Linear','Cubic Spline') xtry   12.5 
1.5 ytry  interp1(x,y,xtry,'spline') ytry  
66.9181 73.1265 -- to get spline approximation 
at specific points 
 1067-38
Polynomial interpolation functions. Table 7.42
Command y_est  interp1(x,y,x_est,spline)
Description Returns a column vector y_est that 
contains the estimated values of y that 
correspond to the x values specified in the 
vector x_est, using cubic-spline interpolation. 
 1077-39
Table 7.42 Continued
Y_int  spline(x,y,x_int)
Computes a cubic-spline interpolation where x and 
y are vectors containing the data and x_int is a 
vector containing the values of the independent 
variable x at which we wish to estimate the 
dependent variable y. The result Y_int is a 
vector the same size as x_int containing the 
interpolated values of y that correspond to x_int. 
 1087-40
Table 7.42 Continued
breaks, coeffs, m, n  unmkpp(spline(x,y))
Computes the coefficients of the cubic-spline 
polynomials for the data in x and y. The vector 
breaks contains the x values, and the matrix 
coeffs is an m  n matrix containing the 
polynomial coefficients. The scalars m and n 
give the dimensions of the matrix coeffs m is 
the number of polynomials, and n is the number of 
coefficients for each polynomial. 
 109My Example for spline coefficients
clear all clf x  7742' y  8 41 133 250 
280 297 xx  linspace(min(x),max(x),1000) yy 
 spline(x,y,xx) breaks, coeffs, m, n  
unmkpp(spline(x,y)) plot(x,y,'o',xx,yy) title('Spl
ine fit') 
breaks  7 14 21 28 35 
42 coeffs  -0.0004 0.6102 0.4619 
8.0000 -0.0004 0.6020 8.9476 41.0000 
 -0.0972 0.5939 17.3190 133.0000 0.0626 
 -1.4469 11.3476 250.0000 0.0626 
-0.1327 0.2905 280.0000 m  5 n  4 
 1103-D plots
- We look at three basic types 
 - line, surface and contour plots.
 
  1115-89
Three-Dimensional Line Plots gtgtt  
0pi/5010pi gtgtplot3(exp(-0.05t).sin(t),exp(
-0.05t).cos(t),t),... xlabel(x),ylabel(y),
zlabel(z),grid
t goes from 0 to 10pi sin/cos go through 5 
cycles x2  y2  exp(-0.1t) decreases. x and y 
decrease! 
 1125-91
Surface Plots z  f(x,y)  represents a 
surface in 3D. mesh, surf etc generate surface 
plots. First, need to generate a grid (mesh) of 
points in x-y plane and evaluate f on it. x  
xmin dx  xmax y  ymin dy  ymax X,Y  
meshgrid(x,y) generates such a grid with corners 
(xmin,ymin) and (xmax,ymax) Matrices X and Y 
contain coordinate pairs of every point on the 
grid If x and y are the same, can use X,Y  
meshgrid(x) The following session shows how to 
generate the surface plot of the function z  
xe-(x-y2)2y2, for -2 lt x lt 2 and -2 lt y lt 
2, with a spacing of 0.1. This plot appears in 
Figure 5.82. gtgtX,Y  meshgrid(-20.12) gtgtZ 
 X.exp(-((X-Y.2).2Y.2)) gtgtmesh(X,Y,Z),xlabe
l(x),ylabel(y),zlabel(z) 
 1135-92
A plot of the surface z  xe-(x-y2)2y2 created 
with the mesh function. Figure 5.82
More? See pages 335-336. 
 114My example with surf command
X,Y  meshgrid(-20.12) Z  
sqrt(X.2Y.2).exp(-2((X-Y).2Y.2)) surf(X,Y
,Z),xlabel('x'),ylabel('y'),zlabel('z') 
 1155-93
Contour Plots Topographic plots show the contours 
of the land by means of constant elevation lines 
 contour lines. The following session 
generates the contour plot of the function whose 
surface plot is shown in Figure 5.82 namely, z 
 xe-(x-y2)2y2, for -2  x  2 and -2  y  2, 
with a spacing of 0.1. gtgtX,Y  
meshgrid(-20.12) gtgtZ  X.exp(-((X- 
Y.2).2Y.2)) gtgtcontour(X,Y,Z),xlabel(x),ylab
el(y) 
 1165-94
A contour plot of the surface z  xe-(x-y2)2y2 
created with the contour function. Figure 5.83
More? See page 337. 
 1175-95
Three-dimensional plotting functions. Table 5.81
Description Creates a contour plot. Creates a 3D 
mesh surface plot. Same as mesh but draws 
contours under the surface. Same as mesh but 
draws vertical reference lines under the 
surface. Creates a shaded 3D mesh surface 
plot. Same as surf but draws contours under the 
surface. Creates the matrices X and Y from the 
vectors x and y to define a rectangular 
grid. Same as X,Y meshgrid(x,x). Same as 
mesh but draws mesh lines in one direction only.
Function contour(x,y,z) mesh(x,y,z) meshc(x,y,z)
 meshz(x,y,z) surf(x,y,z) surfc(x,y,z) X,Y
  meshgrid(x,y) X,Y  meshgrid(x) waterfall
(x,y,z) 
 1185-96
Plots of the surface z  xe-(x2y2) created with 
the mesh function and its variant forms meshc, 
meshz, and waterfall. a) mesh, b) meshc, c) 
meshz, d) waterfall. Figure 5.84 
 119The following slides contain figures from the 
chapters homework problems.
5-97 
 1205-98
Figure P27 
 1215-99
Figure P28 
 1225-100
Figure P56