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