MÉTODO DE DIFERENCIAS FINITAS Mediante el método de diferencias finitas, haremos frente a algunos problemas que presentaba la interpolación de Lagrange. A continuación realizaremos una mención sobre ellos: La cantidad de cálculos necesarios eran elevados No se podían utilizar partes de la aplicación previa. No se podían utilizar los resultados de cálculos anteriores. A continuación nos centraremos en explicar en que se basa el método de diferencias finitas: En este método consideraremos que los puntos están equidistanciados en el eje X, es decir , la diferencia entre dos puntos consecutivos en el eje X es constante. El intervalo entre dos puntos consecutivos lo denominaremos h. Definiremos (n+1) puntos a intervalos h, por los que tiene que pasar el polinomio de interpolación con lo cual: Xi=Xo+ih ! Xi−X(i−1) Siendo i=0,1,2,3...n con yi=fi=f(xi) Las igualdades citadas nos pueden conducir a una expresión para la interpolación polinomial en términos de diferencias hacia delante. La diferencia lo denominaremos como la resta del punto y con respecto al valor anterior del mismo. Esta afirmación lo podemos escribir mediante la siguiente expresión: Yi+1−Yi. La primera diferencia lo denominaremos yi. Las diferencias consecutivas los podemos representar mediante la siguiente expresión: m m−1 yi=( yi). De esta manera podemos realizar una tabla con las diferencias sucesivas: Ahora definiremos el parametro s que será utilizado a continuación: s: Es una coordenada local que toma el valor entero i cuando x toma el valor xi. A continuación realizaremos una pequeña modificación igualando x a la siguiente expresión: X=X0+sh 1 El polinomio que pasa por n+1 puntos lo podemos definir mediante la expresión que viene a continuación, el cual será la base de este método: Pn(s)= y0 A continuación definiremos varios casos de coeficientes binomiales que son realmente importantes conocer: =1 =s = Generalizando: Si el objetivo que perseguimos es dejar la solución en función de X, sería suficiente recordar que X=X0+sh A continuación introduciremos el programa que nos calcule los resultados utilizando el método de las diferencias finitas PROGRAMA program d_finita; const limite=5; type matriz=array [1..limite,1..limite] of real; lista=array [1..limite] of real; 2 var x:lista; y:matriz; i,j:integer; procedure introducir_datos (var x:lista;var y:matriz); var i,j:integer; begin for i:=1 to limite do begin writeln ('Introduce datos de la x',i,':'); readln (x[i]); end; for i:=1 to limite do for j:=1 to limite do y[i,j]:=0; for i:=1 to limite do begin writeln ('Introduce el valor de y[1,',i,']:'); readln (y[1,i]); end; end; procedure calculo (var y:matriz); var i,j:integer; cont:integer; 3 begin cont:=1; while (cont<limite) do begin for j:=2 to (limite+1−cont) do y[cont+1,j−1]:=(y[cont,j])−(y[cont,j−1]); cont:=cont+1; end; end; function factorial (num:integer):integer; var result,i:integer; begin result:=1; for i:=num downto 2 do result:=result*i; factorial:=result; end; procedure calculo_polinomio (x:lista;y:matriz); var h,valor,s,p,p1,p2,p3,p4,p5:real; begin writeln ('Introduce el valor de la x para el calculo:'); readln (valor); h:=x[2]−x[1]; s:=(valor−x[1])/h; 4 p1:=y[1,1]; p2:=y[2,1]*s; p3:=(y[3,1]*s*(s−1))/factorial(2); p4:=(y[4,1]*s*(s−1)*(s−2))/factorial(3); p5:=(y[5,1]*s*(s−1)*(s−2)*(s−3))/factorial(4); p:=p1+p2+p3+p4+p5; writeln ('El polinomio de orden ',limite,' es: ',p); end; begin introducir_datos (x,y); calculo (y); calculo_polinomio (x,y); end. Introduciremos varios ejemplos para ver los resultados que obtenemos y comprobar el buen funcionamiento del programa. Datos: 1 0 0 0.2 0.19867 0.4 0.38942 0.6 0.56464 0.8 0.71736 1 0.84147 1.2 0.93204 X=0.67 El resultado obtenido aplicando el programa de diferencias finitas ha sido: 0.62098890537 Datos: 2 0.0 −2.5 0.1 −1.987013 0.2 −1.575758 0.3 −1.240803 0.4 −0.964286 X=0.12 El resultado obtenido aplicando el programa de diferencias finitas ha sido: −1.8975462720 5