Prog Matricial Jacobi para Resolver Ecuaciones Lineales

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Programaci

on: forma matricial


del m
etodo de Jacobi
para resolver sistemas de ecuaciones lineales
Objetivos. Programar una funcion que resuelva sistemas de ecuaciones lineales con el
metodo iterativo de Jacobi en la forma matricial.
Requisitos. Operaciones con vectores (operaciones lineales y el producto punto), matrices triangulares, solucion de sistemas con matrices triangulares, ciclo while, la idea del
metodo de Jacobi.
1. Multiplicaci
on y divisi
on de vectores componente a componente. Dados dos
vectores a, b Rn , denotemos por a b al vector de longitud n cuya j-esima componente
es
(a b)j = aj bj .
Si ademas bj 6= 0 para cada j {1, . . . , n}, entonces denotemos por a b al vector de
longitud n cuya j-esima componente es
(a b)j =

aj
.
bj

En el lenguaje de MATLAB (y en GNU Octave, Scilab, FreeMat) la multiplicacion y


division por componentes se denotan por .* y ./:
a
b
a
a

= [6; -5; 1]
= [-2; 2; 3]
.* b
./ b

2. Multiplicaci
on de una matriz diagonal por un vector. Se d = [dj ]nj=1 un vector.
Se denota por diag(d) la matriz diagonal con entradas diagonales d1 , . . . , dn . Por ejemplo,
si n = 3, entonces

d1 0 0
diag(d) = 0 d2 0 .
0 0 d3
Notamos que

d1 0 0
v1
d1 v 1
diag(d)v = 0 d2 0 v2 = d2 v2 = d v.
0 0 d3
v3
d3 v 3
En general, si d, v Rn , entonces
diag(d)v = d v.
Programacion: metodo de Jacobi en forma matricial, pagina 1 de 4

3. Multiplicaci
on de una matriz por un vector, prueba num
erica.
d = [5; -1; 2; 3]
v = [-3; 2; 3; 5]
diag(d)
diag(d) * v
d .* v
4. Soluci
on de sistemas de ecuaciones lineales con matrices diagonales. Si d, b
Rn y dj 6= 0 para cada j {1, . . . , n}, entonces el sistema de ecuaciones lineales
diag(d)x = b
tiene una u
nica solucion la cual se puede calcular como
x = b d.
Prueba numerica:
d = [-2; 3; 2];
b = [5; -1; 0];
x = b ./ d;
norm(diag(d) * x - b)
5. Sacar el vector de las entradas diagonales de una matriz. Dada una matriz A,
denotemos por d al vector de sus entradas diagonales y consideremos la matriz diagonal
D con entradas diagonales A1,1 , . . . , An,n :

n
d = Aj,j j=1 ,
D = diag(d).
Por ejemplo, para

A1,1
A = A2,1
A3,1

n = 3,

A1,2 A1,3
A2,2 A2,3 ,
A3,2 A3,3

A1,1
d = A2,2 ,
A3,3

A1,1 0
0
D = 0 A2,2 0 .
0
0 A3,3

En el lenguaje de MATLAB el vector d se puede obtener con el comando diag:


A = rand(3)
d = diag(A)
D = diag(d)

Programacion: metodo de Jacobi en forma matricial, pagina 2 de 4

Idea del m
etodo de Jacobi en forma matricial
6. Sea A Mn (R) tal que Aj,j 6= 0 para cada j {1, . . . , n}. Denotemos por d al vector
de las entradas diagonales de A y por D a la matriz diagonal generada por el vector d:

n
d = Aj,j j=1 ,
D = diag(d).
Entonces el sistema de ecuaciones lineales Ax = b se puede escribir en las siguientes formas
equivalentes:

Ax = b
b Ax = 0
Dx = Dx + (b Ax)
x = x + D1 (b Ax)
x = x + (b Ax) d.

Empezando con alg


un vector x(0) , construimos una sucesion de vectores (x(s) )
s=0 mediante
la formula recursiva
x(s+1) = x(s) + (b Ax(s) ) d.
(1)
7. Residuo y su modificaci
on. Es comodo guardar el residuo b Ax en una variable
r. Notamos que si el vector x se modifica mediante la formula
x(s+1) = x(s) + p(s) ,
entonces el vector residuo correspondiente se cambia de la siguiente manera:

r(s+1) = b Ax(s+1) = b A x(s) + p(s) = r(s) Ap(s) .
En el algoritmo podemos usar los siguientes comandos:
p
q
x
r

=
=
=
=

r
A
x
r

./ d;
* p;
+ p;
- q;

8. Condici
on de terminaci
on. El ciclo while debe terminarse cuando el n
umero s de
las iteraciones realizadas es mayor o igual al n
umero maximo de iteraciones permitidas
smax o cuando la norma del residuo es menor que la tolerancia dada. En otras palabras,
la condicion de terminacion es
(s smax )

(krk < tol).

Escriba la condicion de continuacion.

Programacion: metodo de Jacobi en forma matricial, pagina 3 de 4

9. Esquema del algoritmo.


function [x, s] = JacobiSolveMatrixForm(A, b, tol, smax),
d = ???;
n = length(b); x = zeros(n, 1); r = b;
s = ???;
while (s ??? smax) && (norm(r) ??? tol),
p = ???;
q = ???;
x = ???;
r = ???;
s = s + 1;
end
end
10. Prueba con matrices peque
nas. Para garantizar la convergencia hacemos la matriz
estrictamente diagonal dominante. En vez de generar una matriz aleatoria puede construir
el ejemplo a mano.
function smallTestJacobiSolve(),
n = 4;
A = 2 * rand(n) - ones(n) + n * eye(n);
b = 2 * rand(n, 1) - ones(n, 1);
[x, s] = JacobiSolveMatrixForm(A, b, 1.0E-5, 100);
display(s); display(norm(A * x - b));
end
11. Pruebas con matrices grandes. Elegir n de tal manera que el tiempo de ejecucion
sea de 1 a 100 segundos, medir el tiempo de ejecucion con el comando cputime.
function largeTestJacobiSolve(),
...
end

Programacion: metodo de Jacobi en forma matricial, pagina 4 de 4

También podría gustarte