Método de diferencias finitas

Anuncio
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
Descargar