LAGRANGE Function
Determines the coefficients for a Lagrange interpolating polynomial associated with a given set of abscissa points and function values.
Usage
lp = LAGRANGE(x, f)
Input Parameters
xā€”A vector containing the independent (abscissa) values of the data to be interpolated.
fā€”A vector containing data values to interpolate, where f(i) is the data associated with x(i).
Returned Value
lpā€”A vector containing coefficients of the Lagrange interpolating polynomial associated with x and f.
 
note
To evaluate the fitted Lagrange polynomial at a given point, apply the POLY Function to lp.
Keywords
None.
Discussion
None.
Example 1
; Here, we are trying to reproduce the function f(x) = x^2.
;   f(1) = 1
;   f(2) = 4
;   f(3) = 9
 
PRINT, LAGRANGE([1, 2, 3], [1, 4, 9])
; PV-WAVE prints:
;            0.00000000       0.00000000        1.0000000
 
PRINT, POLY(5, LAGRANGE([1, 2, 3], [1, 4, 9]))
; PV-WAVE prints:
;            25.000000
Example 2
; Make up five abscissas to define five, 4th-degree, 
; Lagrange basis polynomials on.
x = [0.0, 1.5, 3.6, 7, 10]
 
; Define the function values associated with each of the
; five Lagrange basis polynomials. By definition, the
; polynomial associated with the 0th abscissa will equal 1
; at x(0)=0, while the other four polynomials will equal 0.
; Likewise, the polynomial associated with the 1st abscissa 
; will equal 1 at x(1)=1.5, while the other four polynomials
; will equal 0, etc.
y = [1, 0, 0, 0, 0]
L40 = LAGRANGE(x, y) 
 
; L40 means the 4th-degree Lagrange basis polynomial
; associated with the 0th abscissa.
y = [0, 1, 0, 0, 0]
L41 = LAGRANGE(x, y)
y = [0, 0, 1, 0, 0]
L42 = LAGRANGE(x, y)
y = [0, 0, 0, 1, 0]
L43 = LAGRANGE(x, y)
y = [0, 0, 0, 0, 1]
L44 = LAGRANGE(x, y)
 
; Now evaluate the five Lagrange basis polynomials
; over the domain x=[0, 10].
domain = INTERPOL([0, 10], 1000)
P40 = POLY(domain, L40)
P41 = POLY(domain, L41)
P42 = POLY(domain, L42)
P43 = POLY(domain, L43)
P44 = POLY(domain, L44)
 
; Plot each of the basis polynomials.
!P.font = 0
TEK_COLOR
clrs = WoColorConvert(INDGEN(256))
WINDOW, /Free, Xsize=700, Ysize=400
minY = MIN([P40, P41, P42, P43, P44], Max=maxY)
PLOT, domain, P40, /Nodata, Xrange=[-0.5, 10.5], $
   Yrange=[minY,maxY], Ystyle=1, Xstyle=1, $
   Title='4!eth!N-degree Lagrange Basis Polynomials', $
   Xtitle='Abscissas:  0,  1.5,  3.6,  7,  10', $
   Color=clrs(0), Background=clrs(1)
OPLOT, !X.Crange, [0, 0], Linestyle=1, Color=clrs(15)
OPLOT, !X.Crange, [1, 1], Linestyle=1, Color=clrs(15)
FOR i=0L,4 DO OPLOT, [x(i), x(i)], !Y.Crange, $
   Linestyle=1, Color=clrs(15)
line_clrs = clrs([2, 25, 4, 8, 30])
OPLOT, domain, P40, Thick=2, Color=line_clrs(0)
OPLOT, domain, P41, Thick=2, Color=line_clrs(1)
OPLOT, domain, P42, Thick=2, Color=line_clrs(2)
OPLOT, domain, P43, Thick=2, Color=line_clrs(3)
OPLOT, domain, P44, Thick=2, Color=line_clrs(4)
 
; Add a legend.
oldCharsize = !P.Charsize
!P.charsize = 0.75
labels = ['L40', 'L41', 'L42', 'L43', 'L44']
line_types = REPLICATE(!P.linestyle, 5)
psyms = REPLICATE(!P.psym, 5)
LEGEND, labels, line_clrs, line_types, psyms, 1.6, -0.3, 0.1 
!P.charsize = oldCharsize
 
 
Example 3
; Make up some function data to go with the abscissa values.
sales_data = [0.918, 1.056, 1.906, 2.134, 3.029]
month = [0, 1, 3, 7, 10]
 
WINDOW, /Free, Xsize=700, Ysize=400
!P.font = 0
TEK_COLOR
clrs = WoColorConvert(INDGEN(256))
PLOT, month, sales_data, Psym=2, Xrange=[-0.1, 10.1], $
   Yrange=[0, 3.5], Ystyle=1, Xstyle=1, $
   Xtitle='Month', Ytitle='Log Sales Revenue', $
   Title='4!eth!N-degree Lagrange Interpolating Polynomial', $
   Color=clrs(0), Background=clrs(1)
     
; Fit the Lagrange interpolating polynomial to the data and plot it.     
l_val = LAGRANGE(month, sales_data)
x_val = INTERPOL([0,10], 1000)
p_val = POLY(x_val, l_val)
OPLOT, x_val, p_val, Color=clrs(8), Thick=2
 
 
See Also