Informática
Método de diferencias finitas
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
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;
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;
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;
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.2 | 0.4 | 0.6 | 0.8 | 1 | 1.2 | |
0 | 0.19867 | 0.38942 | 0.56464 | 0.71736 | 0.84147 | 0.93204 |
X=0.67
El resultado obtenido aplicando el programa de diferencias finitas ha sido: 0.62098890537
Datos: 2
| 0.0 | 0.1 | 0.2 | 0.3 | 0.4 |
| -2.5 | -1.987013 | -1.575758 | -1.240803 | -0.964286 |
X=0.12
El resultado obtenido aplicando el programa de diferencias finitas ha sido: -1.8975462720
Descargar
Enviado por: | El remitente no desea revelar su nombre |
Idioma: | castellano |
País: | España |