tarea

4
Programación y métodos numéricos tarea 6 Kevin Steven Carrillo Reina 25 de octubre de 2015 Índice 1. Problema 2 2. Solución 2 3. Conclusiones 4 1

description

programacion

Transcript of tarea

Page 1: tarea

Programación y métodos numéricos tarea 6

Kevin Steven Carrillo Reina

25 de octubre de 2015

Índice

1. Problema 2

2. Solución 2

3. Conclusiones 4

1

Page 2: tarea

1. Problema

Básicamente el problema consiste en comparar la velocidad de convergencia del método de Jacobi y el método de

Gauss-Siedel y posteriormente, determinar cual es más eficiente.

Téngase en cuenta que trabajamos con un código que considera una tolerancia dada, de modo que es necesario que

los códigos de cada método tenga la misma tolerancia.

2. Solución

En principio se deben realizar los códigos con cada método, considerando un mismo problema y a su vez un mismo

parámetro de tolerancia de aproximación, con el fin de comparar ambos métodos de modo acertado.

Ahora bien, se han realizado dos códigos, los cuales se ven a continuación convenientemente explicados: (el primero

maneja método de Jacobi y el segundo maneja método de Gauss-Siedel).

function y2=mijacobi(N);

tic; (cuenta tiempo desde este momento)

A1=diag(ones(N,1)); A2=diag(ones(N-1,1),-1); A3=diag(ones(N-1,1),1);

A=2*A1-A2-A3; (condiciona la matriz de un modo conveniente)

b=ones(N,1);

M=diag(diag(A)); % M Jacobi

%M=tril(A); % M Gauss-Siedel

Nmax=100000; tolres=0.00001; tolinc=0.00001;

x0=zeros(N,1); (propone número de iteraciones u la tolerancia)

for i=1:Nmax

r=b-A*x0; (a partir de un x0 dado se aplica el método de iteración

delta=M\r; con el fin de determinar x1 donde después actualiza valores

x1=x0+delta; para que el ciclo no sea inútil

if( norm(r)<tolres )

fprintf( ’ok en %d pasos\n’,i); (si la norma de r es menor que la tolerancia dada

y2=i; anteriormente, se rompe el ciclo y se guarda el número

break; de la iteración como imágen de la función

end

x0=x1; se actualiza valor

end

toc; para de contar tiempo durante el proceso

2

Page 3: tarea

tic;

A1=diag(ones(N,1)); A2=diag(ones(N-1,1),-1); A3=diag(ones(N-1,1),1);

A=2*A1-A2-A3;

b=ones(N,1);

%-----------------------

M=tril(A); (triangular inferior)

Nmax=100000;

tolres=0.00001;

x0=zeros(N,1); (vector dado)

for i=1:Nmax

r=b-A*x0;

delta=M\r; (se aplica el método, pero ahora con la matriz triangular inferior)

x1=x0+delta;

if(norm(r)<tolres)

fprintf(’ok con en %d pasos\n’,i);

y1=i; (se guarda el número que arroja la función)

break;

end

(ES BÁSICAMENTE EL MISMO CÓDIGO PERO CON M COMO UNA MATRIZ TRIANGULAR INFERIOR)

x0=x1;

end

x0;

toc;

puesto que la imagen de la función es el número de la iteración que hace que r sea menor que la tolerancia dada,

entonces es posible asociar el tamaño de la matriz a al número de iteración, posteriormente graficarlo y ver cómo varia

el número de iteraciones que son necesarias para matrices cada vez más grandes.

Tal idea se puede representar con el siguiente código (explicado linea a linea):

3

Page 4: tarea

function comparacion(K)

for i=2:K (vamos a considerar que el K dado, representa el orden de la matriz (cuadrada))

y1=gausssiedel(i); (calcula el número de iteraciones)

v11(i)=i; (forma un vector desde 2 hasta k)

v12(i)=y1; (forma un vector desde la primera imágen de la función hasta la k-ésima imágen)

y2=mijacobi(i); (calcula el número de iteraciones)

v22(i)=y2; (forma un vector desde la primera imágen de la función hasta la k-ésima imágen)

end

xlabel("tamano de matriz")

ylabel("numero de iteraciones necesario")

plot(v11,v12,’r’) (grafica las dos gráficas simultaneamente)

hold on

plot(v11,v22,’g’)

VÉASE LA IMÁGEN EN LA ÚLTIMA PÁGINA

3. Conclusiones

la gráfica muestra que el método de Gauss-Siedel es más eficiente que el método de Jacobi, sobre todo cuando

consideramos matrices cuadradas de un orden grande.

4