Pn(x) = f(x0) + f'(x0)(x - x0) +(1/2!) f''(x0)(x - x0)2 + ... + (1/n!) f(n)(x0)(x - x0)n |
con un error conocido (resto Rn) igual a:
f(x) - Pn(x) = Rn(x) = (1/(n+1)!) f(n+1)(ξ)(x - x0)n+1 |
f(xk) = Pn(xk) para todo k=0,1,2,...,n |
Pn(x) = f(x0)Ln,0(x) + f(x1)Ln,1(x) + ... + f(xn)Ln,n(x) |
(x-x0)(x-x1)....(x-xk-1)(x-xk+1)....(x-xn)
Ln,k(x) = -------------------------------------------
(xk-x0)(xk-x1)..(xk-xk-1)(xk-xk+1)..(xk-xn)
|
El error dado por éste método de interpolación es:
f(x) - Pn(x) = Rn(x) = (1/(n+1)!) f(n+1)(ξ)(x - x0)(x - x1) ... (x - xn) |
(x-xi)Pjkl - (x-xl)Pijk
P(x) = Pijkl(x) = ---------------------------
(xl-xk)
|
(r-x1)P2 - (r-x2)P1
P12(r) = -----------------------------
( x2 - x1 )
|
| en el caso de r=1.5 : |
(1.5 - 1.0)0.6200860 - (1.5 - 1.3)0.7651977
P12(1.5) = ---------------------------------------------- = 0.5233449
( 1.3 - 1.0 )
|
| o |
(1.5 - 1.3)0.4554022 - (1.5 - 1.6)0.6200860
P23(1.5) = ---------------------------------------------- = 0.5102968
( 1.6 - 1.3 )
|
| y en orden mas elevado: |
(1.5 - 1.0)0.5102968 - (1.5 - 1.6)0.5233449
P123(1.5) = ---------------------------------------------- = 0.5124715
( 1.6 - 1.0 )
|
Escribiendo los polinomios Pijkl en una matriz A
| x1 | A11 | ||||
| x2 | A21 | A22 | |||
| x3 | A31 | A32 | A33 | ||
| x4 | A41 | A42 | A43 | A44 | |
| x5 | A51 | A52 | A53 | A54 | A55 |
Interpolación de la función f(x) dada en n puntos x1, x2, ... ,xn INPUT: xi en el array X(i) y f(xi) en la matriz A(i,1)
|
| x1 | P1 | ||||
| x2 | P2 | P12 | |||
| x3 | P3 | P23 | P123 | ||
| x4 | P4 | P34 | P234 | P1234 | |
| x5 | P5 | P45 | P345 | P2345 | P12345 |
(x-xj-1)Ai,j-1 - (x-xi)Aj-1,j-1
Ai,j = ------------------------------------
xi - xj-1
|
Pn = f[x0] + Sumk=1n f[x0,x1,...,xk](x-x0)...(x-xk-1) |
f[xi] = f(xi)
( f[xi+1] - f[xi] )
f[xi,xi+1] = --------------------------
( xi+1 - xi )
( f[xi+1,xi+2, ... ,xi+k] - f[xi,xi+1, ... ,xi+k-1] )
f[xi,xi+1, ... ,xi+k-1,xi+k] = -----------------------------------------------------
( xi+k - xi )
|
| 0.7651977 | ||||
| -0.4837057 | ||||
| 0.6200860 | -0.1087339 | |||
| -0.5489460 | 6.5878395E-02 | |||
| 0.4554022 | -4.9443333E-02 | 1.8251029E-03 | ||
| -0.5786120 | 6.8068519E-02 | |||
| 0.2818186 | 1.1818333E-02 | |||
| -0.5715210 | ||||
| 0.1103623 |
siendo el polinomio:
P4(x) = 0.7651977 - 0.4837057(x-1.0) - 0.1087339(x-1.0)(x-1.3) +
0.0658784(x-1.0)(x-1.3)(x-1.6) + 0.0018251(x-1.0)(x-1.3)(x-1.6)(x-1.9)
|
H2n+1(x) = Sumj=0n f(xj)Hn,j(x) + Sumj=0n f'(xj)HHn,j(x) donde Hn,j(x) = [1 - 2(x-xj)L'n,j(xj)]L2n,j(x) y HHn,j(x) = (x-xj)L2n,j(x) y los Ln,j son los polinomios de Lagrange. |
Si bien la descripción anterior es completa, el hecho de
tener que evaluar los polinomios de Lagrange y sus derivadas,
lo hace un poco tedioso.
Una forma simple de encontrar los coeficientes es utilizando
diferencias finitas, pero definiendo nuevos puntos zi
en la forma:
z1 = z2 = x1 z3 = z4 = x2 y en general: z2i = z2i-1 = xi |
f[z2i,z2i-1]=f'(xi) |
(a) S es un polinomio cúbico, que en cada subintervalo [xj,xj+1] se denomina Sj
(b) S(xj) = f(xj) (para todo j)
(c) Sj+1(xj+1) = Sj(xj+1)
(d) S'j+1(xj+1) = S'j(xj+1)
(e) S''j+1(xj+1) = S''j(xj+1)
(f) S''(x0) = S''(xn) = 0 ("free boundary")
o
S'(x0) = f'(x0) y S'(xn) = f'(xn) ("Clamped boundary")
|
Sj(x) = aj + bj(x - xj) + cj(x - xj)2 + dj(x - xj)3 |
Sj(xj) = fj(xj) = aj |
aj+1 = Sj+1(xj+1) = Sj(xj+1) = aj + bj(x - xj+1) + cj(x - xj+1)2 + dj(x - xj+1)3 que para simplificar, haciendo hj = (xj+1 - xj) es: aj+1 = aj + bjhj + cjhj2 + djhj3 |
S'j(x) = bj + 2cj(x - xj) + 3dj(x - xj)2 |
bj+1(x) = bj + 2cjhj + 3djhj2 |
cj+1(x) = cj + 3djhj |
hj-1cj-1 + 2(hj-1 + hj)cj + hjcj+1 =
= 3(aj+1 - aj)/hj - 3(aj - aj-1)/hj-1
|
Debido a que las derivadas no son contínuas en algunos puntos, se interpolan 3 funciones diferentes, cuyos valores estan dados en curva1.dat, curva2.dat y curva3.dat.
Darío Mitnik