INGENIERIA INFORMATICA 6505 - Laboratorio de Métodos

Anuncio
INGENIERIA INFORMATICA
6505 - Laboratorio de Métodos Numéricos
Apellidos: ___________________________
Septiembre 1999
Nombre: _____________________
Grupo: ______________________
1. (3 puntos) El método de Halley para la resolución de la ecuación f ( x)  0 hace uso de la siguiente
fórmula de iteración:
f ( x n ) f ( x n )

 f ( x n )2  f ( x n ) f ( x n )
2
En donde f ( x n ) , f ( x n ) y f ( x n ) representan respectivamente el valor de la función, de la derivada
x n 1  x n 
primera y de la derivada segunda en el punto x n . Escriba un programa (preferentemente en Pascal)
para encontrar el único cero real del polinomio:
f ( x)  x 3  2 x  5
mediante el método de Halley. El programa deberá:

Pedir una estimación inicial del valor de la raíz de la función ( x0 ), el número máximo de
iteraciones (M) y los criterios de convergencia.

Indicar si el método ha convergido o no y escribir la solución encontrada, el número de
iteraciones que se han realizado y la convergencia alcanzada.

Utilizar el algoritmo de Horner para evaluar f ( x n ) , f ( x n ) y f ( x n ) .
PROGRAM halley(INPUT, OUTPUT);
TYPE
Coef = ARRAY [0..10] OF double;
(* Lectura de los datos del polinomio *)
PROCEDURE lee_coef(VAR n : integer;
VAR a : coef);
VAR
i : integer;
BEGIN
WRITELN;
WRITE('Grado del polinomio: ');
READLN(n);
FOR i:=n DOWNTO 0 DO
BEGIN
WRITE('Coeficiente a[',i:2,'] = ');
READLN(a[i])
END
END; { lee_coef }
(*************************************
*
PROGRAMA PRINCIPAL *
************************************)
VAR
grado,i
: integer;
M,iter
: integer;
a
: coef;
x0,x1
: double;
d,fm,conv,ft
: double;
f,df,d2f
: double;
BEGIN
WRITELN;
WRITELN('*** Iteracion de Halley ***');
WRITELN;
(* Polinomio *)
WRITELN('Datos del polinomio:');
lee_coef(grado,a);
WRITE('Aproximacion inicial: ');
READLN(x0);
WRITE('Naximo de iteraciones: ');
READLN(M);
WRITE('Criterio de convergencia: ');
READLN(d);
WRITE('Valor maximo de la funcion: ');
READLN(fm);
(* Inicializamos variables *)
iter := 0;
conv := d + 1.0;
ft := fm + 1.0;
(* Bucle principal de iteracion *)
WHILE (iter < M) AND
((conv > d) OR (ft > fm)) DO
BEGIN
(* Calcula f(x); f'(x) y f''(x) *)
f
:= a[grado];
df := 0;
d2f := 0;
FOR i := grado-1 DOWNTO 0 DO
BEGIN
d2f := x0 * d2f + df;
df := x0 * df + f;
f
:= x0 * f + a[i]
END;
x1 := x0 – f * df /
(df * df - f * d2f / 2);
ft := abs(f);
iter := iter + 1;
conv := abs((x1 - x0)/x1);
x0 := x1;
END;
IF (iter >= M) THEN
WRITELN('*** No Converge ***')
ELSE
WRITELN('*** Converge ***');
WRITELN('x =
',x0);
WRITELN('f(x) = ',f);
WRITELN('Iteraciones = ',iter);
WRITELN('Convergencia = ',conv)
END.
INGENIERIA INFORMATICA
6505 - Laboratorio de Métodos Numéricos
Apellidos: ___________________________
Septiembre 1999
Nombre: _____________________
Grupo: ______________________
2. (2 puntos) Calcule el punto fijo (s) de la siguiente iteración funcional:
xn1  p  xn
(1)
definida en el intervalo 0  x   y en donde p es un número entero positivo.
Nota: El punto fijo s de una iteración funcional x n1  F ( x n ) cumple la propiedad:
F (s)  s
Solución:
De acuerdo con la definición (2), el punto fijo de la iteración funcional (1) debe cumplir la siguiente ecuación:
s ps
s2  p  s ;
;
s2  s  p  0
Resolviendo la ecuación subrayada, tenemos que:
s

1
1 1 4p
2

Sólo el valor positivo de la expresión anterior tiene sentido, por lo que la solución final es:
s

1
1 1 4p
2

(2)
INGENIERIA INFORMATICA
6505 - Laboratorio de Métodos Numéricos
Apellidos: ___________________________
Septiembre 1999
Nombre: _____________________
Grupo: ______________________
3. (3 puntos) Considere el siguiente sistema de ecuaciones lineales:
5x1  x2  x3  7
 x1  3x2

1
x1  x2  6 x3  11
Elabore un programa (preferentemente MatLab) que resuelva el sistema anterior mediante el método
iterativo de Gauss-Seidel. Tenga en cuenta los siguientes puntos:
 Utilice el vector x1  x 2  x3  0 como estimación inicial de la solución.
 El programa deberá solicitar el número máximo de iteraciones (M) y el criterio de
convergencia (Delta).
 Deberá indicar si el método ha convergido o no y escribir el vector solución encontrado, el

número de iteraciones que se han realizado y la convergencia alcanzada.
El método iterativo de Gauss-Seidel obtiene los elementos del vector en la iteración k a partir
de los elementos del vector de la iteración anterior ( k  1) empleando la siguiente fórmula:
i 1
xi( k )  (bi 

n
aij x (jk ) 
j 1
a
( k 1)
) / aii
ij x j
j i 1
en donde n es el tamaño (número de filas o columnas) del sistema de ecuaciones.
Podríamos crear el siguiente procedimiento MatLab:
%*****************************************
%*
*
%* Sistemas de ecuaciones lineales
*
%* Métodos de iterativos.
*
%*
*
%* seidel: Algoritmo de Gauss-Seidel.
*
%*
*
%* [x,delta,m] = seidel(a,b,Delta,M)
*
%*
*
%* Entrada:
*
%* a:
Matriz de coeficientes.
*
%* b:
Matriz columna de términos
*
%*
independientes.
*
%* Delta: Criterio de convergencia.
*
%* M:
Numero maximo de iteraciones. *
%*
*
%* Salida:
*
%* x:
Matriz columna de soluciones. *
%* delta: Convergencia alcanzada.
*
%* m:
Número de iteraciones.
*
%*
*
%*****************************************
function [x,delta,m] = seidel(a,b,Delta,M)
%
% Dimension del sistema deecuaciones.
filas=size(a,1);
% Contruimos la matriz d:
d=zeros(filas,filas);
for i=1:filas;
d(i,i)=1.0/a(i,i);
end
% Escalamos el sistema de ecuaciones
a=d*a;
b=d*b;
% Comenzamos el proceso iterativo
for m=1:M;
% Contador de iteraciones
for i=1:filas;
x(i)=b(i);
for j=1:filas;
if (i ~= j)
x(i)=x(i)-a(i,j)*x(j);
end
end
end
r=x-z;
z=x;
% Calculo de la convergencia
delta = norm(r)/norm(x);
% Si alcanzada la convergencia, salir
if delta <= Delta
break
end
% Inicializamos los vectores columna r y x.
r=zeros(filas,1);
x=zeros(filas,1);
z=zeros(filas,1);
% Escalado del sistema de ecuaciones
y lo utilizaríamos del siguiente modo:
a = [ 5 1 -1; -1 3 0; 1 1 6 ]
b = [ -7; 1; 11 ];
[x,delta,m] = seidel(a,b,1.0e-8,50);
end
INGENIERIA INFORMATICA
6505 - Laboratorio de Métodos Numéricos
Apellidos: ___________________________
Septiembre 1999
Nombre: _____________________
Grupo: ______________________
4. (2 puntos) Dada la siguiente función tabulada en el intervalo [-1,2]:
x
-1.0000
-0.3679
f (x)
-0.7000
-0.4288
0.1000
0.0990
Calcule numéricamente la integral definida
0.6000
0.4186

0.9000
0.4004
1.5000
0.1581
2.0000
0.0366
2
1
f ( x)dx mediante la regla del trapecio.
Nota: La regla del trapecio aproxima el valor de una integral definida

b
f ( x)dx mediante la
a
expresión:
b

f ( x)dx 
a

 f (x)dx   f (x)dx   f (x)dx  
De acuerdo con los datos de la tabla, la integral
ba
 f (a)  f (b)
2
2
1
2
0.7
0.1
0.6
1
1
0.7
0.1
f ( x)dx se puede escribir de la forma:
f ( x)dx 
0.9

0.6
f ( x)dx 
1.5

0.9
f ( x)dx 

2
f ( x)dx
1.5
Aplicamos la regla del trapecio a cada uno de los sumandos de la derecha y sustituyendo valores
obtenemos:
(0.7  1.0)
 0.3679 0.4288  (0.1  0.7)  0.4288 0.0990 
1
2
2
(0.6  0.1)
(0.9  0.6)
0.0990 0.4186 
0.4186 0.4004 
2
2
(1.5  0.9)
0.4004 0.1581  (2.0  1.5) 0.1581 0.0366
2
2
Realizando las operaciones, obtenemos:


2
1
2
f ( x)dx 
f ( x)dx  0.11951 0.13192 0.12940 0.12285 0.16755 0.04868  0.21705
Descargar