Anterior: Introducción a interpol, Subir: interpol [Índice general][Índice]
Calcula el polinomio de interpolación por el método de Lagrange. El argumento points debe ser:
p:matrix([2,4],[5,6],[9,3])
,
p: [[2,4],[5,6],[9,3]]
,
p: [4,6,3]
, en cuyo caso las abscisas se asignarán automáticamente a 1, 2, 3, etc.
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada antes de proceder a los cálculos.
Mediante el argumento option es posible seleccionar el nombre de la variable independiente, que por defecto es 'x
; para definir otra, escríbase algo como varname='z
.
Téngase en cuenta que cuando se trabaja con polinomios de grado alto, los cálculos con números decimales en coma flotante pueden ser muy inestables.
Véanse también linearinterpol
, cspline
y ratinterpol
.
Ejemplos:
(%i1) load("interpol")$ (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$ (%i3) lagrange(p); (x - 7) (x - 6) (x - 3) (x - 1) (%o3) ------------------------------- 35 (x - 8) (x - 6) (x - 3) (x - 1) - ------------------------------- 12 7 (x - 8) (x - 7) (x - 3) (x - 1) + --------------------------------- 30 (x - 8) (x - 7) (x - 6) (x - 1) - ------------------------------- 60 (x - 8) (x - 7) (x - 6) (x - 3) + ------------------------------- 84 (%i4) f(x):=''%; (x - 7) (x - 6) (x - 3) (x - 1) (%o4) f(x) := ------------------------------- 35 (x - 8) (x - 6) (x - 3) (x - 1) - ------------------------------- 12 7 (x - 8) (x - 7) (x - 3) (x - 1) + --------------------------------- 30 (x - 8) (x - 7) (x - 6) (x - 1) - ------------------------------- 60 (x - 8) (x - 7) (x - 6) (x - 3) + ------------------------------- 84 (%i5) /* Evaluate the polynomial at some points */ expand(map(f,[2.3,5/7,%pi])); 4 3 2 919062 73 %pi 701 %pi 8957 %pi (%o5) [- 1.567535, ------, ------- - -------- + --------- 84035 420 210 420 5288 %pi 186 - -------- + ---] 105 5 (%i6) %,numer; (%o6) [- 1.567535, 10.9366573451538, 2.89319655125692] (%i7) load("draw")$ /* load draw package */ (%i8) /* Plot the polynomial together with points */ draw2d( color = red, key = "Lagrange polynomial", explicit(f(x),x,0,10), point_size = 3, color = blue, key = "Sample points", points(p))$ (%i9) /* Change variable name */ lagrange(p, varname=w); (w - 7) (w - 6) (w - 3) (w - 1) (%o9) ------------------------------- 35 (w - 8) (w - 6) (w - 3) (w - 1) - ------------------------------- 12 7 (w - 8) (w - 7) (w - 3) (w - 1) + --------------------------------- 30 (w - 8) (w - 7) (w - 6) (w - 1) - ------------------------------- 60 (w - 8) (w - 7) (w - 6) (w - 3) + ------------------------------- 84
Devuelve true
si el número x pertenece al intervalo \([a, b)\), y false
en caso contrario.
Calcula rectas de interpolación. El argumento points debe ser:
p:matrix([2,4],[5,6],[9,3])
,
p: [[2,4],[5,6],[9,3]]
,
p: [4,6,3]
, en cuyo caso las abscisas se asignarán automáticamente a 1, 2, 3, etc.
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada antes de proceder a los cálculos.
Mediante el argumento option es posible seleccionar el nombre de la variable independiente, que por defecto es 'x
; para definir otra, escríbase algo como varname='z
.
Véanse también lagrange
, cspline
y ratinterpol
.
Ejemplos:
(%i1) load("interpol")$ (%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$ (%i3) linearinterpol(p); 13 3 x (%o3) (-- - ---) charfun2(x, minf, 3) 2 2 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7) 5 x + (--- - 3) charfun2(x, 3, 6) 3 (%i4) f(x):=''%; 13 3 x (%o4) f(x) := (-- - ---) charfun2(x, minf, 3) 2 2 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7) 5 x + (--- - 3) charfun2(x, 3, 6) 3 (%i5) /* Evaluate the polynomial at some points */ map(f,[7.3,25/7,%pi]); 62 5 %pi (%o5) [2.3, --, ----- - 3] 21 3 (%i6) %,numer; (%o6) [2.3, 2.952380952380953, 2.235987755982989] (%i7) load("draw")$ /* load draw package */ (%i8) /* Plot the polynomial together with points */ draw2d( color = red, key = "Linear interpolator", explicit(f(x),x,-5,20), point_size = 3, color = blue, key = "Sample points", points(args(p)))$ (%i9) /* Change variable name */ linearinterpol(p, varname='s); 13 3 s (%o9) (-- - ---) charfun2(s, minf, 3) 2 2 + (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7) 5 s + (--- - 3) charfun2(s, 3, 6) 3
Calcula el polinomio de interpolación por el método de los splines cúbicos. El argumento points debe ser:
p:matrix([2,4],[5,6],[9,3])
,
p: [[2,4],[5,6],[9,3]]
,
p: [4,6,3]
, en cuyo caso las abscisas se asignarán automáticamente a 1, 2, 3, etc.
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada antes de proceder a los cálculos.
Esta función dispone de tres opciones para acomodarse a necesidades concretas:
'd1
, por defecto 'unknown
, es la primera derivada en \(x_1\); si toma el valor 'unknown
, la segunda derivada en \(x_1\) se iguala a 0 (spline cúbico natural); en caso de tomar un valor numérico, la segunda derivada se calcula en base a este número.
'dn
, por defecto 'unknown
, es la primera derivada en \(x_n\); si toma el valor 'unknown
, la segunda derivada en \(x_n\) se iguala a 0 (spline cúbico natural); en caso de tomar un valor numérico, la segunda derivada se calcula en base a este número.
'varname
, por defecto 'x
, es el nombre de la variable independiente.
Véanse también lagrange
, linearinterpol
y ratinterpol
.
Ejemplos:
(%i1) load("interpol")$ (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$ (%i3) /* Unknown first derivatives at the extremes is equivalent to natural cubic splines */ cspline(p); 3 2 1159 x 1159 x 6091 x 8283 (%o3) (------- - ------- - ------ + ----) charfun2(x, minf, 3) 3288 1096 3288 1096 3 2 2587 x 5174 x 494117 x 108928 + (- ------- + ------- - -------- + ------) charfun2(x, 7, inf) 1644 137 1644 137 3 2 4715 x 15209 x 579277 x 199575 + (------- - -------- + -------- - ------) charfun2(x, 6, 7) 1644 274 1644 274 3 2 3287 x 2223 x 48275 x 9609 + (- ------- + ------- - ------- + ----) charfun2(x, 3, 6) 4932 274 1644 274 (%i4) f(x):=''%$ (%i5) /* Some evaluations */ map(f,[2.3,5/7,%pi]), numer; (%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507] (%i6) load("draw")$ /* load draw package */ (%i7) /* Plotting interpolating function */ draw2d( color = red, key = "Cubic splines", explicit(f(x),x,0,10), point_size = 3, color = blue, key = "Sample points", points(p))$ (%i8) /* New call, but giving values at the derivatives */ cspline(p,d1=0,dn=0); 3 2 1949 x 11437 x 17027 x 1247 (%o8) (------- - -------- + ------- + ----) charfun2(x, minf, 3) 2256 2256 2256 752 3 2 1547 x 35581 x 68068 x 173546 + (- ------- + -------- - ------- + ------) charfun2(x, 7, inf) 564 564 141 141 3 2 607 x 35147 x 55706 x 38420 + (------ - -------- + ------- - -----) charfun2(x, 6, 7) 188 564 141 47 3 2 3895 x 1807 x 5146 x 2148 + (- ------- + ------- - ------ + ----) charfun2(x, 3, 6) 5076 188 141 47 (%i8) /* Defining new interpolating function */ g(x):=''%$ (%i9) /* Plotting both functions together */ draw2d( color = black, key = "Cubic splines (default)", explicit(f(x),x,0,10), color = red, key = "Cubic splines (d1=0,dn=0)", explicit(g(x),x,0,10), point_size = 3, color = blue, key = "Sample points", points(p))$
Genera el interpolador racional para los datos dados por points y con grado numdeg en el numerador; el grado del denominador se calcula automáticamente. El argumento points debe ser:
p:matrix([2,4],[5,6],[9,3])
,
p: [[2,4],[5,6],[9,3]]
,
p: [4,6,3]
, en cuyo caso las abscisas se asignarán automáticamente a 1, 2, 3, etc.
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada antes de proceder a los cálculos.
Esta función dispone de una opción para acomodarse a necesidades concretas:
'varname
, por defecto 'x
, es el nombre de la variable independiente.
Véanse también lagrange
, linearinterpol
, cspline
, minpack_lsquares
y lbfgs
.
Ejemplos:
(%i1) load("interpol")$ (%i2) load("draw")$ (%i3) p:[[7.2,2.5],[8.5,2.1],[1.6,5.1],[3.4,2.4],[6.7,7.9]]$ (%i4) for k:0 thru length(p)-1 do draw2d( explicit(ratinterpol(p,k),x,0,9), point_size = 3, points(p), title = concat("Grado del numerador = ",k), yrange=[0,10])$
Anterior: Introducción a interpol, Subir: interpol [Índice general][Índice]