Module 4: MATH AND DATA ANALYSIS
Learning Objectives
After reading this lesson, you should be able to:
plot polynomial interpolation and regression models,
plot spline interpolation models.
How can I plot the results of curve fitting?
In Lesson 4.7, we covered how to perform some curve fitting methods on discrete data using MATLAB. In this lesson, we further explore the application of curve fitting methods by looking at how they can be visualized using MATLAB.
To plot any function, we need to find its value across the domain we want to plot. To do this for a curve fitting example, the programmer needs a model that fits the given data pairs, a vector (domain) to plot the model on (query values), and a vector of predicted values corresponding to the desired domain of the plot.
From the last lesson, we know that we can use polyval()
for both
polynomial interpolation and regression models to find their values at
given values of x. Example 1 shows how to plot polynomial models that
are found using polyfit()
. This process does not require any new
functions or syntax; although, there are a few things to watch out for
when completing this process on your own. Be careful to clearly identify
the given values from the predicted ones. Likewise, always make sure
that you are correctly choosing and referencing the x query values for
plotting.
Example 1
Fit a fifth-order polynomial regression model to the data pairs given in Table A, and plot the resulting model and the given data pairs on one plot. Include a title, axis labels, and legend.
Table A: The data pairs used in Example 1.
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
y | 1.00 | 0.540 | -0.416 | -0.990 | -0.654 | 0.284 | 0.960 | 0.754 | -0.146 |
Solution
Figure 1: Figure output for Example 1 showing the plot of a regression model.
The raw y data points in Example 1 were generated from \(f(x)=\cos(x)\),
so the exact answer for yEstimate
would be cos(pi)=-1
. We can see
that our estimate is relatively close when comparing the discrete values
at cos(pi)
(-1 vs. -0.973) and the original data points compared to
the regression model we found (Figure 1). Note that we would not know
the function \(f(x)=\cos(x)\) in a real world scenario. If we did, there
would be no reason to use curve fitting methods to find it!
In Example 2, we show an example of plotting spline interpolation
models. This requires less steps than plotting the polynomial models,
but the basics are the same. interp1()
returns a vector of values
corresponding to the query points, so we can plot the results directly
without any further substitution needed.
Example 2
Fit linear and cubic-spline interpolation models to the data pairs given in Table B, and plot the resulting models and the given data pairs on one plot for comparison. Include a title, axis labels, and legend.
Table B: The data pairs used in Example 2.
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
y | 1.00 | 0.540 | -0.416 | -0.990 | -0.654 | 0.284 | 0.960 | 0.754 | -0.146 |
Solution
Figure 2: Figure output for Example 2 comparing linear and cubic spline interpolation results.
What are some common mistakes when plotting curve fitting results?
Some common mistakes made when first learning to perform curve fitting and plotting the results are:
(1) Plotting the coefficients of a polynomial (the direct output from
polyfit()
)
(2) Using the given x values as the x query values
(3) Plotting the given x values vs. the predicted y values
(4) Using the wrong function: polyfit()
, polyval()
, interp1()
To elaborate on the mistakes listed above, plotting the coefficients of a polynomial is incorrect as this is not a prediction: it is just part of a polynomial model. One must substitute x query values into that polynomial to get the predictions to plot.
Using the given x values as the x query values is incorrect because the whole purpose of curve fitting is to find out more information than we already know. Therefore, we should choose x query values for which we do not already know the corresponding y values.
Plotting the given x values vs. the predicted y values is wrong because it is mathematically false. If we predict the value of \(y(2.5)\) with our model, we cannot then automatically say that \(y(2.5)=y(1)\), which is exactly what is happening when you plot predicted y values against an incorrect x domain. Another symptom of this same problem is when MATLAB returns an error for the plotted x and y vectors being unequal lengths. This error cannot occur if you properly calculated and selected your x query and y predicted values. So, that is where you should start looking if this error occurs when plotting predicted values.
Finally, keep in mind that we have covered only three functions to do
all of the different interpolation and regression methods. Those
functions are polyfit()
, polyval()
, and interp1()
. polyfit()
and
polyval()
pertain to polynomial interpolation and regression. For
spline interpolation (both linear and cubic-splines), use interp1()
.
Multiple Choice Quiz
(1). To plot a polynomial regression or interpolation model, one does not need to use the function
(a) polyfit()
(b) polyval()
(c) plot()
(d) interp1()
(2). The default output of interp1()
is/are
(a) polynomial model coefficients
(b) predicted values corresponding to the provided x query values
(c) a polynomial model in symbolic form
(d) none of the above
(3). Complete the code to prepare the plot of the interpolation model.
(a) coef = polyfit(x,y,n);yy = polyval(xx,coef);
(b) coef = polyfit(x,y,n);yy = polyval(coef,xx);
(c) coef = polyfit(y,x,n);yy = polyval(xx,coef);
(d) coef = polyfit(y,x,n);yy = polyval(coef,xx);
(4). The output of polyfit()
is/are
(a) polynomial model coefficients
(b) predicted values corresponding to the provided x query values
(c) a polynomial model in symbolic form
(d) none of the above
(5). The most appropriate plotting call for visualizing a curve fitting
result (where xGiven
= given x values, xPredict
= predicted x
values, yGiven
= given y values, yPredict
= predicted y values) is
(a) plot(xGiven,yPredict)
(b) plot(xQuery,yGiven)
(c) plot(xQuery,yPredict)
(d) plot(xGiven,yGiven)
Problem Set
(1). A curve needs to be fit through the seven points given in Table A to fabricate the cam. The geometry of a cam is given in Figure A.
Figure A: Schematic of the cam profile
Each point on the cam shown in Figure A is measured from the center of the input shaft. Table A shows the x and y measurement (inches) of each point on the camshaft.
Table A: Geometry of the cam corresponding to Figure A.
Point | x (in) | y (in) |
---|---|---|
1 | 2.20 | 0.00 |
2 | 1.28 | 0.88 |
3 | 0.66 | 1.14 |
4 | 0.00 | 1.20 |
5 | -0.60 | 1.04 |
6 | -1.04 | 0.60 |
7 | -1.20 | 0.00 |
Using MATLAB, output a smooth curve that passes through all seven data points of the cam. Plot this model (with a black line) and the given data points (with cyan circles) on the same plot. Include a title, axis labels, and legend.
(2). A vegetable processing company has finished their first prototype of a new carrot cutting tool, and needs your help with the analysis. The device (shown in Figure B) consists of razor blade attached to a spring loaded hinged arm. The arm is free to rotate about the hinge from \(0^\circ\) to \(180^\circ\), as shown. The spring is fully loaded when the arm is at the \(0^\circ\) mark and has a neutral position at the \(180^\circ\) mark of the arm.
Figure B: Cutting device for Exercise 4.
In a laboratory, the force exerted on the far end of the arm is measured at several angles as the arm rotates about the hinge. The results are recorded in Table B.
Table B: Measured force at a given angle.
Angle (\(^\circ\)) | 0.0 | 20.5 | 70.1 | 160.5 | 180.0 |
Force (lbs) | 12.20 | 10.56 | 7.65 | 2.01 | 0.00 |
If the arm (C) measures 8.75 inches from the hinge to the razor, plot the torque (ft-lbs) exerted by the spring as the arm swings from the fully-loaded to fully- neutral position (use a cubic-spline interpolation model). Also, predict the value of the torque once the arm has swung \(90^\circ\).
Hint: \(\text{Torque} = \text{Force} \times \text{Arm\ length}\text{.}\) Be aware of the units.
(3). To maximize a catch of bass in a lake, it is suggested to throw the line to the depth of the thermocline. The characteristic feature of the thermocline is the sudden change in temperature. We are given the temperature vs. depth data for a lake in the table below (Table C).
Table C: Water Temperature at a given depth.
Temperature, \(T \ ({^\circ C})\) | Depth, \(z \ (m)\) |
---|---|
19.1 | 0 |
19.1 | -1 |
19.0 | -2 |
18.8 | -3 |
18.7 | -4 |
18.3 | -5 |
18.2 | -6 |
17.6 | -7 |
11.7 | -8 |
9.9 | -9 |
9.1 | -10 |
Conduct polynomial and cubic spline interpolation on the data, and plot the two interpolants. From the plot, can you judge where the sudden change in temperature is taking place?
(4). Using MATLAB, regress the following (x, y) data pairs (Table D) to a linear polynomial and predict the value of y when \(x= 55,20, - 10.\)
Table D: Data pairs (x, y) for Exercise 1.
x | y |
---|---|
325 | 2.60 |
265 | 3.80 |
185 | 4.80 |
105 | 5.00 |
25 | 5.72 |
-55 | 6.40 |
-70 | 7.00 |
Use the fprintf()
and/or the disp()
functions to output the
regression model results to the Command Window. Plot the regression
model with data points (given and predicted) on a (x, y) linear
plot.
(5). To find contraction of a steel cylinder, one needs to regress the thermal expansion coefficient data to temperature. The data is given below in Table E.
Table E: The thermal expansion coefficient at given temperatures
Temperature, \(T \ (^\circ F)\) | Coefficient of thermal expansion, \(\alpha(\text{in/in}\text{/}^{\circ}F)\) |
---|---|
80 | \[6.47 \times 10^{- 6}\] |
40 | \[6.24 \times 10^{- 6}\] |
-40 | \[5.72 \times 10^{- 6}\] |
-120 | \[5.09 \times 10^{- 6}\] |
-200 | \[4.30 \times 10^{- 6}\] |
-280 | \[3.33 \times 10^{- 6}\] |
-340 | \[2.45 \times 10^{- 6}\] |
Fit the above data to \(\alpha = a_0+a_1T+a_2T^2\). Plot the regression model along with the given data points on one plot. Include a grid, axis labels, and a legend.