1 /**********************************************************************
3 FILENAME: uiuc_1Dinterpolation.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: reads in the yData and xData arrays and the value of x
8 to be interpolated on; performs 1D interpolation,
11 ----------------------------------------------------------------------
15 ----------------------------------------------------------------------
17 REFERENCES: syntax based on interp function in c172_aero.c
18 mathematics based on linear interpolation functions
20 Kreyszig, Erwin. Advanced Engineering Mathematics,
21 7th ed. NY: John Wiley & Sons, 1993.
23 ----------------------------------------------------------------------
25 HISTORY: 02/03/2000 initial release
27 ----------------------------------------------------------------------
29 AUTHOR(S): Jeff Scott <jscott@mail.com>
31 ----------------------------------------------------------------------
35 ----------------------------------------------------------------------
37 INPUTS: -array of x data
39 -max number of data pairs
40 -x value to be interpolated on
42 ----------------------------------------------------------------------
44 OUTPUTS: -y as function of x
46 ----------------------------------------------------------------------
48 CALLED BY: uiuc_coefficients.cpp
50 ----------------------------------------------------------------------
54 ----------------------------------------------------------------------
56 COPYRIGHT: (C) 2000 by Michael Selig
58 This program is free software; you can redistribute it and/or
59 modify it under the terms of the GNU General Public License
60 as published by the Free Software Foundation.
62 This program is distributed in the hope that it will be useful,
63 but WITHOUT ANY WARRANTY; without even the implied warranty of
64 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
65 GNU General Public License for more details.
67 You should have received a copy of the GNU General Public License
68 along with this program; if not, write to the Free Software
69 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
70 USA or view http://www.gnu.org/copyleft/gpl.html.
72 **********************************************************************/
74 #include "uiuc_1Dinterpolation.h"
77 double uiuc_1Dinterpolation( double xData[100], double yData[100], int xmax, double x )
79 double x1=0, x2=0, y1=0, y2=0, L1=0, L2=0;
83 //check bounds on x to see if data range encloses it
84 // NOTE: [1] is first element of all arrays, [0] not used
85 if (x <= xData[1]) //if x less than lowest x
87 yfx = yData[1]; //let y equal lowest y
89 else if (x >= xData[xmax]) //if x greater than greatest x
91 yfx = yData[xmax]; //let y equal greatest y
93 else //x between xmax and x min
95 /*loop increases i until x is less than a known x,
96 e.g. Alpha from LaRCsim less than Alpha given in
97 tabulated data; once this value is found, i becomes
98 the upper bound and i-1 the lower bound*/
99 while (xData[i] <= x) //bracket upper bound
103 x2 = xData[i]; //set upper bounds
105 x1 = xData[i-1]; //set lower bounds
108 //calculate Langrange polynomial coefficients
109 //(see Kreyszig, pg. 937)
110 L1 = (x - x2) / (x1 - x2);
111 L2 = (x - x1) / (x2 - x1);
114 yfx = L1 * y1 + L2 * y2;
119 // end uiuc_1Dinterpolation.cpp