Método de diferencias finitas

Informática. Interpolación de Lagrange. Programa

  • Enviado por: El remitente no desea revelar su nombre
  • Idioma: castellano
  • País: España España
  • 5 páginas
publicidad
publicidad

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:

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

Método de diferencias finitas

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)= Método de diferencias finitas
Método de diferencias finitas
Método de diferencias finitas
y0 Método de diferencias finitas

A continuación definiremos varios casos de coeficientes binomiales que son realmente importantes conocer:

Método de diferencias finitas
=1

Método de diferencias finitas
=s

Método de diferencias finitas
=Método de diferencias finitas

Generalizando:

Método de diferencias finitas

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