3
* Introducci@'on a interpol::
4
* Definiciones para interpol::
7
@node Introducci@'on a interpol, Definiciones para interpol, interpol, interpol
8
@section Introducci@'on a interpol
10
El paquete @code{interpol} desarrolla los m@'etodos de interpolaci@'on polin@'omica de Lagrange, lineal y de @i{splines} c@'ubicos.
13
Para comentarios, fallos o sugerencias, contactar con @var{'mario ARROBA edu PUNTO xunta PUNTO es'}.
17
@node Definiciones para interpol, , Introducci@'on a interpol, interpol
18
@section Definiciones para interpol
21
@deffn {Funci@'on} lagrange (@var{points})
22
@deffnx {Funci@'on} lagrange (@var{points}, @var{option})
23
Calcula el polinomio de interpolaci@'on por el m@'etodo de Lagrange. El argumento @var{points} debe ser:
27
una matriz de dos columnas, @code{p:matrix([2,4],[5,6],[9,3])},
29
una lista de pares de n@'umeros, @code{p: [[2,4],[5,6],[9,3]]},
31
una lista de n@'umeros, @code{p: [4,6,3]}, en cuyo caso las abscisas se asignar@'an autom@'aticamente a 1, 2, 3, etc.
34
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada antes de proceder a los c@'alculos.
36
Mediante el argumento @var{option} es posible seleccionar el nombre de la variable independiente, que por defecto es @code{'x}; para definir otra, escr@'{@dotless{i}}base algo como @code{varname='z}.
41
(%i1) load("interpol")$
42
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
45
73 x - 1402 x + 8957 x - 21152 x + 15624
46
(%o3) -------------------------------------------
50
73 x - 1402 x + 8957 x - 21152 x + 15624
51
(%o4) f(x) := -------------------------------------------
53
(%i5) /* Evaluate the polynomial at some points */
56
(%o5) [- 1.567535000000005, ------,
59
73 %pi - 1402 %pi + 8957 %pi - 21152 %pi + 15624
60
---------------------------------------------------]
63
(%o6) [- 1.567535000000005, 10.9366573451538,
65
(%i7) /* Plot the polynomial together with points */
66
plot2d([f(x),[discrete,p]],[x,0,10],
67
[gnuplot_curve_styles,
68
["with lines","with points pointsize 3"]])$
69
(%i8) /* Change variable name */
70
lagrange(p, varname=w);
72
73 w - 1402 w + 8957 w - 21152 w + 15624
73
(%o8) -------------------------------------------
80
@deffn {Funci@'on} charfun2 (@var{x}, @var{a}, @var{b})
81
Devuelve @code{true} si el n@'umero @var{x} pertenece al intervalo @math{[a, b)}, y @code{false} en caso contrario.
85
@deffn {Funci@'on} linearinterpol (@var{points})
86
@deffnx {Funci@'on} linearinterpol (@var{points}, @var{option})
87
Calcula rectas de interpolaci@'on. El argumento @var{points} debe ser:
91
una matriz de dos columnas, @code{p:matrix([2,4],[5,6],[9,3])},
93
una lista de pares de n@'umeros, @code{p: [[2,4],[5,6],[9,3]]},
95
una lista de n@'umeros, @code{p: [4,6,3]}, en cuyo caso las abscisas se asignar@'an autom@'aticamente a 1, 2, 3, etc.
98
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada antes de proceder a los c@'alculos.
100
Mediante el argumento @var{option} es posible seleccionar el nombre de la variable independiente, que por defecto es @code{'x}; para definir otra, escr@'{@dotless{i}}base algo como @code{varname='z}.
105
(%i1) load("interpol")$
106
(%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
107
(%i3) linearinterpol(p);
108
(%o3) - ((9 x - 39) charfun2(x, minf, 3)
109
+ (30 - 6 x) charfun2(x, 7, inf)
110
+ (30 x - 222) charfun2(x, 6, 7)
111
+ (18 - 10 x) charfun2(x, 3, 6))/6
113
(%o4) f(x) := - ((9 x - 39) charfun2(x, minf, 3)
114
+ (30 - 6 x) charfun2(x, 7, inf)
115
+ (30 x - 222) charfun2(x, 6, 7)
116
+ (18 - 10 x) charfun2(x, 3, 6))/6
117
(%i5) /* Evaluate the polynomial at some points */
118
map(f,[7.3,25/7,%pi]);
120
(%o5) [2.3, --, - -----------]
123
(%o6) [2.3, 2.952380952380953, 2.235987755982988]
124
(%i7) /* Plot the polynomial together with points */
125
plot2d(['(f(x)),[discrete,args(p)]],[x,-5,20],
126
[gnuplot_curve_styles,
127
["with lines","with points pointsize 3"]])$
128
(%i8) /* Change variable name */
129
linearinterpol(p, varname='s);
130
(%o8) - ((9 s - 39) charfun2(s, minf, 3)
131
+ (30 - 6 s) charfun2(s, 7, inf)
132
+ (30 s - 222) charfun2(s, 6, 7)
133
+ (18 - 10 s) charfun2(s, 3, 6))/6
140
@deffn {Funci@'on} cspline (@var{points})
141
@deffnx {Funci@'on} cspline (@var{points}, @var{option1}, @var{option2}, ...)
142
Calcula el polinomio de interpolaci@'on por el m@'etodo de los @i{splines} c@'ubicos. El argumento @var{points} debe ser:
146
una matriz de dos columnas, @code{p:matrix([2,4],[5,6],[9,3])},
148
una lista de pares de n@'umeros, @code{p: [[2,4],[5,6],[9,3]]},
150
una lista de n@'umeros, @code{p: [4,6,3]}, en cuyo caso las abscisas se asignar@'an autom@'aticamente a 1, 2, 3, etc.
153
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada antes de proceder a los c@'alculos.
155
Esta funci@'on dispone de tres opciones para acomodarse a necesidades concretas:
159
@code{'d1}, por defecto @code{'unknown}, es la primera derivada en @math{x_1}; si toma el valor @code{'unknown}, la segunda derivada en @math{x_1} se iguala a 0 (@i{spline} c@'ubico natural); en caso de tomar un valor num@'erico, la segunda derivada se calcula en base a este n@'umero.
162
@code{'dn}, por defecto @code{'unknown}, es la primera derivada en @math{x_n}; si toma el valor @code{'unknown}, la segunda derivada en @math{x_n} se iguala a 0 (@i{spline} c@'ubico natural); en caso de tomar un valor num@'erico, la segunda derivada se calcula en base a este n@'umero.
165
@code{'varname}, por defecto @code{'x}, es el nombre de la variable independiente.
171
(%i1) load("interpol")$
172
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
173
(%i3) /* Unknown first derivatives at the extremes
174
is equivalent to natural cubic splines */
177
(%o3) ((3477 x - 10431 x - 18273 x + 74547)
179
charfun2(x, minf, 3) + (- 15522 x + 372528 x - 2964702 x
180
+ 7842816) charfun2(x, 7, inf)
182
+ (28290 x - 547524 x + 3475662 x - 7184700)
184
charfun2(x, 6, 7) + (- 6574 x + 80028 x - 289650 x
185
+ 345924) charfun2(x, 3, 6))/9864
187
(%i5) /* Some evaluations */
188
map(f,[2.3,5/7,%pi]), numer;
189
(%o5) [1.991460766423358, 5.823200187269904,
191
(%i6) /* Plotting interpolating function */
192
plot2d(['(f(x)),[discrete,p]],[x,0,10],
193
[gnuplot_curve_styles,
194
["with lines","with points pointsize 3"]])$
195
(%i7) /* New call, but giving values at the derivatives */
196
cspline(p,d1=0,dn=0);
198
(%o7) ((17541 x - 102933 x + 153243 x + 33669)
200
charfun2(x, minf, 3) + (- 55692 x + 1280916 x - 9801792 x
201
+ 24990624) charfun2(x, 7, inf)
203
+ (65556 x - 1265292 x + 8021664 x - 16597440)
205
charfun2(x, 6, 7) + (- 15580 x + 195156 x - 741024 x
206
+ 927936) charfun2(x, 3, 6))/20304
207
(%i8) /* Defining new interpolating function */
209
(%i9) /* Plotting both functions together */
210
plot2d(['(f(x)),'(g(x)),[discrete,p]],[x,0,10],
211
[gnuplot_curve_styles,
212
["with lines","with lines","with points pointsize 3"]])$