Rename specvar integer-info to *integer-info*
[maxima.git] / doc / info / de / interpol.de.texi
blob74497b68a06525cf746d243f566c81961444a87f
1 @c -----------------------------------------------------------------------------
2 @c File     : interpol.de.texi
3 @c License  : GNU General Public License (GPL)
4 @c Language : German
5 @c Author   : Dr. Dieter Kaiser
6 @c Date     : 08.11.2010
7 @c 
8 @c This file is part of Maxima -- GPL CAS based on DOE-MACSYMA
9 @c -----------------------------------------------------------------------------
11 @menu
12 * Introduction to interpol::
13 * Functions and Variables for interpol::
14 @end menu
16 @c -----------------------------------------------------------------------------
17 @node Introduction to interpol, Functions and Variables for interpol, interpol, interpol
18 @section Introduction to interpol
20 Package @code{interpol} defines the Lagrangian, the linear and the cubic 
21 splines methods for polynomial interpolation.
23 For comments, bugs or suggestions, please contact me at @var{'mario AT edu DOT xunta DOT es'}.
25 @c @opencatbox
26 @c @category{Numerical methods} @category{Share packages} @category{Package interpol}
27 @c @closecatbox
29 @c -----------------------------------------------------------------------------
30 @node Functions and Variables for interpol,  , Introduction to interpol, interpol
31 @section Functions and Variables for interpol
33 @c -----------------------------------------------------------------------------
34 @deffn {Function} lagrange (@var{points})
35 @deffnx {Function} lagrange (@var{points}, @var{option})
37 Computes the polynomial interpolation by the Lagrangian method. Argument @var{points} must be either:
39 @itemize @bullet
40 @item
41 a two column matrix, @code{p:matrix([2,4],[5,6],[9,3])},
42 @item
43 a list of pairs, @code{p: [[2,4],[5,6],[9,3]]},
44 @item
45 a list of numbers, @code{p: [4,6,3]}, in which case the abscissas will be assigned automatically to 1, 2, 3, etc.
46 @end itemize
48 In the first two cases the pairs are ordered with respect to the first coordinate before making computations.
50 With the @var{option} argument it is possible to select the name for the independent variable, which is @code{'x} by default; to define another one, write something like @code{varname='z}. 
52 Note that when working with high degree polynomials, floating point evaluations are unstable.
54 Examples:
56 @example
57 (%i1) load("interpol")$
58 (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
59 (%i3) lagrange(p);
60        (x - 7) (x - 6) (x - 3) (x - 1)
61 (%o3)  -------------------------------
62                      35
63    (x - 8) (x - 6) (x - 3) (x - 1)
64  - -------------------------------
65                  12
66    7 (x - 8) (x - 7) (x - 3) (x - 1)
67  + ---------------------------------
68                   30
69    (x - 8) (x - 7) (x - 6) (x - 1)
70  - -------------------------------
71                  60
72    (x - 8) (x - 7) (x - 6) (x - 3)
73  + -------------------------------
74                  84
75 (%i4) f(x):=''%;
76                (x - 7) (x - 6) (x - 3) (x - 1)
77 (%o4)  f(x) := -------------------------------
78                              35
79    (x - 8) (x - 6) (x - 3) (x - 1)
80  - -------------------------------
81                  12
82    7 (x - 8) (x - 7) (x - 3) (x - 1)
83  + ---------------------------------
84                   30
85    (x - 8) (x - 7) (x - 6) (x - 1)
86  - -------------------------------
87                  60
88    (x - 8) (x - 7) (x - 6) (x - 3)
89  + -------------------------------
90                  84
91 (%i5) /* Evaluate the polynomial at some points */
92       expand(map(f,[2.3,5/7,%pi]));
93                                   4          3           2
94                     919062  73 %pi    701 %pi    8957 %pi
95 (%o5)  [- 1.567535, ------, ------- - -------- + ---------
96                     84035     420       210         420
97                                              5288 %pi   186
98                                            - -------- + ---]
99                                                105       5
100 (%i6) %,numer;
101 (%o6) [- 1.567535, 10.9366573451538, 2.89319655125692]
102 (%i7) load("draw")$  /* load draw package */
103 (%i8) /* Plot the polynomial together with points */
104       draw2d(
105         color      = red,
106         key        = "Lagrange polynomial",
107         explicit(f(x),x,0,10),
108         point_size = 3,
109         color      = blue,
110         key        = "Sample points",
111         points(p))$
112 (%i9) /* Change variable name */
113       lagrange(p, varname=w);
114        (w - 7) (w - 6) (w - 3) (w - 1)
115 (%o9)  -------------------------------
116                      35
117    (w - 8) (w - 6) (w - 3) (w - 1)
118  - -------------------------------
119                  12
120    7 (w - 8) (w - 7) (w - 3) (w - 1)
121  + ---------------------------------
122                   30
123    (w - 8) (w - 7) (w - 6) (w - 1)
124  - -------------------------------
125                  60
126    (w - 8) (w - 7) (w - 6) (w - 3)
127  + -------------------------------
128                  84
129 @end example
131 @c @opencatbox
132 @c @category{Package interpol}
133 @c @closecatbox
134 @end deffn
136 @c -----------------------------------------------------------------------------
137 @deffn {Function} charfun2 (@var{x}, @var{a}, @var{b})
139 Returns @code{true} if number @var{x} belongs to the interval @math{[a, b)}, 
140 and @code{false} otherwise.
142 @c @opencatbox
143 @c @category{Package interpol}
144 @c @closecatbox
145 @end deffn
147 @c -----------------------------------------------------------------------------
148 @deffn  {Function} linearinterpol (@var{points})
149 @deffnx {Function} linearinterpol (@var{points}, @var{option})
151 Computes the polynomial interpolation by the linear method. Argument 
152 @var{points} must be either:
154 @itemize @bullet
155 @item
156 a two column matrix, @code{p:matrix([2,4],[5,6],[9,3])},
157 @item
158 a list of pairs, @code{p: [[2,4],[5,6],[9,3]]},
159 @item
160 a list of numbers, @code{p: [4,6,3]}, in which case the abscissas will be assigned automatically to 1, 2, 3, etc.
161 @end itemize
163 In the first two cases the pairs are ordered with respect to the first coordinate before making computations.
165 With the @var{option} argument it is possible to select the name for the independent variable, which is @code{'x} by default; to define another one, write something like @code{varname='z}. 
167 Examples:
168 @example
169 (%i1) load("interpol")$
170 (%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
171 (%i3) linearinterpol(p);
172         13   3 x
173 (%o3)  (-- - ---) charfun2(x, minf, 3)
174         2     2
175  + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
176     5 x
177  + (--- - 3) charfun2(x, 3, 6)
178      3
180 (%i4) f(x):=''%;
181                 13   3 x
182 (%o4)  f(x) := (-- - ---) charfun2(x, minf, 3)
183                 2     2
184  + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
185     5 x
186  + (--- - 3) charfun2(x, 3, 6)
187      3
188 (%i5)  /* Evaluate the polynomial at some points */
189        map(f,[7.3,25/7,%pi]);
190                             62  5 %pi
191 (%o5)                 [2.3, --, ----- - 3]
192                             21    3
193 (%i6) %,numer;
194 (%o6)  [2.3, 2.952380952380953, 2.235987755982989]
195 (%i7) load("draw")$  /* load draw package */
196 (%i8)  /* Plot the polynomial together with points */
197        draw2d(
198          color      = red,
199          key        = "Linear interpolator",
200          explicit(f(x),x,-5,20),
201          point_size = 3,
202          color      = blue,
203          key        = "Sample points",
204          points(args(p)))$
205 (%i9)  /* Change variable name */
206        linearinterpol(p, varname='s);
207        13   3 s
208 (%o9) (-- - ---) charfun2(s, minf, 3)
209        2     2
210  + (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7)
211     5 s
212  + (--- - 3) charfun2(s, 3, 6)
213      3
214 @end example
216 @c @opencatbox
217 @c @category{Package interpol}
218 @c @closecatbox
219 @end deffn
221 @c -----------------------------------------------------------------------------
222 @deffn  {Function} cspline (@var{points})
223 @deffnx {Function} cspline (@var{points}, @var{option1}, @var{option2}, ...)
225 Computes the polynomial interpolation by the cubic splines method. Argument 
226 @var{points} must be either:
228 @itemize @bullet
229 @item
230 a two column matrix, @code{p:matrix([2,4],[5,6],[9,3])},
231 @item
232 a list of pairs, @code{p: [[2,4],[5,6],[9,3]]},
233 @item
234 a list of numbers, @code{p: [4,6,3]}, in which case the abscissas will be assigned automatically to 1, 2, 3, etc.
235 @end itemize
237 In the first two cases the pairs are ordered with respect to the first coordinate before making computations.
239 There are three options to fit specific needs:
240 @itemize @bullet
241 @item
242 @code{'d1}, default @code{'unknown}, is the first derivative at @math{x_1}; if it is @code{'unknown}, the second derivative at @math{x_1} is made equal to 0 (natural cubic spline); if it is equal to a number, the second derivative is calculated based on this number.
244 @item
245 @code{'dn}, default @code{'unknown}, is the first derivative at @math{x_n}; if it is @code{'unknown}, the second derivative at @math{x_n} is made equal to 0 (natural cubic spline); if it is equal to a number, the second derivative is calculated based on this number.
247 @item
248 @code{'varname}, default @code{'x}, is the name of the independent variable.
249 @end itemize
251 Examples:
252 @example
253 (%i1) load("interpol")$
254 (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
255 (%i3) /* Unknown first derivatives at the extremes
256          is equivalent to natural cubic splines */
257       cspline(p);
258               3         2
259         1159 x    1159 x    6091 x   8283
260 (%o3)  (------- - ------- - ------ + ----) charfun2(x, minf, 3)
261          3288      1096      3288    1096
262             3         2
263       2587 x    5174 x    494117 x   108928
264  + (- ------- + ------- - -------- + ------) charfun2(x, 7, inf)
265        1644       137       1644      137
266           3          2
267     4715 x    15209 x    579277 x   199575
268  + (------- - -------- + -------- - ------) charfun2(x, 6, 7)
269      1644       274        1644      274
270             3         2
271       3287 x    2223 x    48275 x   9609
272  + (- ------- + ------- - ------- + ----) charfun2(x, 3, 6)
273        4932       274      1644     274
275 (%i4) f(x):=''%$
276 (%i5) /* Some evaluations */
277       map(f,[2.3,5/7,%pi]), numer;
278 (%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507]
279 (%i6) load("draw")$  /* load draw package */
280 (%i7) /* Plotting interpolating function */
281       draw2d(
282         color      = red,
283         key        = "Cubic splines",
284         explicit(f(x),x,0,10),
285         point_size = 3,
286         color      = blue,
287         key        = "Sample points",
288         points(p))$
289 (%i8) /* New call, but giving values at the derivatives */
290       cspline(p,d1=0,dn=0);
291               3          2
292         1949 x    11437 x    17027 x   1247
293 (%o8)  (------- - -------- + ------- + ----) charfun2(x, minf, 3)
294          2256       2256      2256     752
295             3          2
296       1547 x    35581 x    68068 x   173546
297  + (- ------- + -------- - ------- + ------) charfun2(x, 7, inf)
298         564       564        141      141
299          3          2
300     607 x    35147 x    55706 x   38420
301  + (------ - -------- + ------- - -----) charfun2(x, 6, 7)
302      188       564        141      47
303             3         2
304       3895 x    1807 x    5146 x   2148
305  + (- ------- + ------- - ------ + ----) charfun2(x, 3, 6)
306        5076       188      141      47
307 (%i8) /* Defining new interpolating function */
308       g(x):=''%$
309 (%i9) /* Plotting both functions together */
310       draw2d(
311         color      = black,
312         key        = "Cubic splines (default)",
313         explicit(f(x),x,0,10),
314         color      = red,
315         key        = "Cubic splines (d1=0,dn=0)",
316         explicit(g(x),x,0,10),
317         point_size = 3,
318         color      = blue,
319         key        = "Sample points",
320         points(p))$
321 @end example
323 @c @opencatbox
324 @c @category{Package interpol}
325 @c @closecatbox
326 @end deffn
328 @c -----------------------------------------------------------------------------
329 @deffn  {Function} ratinterpol (@var{points}, @var{numdeg})
330 @deffnx {Function} ratinterpol (@var{points}, @var{numdeg}, @var{option1})
332 Generates a rational interpolator for data given by @var{points} and the degree of the numerator
333 being equal to @var{numdeg}; the degree of the denominator is calculated
334 automatically. Argument @var{points} must be either:
336 @itemize @bullet
337 @item
338 a two column matrix, @code{p:matrix([2,4],[5,6],[9,3])},
339 @item
340 a list of pairs, @code{p: [[2,4],[5,6],[9,3]]},
341 @item
342 a list of numbers, @code{p: [4,6,3]}, in which case the abscissas will be assigned automatically to 1, 2, 3, etc.
343 @end itemize
345 In the first two cases the pairs are ordered with respect to the first coordinate before making computations.
347 There is one option to fit specific needs:
348 @itemize @bullet
349 @item
350 @code{'varname}, default @code{'x}, is the name of the independent variable.
351 @end itemize
353 Examples:
355 @example
356 (%i1) load("interpol")$
357 (%i2) load("draw")$
358 (%i3) p:[[7.2,2.5],[8.5,2.1],[1.6,5.1],[3.4,2.4],[6.7,7.9]]$
359 (%i4) for k:0 thru length(p)-1 do                                     
360         draw2d(
361           explicit(ratinterpol(p,k),x,0,9),                      
362           point_size = 3,                                        
363           points(p),                                             
364           title = concat("Degree of numerator = ",k),            
365           yrange=[0,10])$
366 @end example
368 @c @opencatbox
369 @c @category{Package interpol}
370 @c @closecatbox
371 @end deffn
373 @c --- End of file interpol.de.texi --------------------------------------------