Beruflich Dokumente
Kultur Dokumente
Mayo 2007
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
OBJETIVOS DE LA PRÁCTICA
1º. Definir y representar funciones definidas por tramos.
2º. Estudiar diferentes casos de interpolaciones polinomiales por tramos.
BIBLIOGRAFÍA
Algunos de los ejercicios de esta práctica están basados en los recogidos en:
1
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
EJEMPLOS
Primer ejemplo: Definición de funciones a trozos.
A) Primera opción: Mediante un procedimiento.
> restart;
> with(linalg):with(plots):with(plottools):
Warning, the protected names norm and trace have been redefined and
unprotected
Una vez definida, podemos usar la función de la misma manera que las que
vienen predefinidas en MAPLE. Por ejemplo, podremos evaluar el valor que toma
la función en diferentes puntos así,
Para x=3:
> ftroz(3);
9
Para x=5:
> ftroz(5);
2
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
11
> ftroz(-6);
Ahora:
> ftroz(-6);
0
Podemos representar la función:
> plot(ftroz,-5..15,color=red,thickness=3);
3
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> ftroz(x);
Error, (in ftroz) cannot determine if this expression is true or false: -
x <= 0 and x-3 <= 0
> plot(ftroz(x),-5..15,color=red,thickness=3);
Error, (in ftroz) cannot determine if this expression is true or false: -
x <= 0 and x-3 <= 0
> fin;
4
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
fin
MAPLE dispone de una instrucción específica para definir funciones por tramos.
Esta instrucción es el comando piecewise, cuya estructura es:
5
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
6
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> fin;
fin
x0 = 0, x1 = 1, x2 = 2, x3 = 3, x4 = 4, x5 = 5, x6 = 6
7
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
⎧ x − x0
⎪ si x0 ≤ x ≤ x1
φ (0) = ⎨ x1 − x0
⎪0
⎩ en otro caso
⎧ x − xi −1
⎪x − x si xi −1 ≤ x ≤ xi
⎪ i i −1
⎪ x − xi +1
φ (i ) = ⎨ si xi ≤ x ≤ xi +1 (i=2,",n-1)
⎪ xi − xi +1
⎪0 en otro caso
⎪
⎩
⎧ x − xn−1
⎪ si xn−1 ≤ x ≤ xn
φ (n) = ⎨ xn − xn−1
⎪0
⎩ en otro caso
> restart;
> with(linalg):with(plots):
Warning, the protected names norm and trace have been redefined and
unprotected
> n := 6:
> xn[0]:=0;
h:=1;
xn 0 := 0
h := 1
> for i from 1 by 1 to n do
xn[i] := xn[i-1]+h:
od;
xn 1 := 1
xn 2 := 2
8
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
xn 3 := 3
xn 4 := 4
xn 5 := 5
xn 6 := 6
⎧ x−1 1 ≤ x and x ≤ 2
⎪
φ 2 := ⎪⎪⎨ −x + 3 2 ≤ x and x ≤ 3
⎪⎪ 0
⎩ otherwise
⎧ x−2 2 ≤ x and x ≤ 3
⎪
φ 3 := ⎪⎪⎨ −x + 4 3 ≤ x and x ≤ 4
⎪⎪ 0
⎩ otherwise
⎧ x−3 3 ≤ x and x ≤ 4
⎪
φ 4 := ⎪⎨⎪ −x + 5 4 ≤ x and x ≤ 5
⎪⎪ 0
⎩ otherwise
⎧ x−4 4 ≤ x and x ≤ 5
⎪
φ 5 := ⎪⎪⎨ −x + 6 5 ≤ x and x ≤ 6
⎪⎪ 0
⎩ otherwise
> phi[n]:= piecewise(xn[n-1]<=x and x<=xn[n],funn);
x−5 5 ≤ x and x ≤ 6
φ 6 := {
0 otherwise
9
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
plot(phi[i](x),x=xn[0]..xn[6],scaling=constrained,thickness=3
);
od;
10
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
11
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
12
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
13
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
14
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
15
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
16
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
colorin:=COLOR(RGB,indice,(1-indice)/4 ,3*(1-
indice)/4):
else
colorin:=COLOR(RGB,indice,(1-indice)/2 ,(1-
indice)/2):
fi:
dibu[i]:=plot(phi[i](x),x=xn[0]..xn[6],scaling=constrained,
thickness=3,color= colorin):
od:
> display(seq(dibu[i],i=0..n));
17
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
x 0 1 3 5 6 7 8
f(x) 4 2 3 3 1 6 2
> restart;
> with(linalg):with(plots):
Warning, the protected names norm and trace have been redefined and
unprotected
> n := 6;
n := 6
18
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> fbase_tramos2:=proc(n,s,phi)
local i:
phi[0]:=piecewise(x>= s[0] and x<=s[2],(x-s[1])*(x-
s[2])/((s[0]-s[1])*(s[0]-s[2])),0):
for i from 1 to (n-1) by 2 do
phi[i]:=piecewise(x>=s[i-1] and x<=s[i+1],(x-s[i-
1])*(x-s[i+1])/((s[i]-s[i-1])*(s[i]-s[i+1])),0):
od:
for i from 2 to (n-2) by 2 do
phi[i]:=piecewise(x>=s[i-2] and x<=s[i],(x-s[i-2])*(x-
s[i-1])/((s[i]-s[i-2])*(s[i]-s[i-1])),
x>s[i] and x<=s[i+2],(x-s[i+1])*(x-
s[i+2])/((s[i]-s[i+1])*(s[i]-s[i+2])),0):
od:
phi[n]:=piecewise(x>=s[n-2] and x<=s[n],(x-s[n-2])*(x-
s[n-1])/((s[n]-s[n-2])*(s[n]-s[n-1])),0):
end proc:
> save fbase_tramos2,"fbase_tramos2.m":
> fbase_tramos2(n,xn,phi):
> for i from 0 by 1 to n do
expand(phi[i]);
od;
⎧ 1 x2 − 4 x + 1 −x ≤ 0 and x − 3 ≤ 0
⎪
⎪⎨ 3 3
⎪
⎪
⎩ 0 otherwise
⎧ −1 x2 + 3 x −x ≤ 0 and x − 3 ≤ 0
⎪
⎪⎨ 2 2
⎪
⎪
⎩ 0 otherwise
19
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
⎧ 1 x2 − 1 x −x ≤ 0 and x − 3 ≤ 0
⎪
⎪ 6 6
⎪
⎪1
⎨⎪⎪ x2 − 11 x + 5 −x < -3 and x − 6 ≤ 0
⎪6 6
⎪
⎪⎪
⎩ 0 otherwise
⎧ −1 x2 + 9 x − 9 3 − x ≤ 0 and x − 6 ≤ 0
⎪
⎪⎨ 2 2
⎪
⎪
⎩ 0 otherwise
⎧ 1 x2 − 8 x + 5 3 − x ≤ 0 and x − 6 ≤ 0
⎪
⎪ 3 3
⎪
⎪1
⎪⎨ 2 15
⎪ x − x + 28 −x < -6 and x − 8 ≤ 0
⎪2 2
⎪
⎪⎪
⎩ 0 otherwise
−x2 + 14 x − 48 6 − x ≤ 0 and x − 8 ≤ 0
{
0 otherwise
⎧ 1 x2 − 13 x + 21 6 − x ≤ 0 and x − 8 ≤ 0
⎪
⎪⎨ 2 2
⎪
⎪
⎩ 0 otherwise
Dibujamos los polinomios de base
plot(phi[i],x=xn[0]..xn[n],scaling=CONSTRAINED,thickness=3);
od;
20
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
21
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
22
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
23
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
24
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
25
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
26
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
27
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
dibu[i]:=plot(phi[i](x),x=xn[0]..xn[6],scaling=constrained,
thickness=3,color= colorin):
od:
> display(seq(dibu[i],i=0..n));
> u:=x->simplify(add(fval[i]*phi[i],i=0..n)):
> u(x);
28
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
⎧ 0 x<0
⎪
⎪ 5 2 17
⎪
⎪ 6x − 6 x+4 x≤3
⎪
⎪
⎪
⎪ −2 x2 + 16 x − 7 x≤6
⎪⎨
⎪ 3 3
⎪
⎪ 9
⎪ 127
⎪ − x2 + x − 218 x≤8
⎪ 2 2
⎪
⎪⎪
⎩ 0 8<x
Por último, representemos gráficamente la función interpoladora
> plot(u(x),x=xn[0]..xn[n],thickness=4);
29
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> fin;
fin
30
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> restart;
> with(plots):
> with(linalg):
Warning, the name changecoords has been redefined
Warning, the protected names norm and trace have been redefined and
unprotected
> soporte:=proc(a,b,n,puntos)
local i, h:
h:= evalf((b-a)/n):
for i from 0 to n by 1 do
puntos[i]:=a+i*h:
od:
end proc:
> save soporte, "soporte.m":
31
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> polbase:=proc(n,s,P)
local i:
read "polbasei.m":
P:=array(0..n):
for i from 0 to n by 1 do
polbasei(n,s,i,P[i]):
od:
end:
> pLagrange:=proc(n,f,s,p)
local L, valor, i:
read "polbase.m";
L:=array(0..n):
valor:=array(0..n):
polbase(n,s,L):
for i from 0 to n by 1 do
valor[i]:=evalf(f(s[i])):
od:
p:=x->sum(valor[j]*L[j](x),j=0..n):
end:
> save polbasei,"polbasei.m":
save polbase, "polbase.m":
save pLagrange, "pLagrange.m":
Los tres procedimientos anteriores serán utilizados para el cálculo del polinomio
interpolador buscado. Si ya los tuvieses salvados de prácticas anteriores sólo
tendrías que leerlos.
32
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> pLagrange(n,f,xn,p24):
33
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
34
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
35
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> fin;
fin
36
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
EJERCICIOS
Primer ejercicio propuesto: Interpolación
polinomial a trozos de primer orden
Se desea realizar una interpolación polinomial a trozos de primer orden de la
función: f ( x ) = e sen( x) tomando como soporte de interpolación el formado por
x
los puntos:
x0 = 0
π
x j = x j −1 + (j = 1,...,8)
8
Para ello, se obtendrán en primer lugar las funciones de base de Lagrange sobre
el soporte dado.
> restart;
>
>
>
>
>
> fin;
fin
37
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
x 0 1 2 3
-----------------------------------
f(x) 0 1 32 243
Tendremos en total 3n-1 condiciones para resolver 3n incógnitas. Nos faltará, por
lo tanto, una condición. Dicha condición se obtendrá a partir de la condición inicial
dada por el enunciado sobre la primera derivada en el punto 0.
38
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
NOTA:
De este ejercicio propuesto se proporciona la solución pues no se incluye en
los apuntes la información proporcionada a los estudiantes en relación a la
interpolación spline cuadrática.
> restart;
> with(linalg):with(plots):with(plottools):
Warning, the protected names norm and trace have been redefined and
unprotected
> n := 3:
> h := 1:
> xn[0] := 0;
xn0 := 0
xn2 := 2
xn3 := 3
> f(xn[0]):=0;f(xn[1]):=1;f(xn[2]):=32;f(xn[3]):=243;
f( 0 ) := 0
f( 1 ) := 1
f( 2 ) := 32
f( 3 ) := 243
39
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
s2 := x → a 2 + b 2 x + c2 x2
s3 := x → a 3 + b 3 x + c3 x2
Tendremos, por lo tanto, que resolver 3n incógnitas (los coeficientes a[i], b[i], c[i], i
= 1...n) para lo cual necesitaremos 3n ecuaciones.
Hay que tener, además, en cuenta, que las nuevas ecuaciones que se obtengan
deberán almacenarse en el vector eq pero a partir de la última posición que
se ocupó previamente. Por ello, ahora será necesario emplear un índice,
independiente del que controla el bucle, que se incremente en cada iteración.
> j:=1:
> for i from n by 1 to 2*n-2 do
eq[i] := evalf(D(s[j+1])(xn[j]))=evalf(D(s[j])(xn[j])):
j:=j+1:
od:
40
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
Al igual que antes, las nuevas ecuaciones que se obtengan deberán almacenarse
en el vector eq pero a partir de la última posición que se ocupó previamente.
Por lo tanto, nos falta una ecuación, que la obtendremos a partir de la condición
adicional dada por el enunciado:
f '(0) = 0
> eq[3*n]:=evalf(D(s[1])(xn[0]))=0:
a 3 + 2 b 3 + 4 c3 = a 2 + 2 b 2 + 4 c2
b 2 + 2. c2 = b 1 + 2. c1
b 3 + 4. c3 = b 2 + 4. c2
a 1 = 0.
a 2 + b 2 + c2 = 1.
a 3 + 2. b 3 + 4. c3 = 32.
a 3 + 3 b 3 + 9 c3 = 243
b1 = 0
41
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> j:=n+1:
> for i from 1 by 1 to n do
inc[j] := b[i]:
j := j+1:
od:
>
> for i from 1 by 1 to n do
inc[j] := c[i]:
j := j+1:
od:
> for i from 1 by 1 to 3*n do
inc[i];
od;
a1
a2
a3
b1
b2
b3
c1
c2
c3
Ahora tendremos dos vectores: eq , inc, en los que estrán almacenadas las
ecuaciones y las incógnitas respectivamente.
Para resolver el sistema de ecuaciones, construímos dos secuencias, una para las
ecuaciones y otra para las incógnitas, a las que llamaremos sistema e incogn.
42
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> spline2:=solve({sistema},{incogn});
spline2 :=
{ a 1 = 0., a 3 = 516., b 3 = -544., a 2 = 28., b 2 = -56., c3 = 151., c1 = 1., b 1 = 0., c2 = 29. }
a 3 = 516.
b 3 = -544.
a 2 = 28.
b 2 = -56.
c3 = 151.
c1 = 1.
b 1 = 0.
c2 = 29.
vecta2 := 28.
vecta3 := 516.
vectb2 := -56.
vectb3 := -544.
43
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
vectc1 := 1.
vectc2 := 29.
vectc3 := 151.
44
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
45
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
46
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> pspline := 0:
> for i from 1 by 1 to n do
pspline := pspline + spl[i]:
od:
> pspline;
⎛ 1. x
2
−x ≤ 0 and x − 1 ≤ 0 ⎞ ⎛ 28. − 56. x + 29. x2 1 − x ≤ 0 and x − 2 ≤ 0 ⎞
⎜⎜ { ⎟⎟ + ⎜⎜ { ⎟⎟
⎝ 0 otherwise ⎠ ⎝ 0 otherwise ⎠
⎛ 516. − 544. x + 151. x 2 − x ≤ 0 and x − 3 ≤ 0 ⎞
2
+ ⎜{ ⎟⎟
⎜
⎝ 0 otherwise ⎠
47
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
> plot(pspline(x),x=xn[0]..xn[n],color=black);
NOTA: MAPLE-7 dispone del comando spline() que permite calcular funciones
spline. Te dejamos como ejercicio propuesto consultar el uso de este comando.
> Fin;
Fin
48
Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López
Práctica 8: Interpolación de Lagrange (III) ETSI Minas de la Univ. Politécnica de Madrid
Toma como puntos de soporte para verificar el programa MAPLE que realices:
s0 = 0, s1 = π/2 , s2 = π
> restart;
>
>
>
>
>
> fin;
49