Académique Documents
Professionnel Documents
Culture Documents
Algebra Lineal
Una gran cantidad de problemas de fsica, qumica e ingeniera se reducen a resolver
ecuaciones simultneas lineales. Hay tambin aplicaciones donde el conjunto de
ecuaciones es no lineal. Ambos casos se tratan numricamente y tienen repercusiones en
otras areas de matemticas aplicadas como optimizacin y mtodos de solucin numrica
de ecuaciones diferenciales. Dejaremos para la seccin V el tratamiento de problemas no
linales y trataremos en esta el problema lineal.
La forma estndar del problema a resolver es:
a 11 x 1
a 21 x 1
a 12 x 2
a 22 x 2
a 1n x n
a 2n x n
c1
c2
a n1 x 1
a n2 x 2
a nn x n
cn
Estas ecuaciones deben ser linealmente independientes para que haya una solucin.
En forma compacta el problema se escribe
Ax
(1)
donde A
a ij ; x
x1, x2,
, xn y c
c1, c2,
, cn
El apstrofe indica transpuesto conjugado y es el comando usado por
Matlab.
Eliminacin Gaussiana.
El proceso de sumar o restar filas multiplicadas o divididas por escalares tal de
obtener ceros por debajo de la diagonal principal lleva el nombre de eliminacin de
Gauss. Supongamos que la matriz aumentada (ltima columna es el vector c) es:
1
1
2
1
1
1
1 2
3 1 2
1 7
para obtener ceros en la primera columna, procedemos as:
F1
F2
F3
F4
F 1 /a 11
F2 F1
F 3 2F 1
F 4 3F 1
1
0
0
0
1
-2
-1
-2
1 -1 2
-2 2 -2
-3 4 5
-1 2 1
F1
F2/ 2
F3 F2
F 4 2F 2
1
0
0
0
1 1 -1
1 1 -1
0 -2 3
0
1 0
2
1
6
3
1
F1
F2
F3 / 2
F4 F3
1 1 1 -1
0 1 1 -1
3
0 0 1
2
3
0 0 0
2
2
1
-3
6
1
1
0
0
1
1
1
0
-1
-1
3
2
2
1
-3
4
x2 x3 x4
x2 x3 x4
x 3 32 x 4
x4
2
1
3
4
Matrices Elementales
Las operaciones comunes realizadas en las filas de una matriz para transformarla en
una triangular o diagonal son:
a) Intercambio de filas
b) Multiplicacin de una fila por un escalar
c) Sustitucin de una fila por la suma de esta con alguna otra fila
Estas operaciones se pueden realizar multiplicando por la izquierda la matriz en
cuestin por ciertas matrices elementales que realizan en la matrizoriginal el cambio
deseado.
Algunos ejemplos:
1 0 0
b 11 b 12 b 13
b 11
b 12
b 13
0 m 0
b 21 b 22 b 23
mb 21 mb 22 mb 23
0 0 1
b 31 b 32 b 33
b 31
b 32
mF 2
b 33
b 11 b 12 b 13
b 11
m 1 0
b 21 b 22 b 23
mb 11
0 0 1
b 31 b 32 b 33
b 31
mF 1
b 12
b 21 mb 12
b 13
b 22 mb 13
b 32
b 23
b 33
F2
1 0 0
b 11 b 12 b 13
b 11 b 12 b 13
0 0 1
b 21 b 22 b 23
b 31 b 32 b 33
0 1 0
b 31 b 32 b 33
b 21 b 22 b 23
P 23 B
permutacin de filas.
Resumiendo, podemos decir que las operaciones elementales con renglones son:
a) Multiplicar el renglon i por un nmero c diferente de cero.
b) Sumar un mltiplo del rengln i al rengln j.
c) Permutar (intercambiar) los renglones i y j.
Ri
Rj
Ri
cR i
R j cR i
Rj
Hemos hablado de pivoteo parcial y hemos trabajado con las filas de la matriz.
Cuando las matrices elementales se multiplican por la derecha, las operaciones
elementales se realizan con las columnas.
Es interesante recordar adems que, cualquier matriz elemental se puede generar a
partir de la matriz Identidad I n y una sola operacin elemental. Adems los inversos de
las matrices elementales resultan ser muy similares en forma a la matriz elemental.
Si el conjunto de matrices elementales que transforman una matriz A en la matriz
Identidad las denominamos
E
EmEm 1. . . . . . . . . . . E1
E A|b
entonces EA
y Eb
I|x
adems
det EA
det I
det E . det A
1
det E
det A
Ejercicio:
Determinar los valores del determinante de las distintas matrices elementales:
permutadora, multiplicadora por factor m, y matriz elemental deltipo de sustitucin.
Inverso de una matriz
Imaginemos que formamos una matriz aumentada formada por la matriz original y la
matriz Identidad.
a 11 a 12 a 13 a 14
a 21 a 22 a 23 a 24
a 31 a 32 a 33 a 34
a 41 a 42 a 43 a 44
1 0 0 0
|
0 1 0 0
(2)
0 0 1 0
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
b 11 b 12 b 13 b 14
|
b 21 b 22 b 23 b 24
(3)
b 31 b 32 b 33 b 34
b 41 b 42 b 43 b 44
o sea hemos realizado ciertas operaciones que han generado la matriz identidad al
lado izquierdo y al mismo tiempo la matriz del lado derecho queoriginalmente era la
matriz Identidad, se ha transformado en una nueva matriz b ij . Esta matriz (del lado
derecho) es la matriz inversa de a ij , como se constata a continuacin
a ij 1 , multiplicando ec. (2) por b ij , obtenemos ec. (3)
Si b ij
b ij . a ij |I
I|b ij
(4)
a 11 a 12 a 13 a 14
b 11
a 21 a 22 a 23 a 24
b 21
a 31 a 32 a 33 a 34
b 31
a 41 a 42 a 43 a 44
b 41
(5a)
(5b)...(5c)
a 11 a 12 a 13 a 14
b 14
a 21 a 22 a 23 a 24
b 24
a 31 a 32 a 33 a 34
b 34
a 41 a 42 a 43 a 44
b 44
(5d)
a ij b ij
(6)
Descomposicin LU
Se conoce por este nombre (del ingls L lower (inferior) U upper (superior)) al
proceso por el cual transformamos la matriz original en el producto de una matriz
triangular inferior por una triangular superior. Existen varios algoritmos que no son sino
ligeras variantes del esquema general. Estudiaremos a continuacin los tres ms
populares. Mtodo de Crout, mtodo de Doolitle y el mtodo de Cholesky que se aplica a
matrices simtricas.
Matrices triangulares con ceros por arriba (o por abajo) de la diagonal principal
juegan un rol importante en algebra lineal, ya que aparecen con frecuencia y adems
como ya hemos visto, simplifican enormemente el proceso de solucin de sistemas
simultneos de ecuaciones.
Consideremos el siguiente problema:
Ax
LTx
(7)
Lc
Tx
(8a)
(8b)
a 11 a 12 a 13
b1
L 11 0
1 T 12 T 13
c1
a 21 a 22 a 23 | b 2
L 21 L 22 0
0 1
T 23 | c 2
a 31 a 32 a 33
L 31 L 32 L 33
0 0
b3
(9)
c3
T 13
c1
a 11
L 21
a 21
L 31
a 31
T 12
a 12 /L 11
L 22
a 22
L 21 T 12
L 32
a 32
L 31 T 12
a 13 /L 11
T 23
L 33
L 11
a 23
(10)
L 21 T 13 /L 22
a 33
L 31 T 13
L 32 T 23
b 1 /L 11
c2
b2
L 21 c 1 /L 22
c3
b3
L 31 c 1
L 32 c 2 /L 33
x3
c3
(11)
x2
c2x
x3
c1
T 23 x 3
T 13 x 3
T 12 x 2
Para el caso general de una matriz n x n, las matrices L, T, c estan dadas por
j 1
L ij
a ij
L ik T kj , i
j, j
2, 3. . . . . . . . , n
k 1
i 1
T ij
1 a
L ii ij
L ik T kj , i
j, j
2, 3, . . . . . , n
k 1
i 1
1 b
L ii i
ci
L ik c k , i
T ij
a ij /a 11 ,
a i1, j
L ij
c1
adems:
xn
2, 3, . . . . . . , n
k 1
b 1 /L 11
cn;
xj
cj
T jr x r ,
1, n
2, . . . . . , 1
(12)
r j 1
a 11 a 12 a 13
T 11 T 12 T 13
a 21 a 22 a 23 | b 2
L 21 1
T 22 T 23 | c 2
a 31 a 32 a 33
L 31 L 32 1
b1
b3
T 33
c1
(13)
c3
Pb
Pb
La funcin lu se invoca as
[l,u,p] lu(A)
como
LU
P 1 LU
LU
UT
esto indica
AT
UTLT
LT
a 11 a 12 a 13
u 11 0
b1
u 11 u 12 u 13
c1
a 21 a 22 a 23 | b 2
u 12 u 22 0
u 22 u 23 | c 2
a 31 a 32 a 33
u 13 u 23 u 33
b3
u 33
(14)
c3
Ec. (14) es equivalente a la ec. (9), y seguimos igual procedimiento para eterminar
los elementos u ij . Igualando trminos correspondientes, obtenemos
u 11
a 11 ;
u 22
u 212 ;
a 22
c1
u 12
a 12 /u 11 ;
u 23
a 23
u 12 u 13 /u 22 ;
c2
(15)
u 13
a 13 /u 11
u 33
b 1 /u 11
b2
a 33
u 213
c3
b3
c 1 u 12 /u 22
u 223
c 1 u 13
c 2 u 23 /u 33
(15)
u 11 u 12 u 13
x1
c1
u 22 u 23
x2
c2
x3
c3
u 33
(16)
a 11 ,
a 1j /u 11 ,
a ii
c 1 b 1 /u 11
i 2, 3, . . . . . . . , n
i 1 2
u , i 2, 3, . . . . . , n
k 1 ki
u ij
ci
xn
xi
u ij
i 1
a ij
u u /u ii , j
k 1 ki kj
i 1
bi
u c /u ii ,
i
k 1 ki k
c n /u nn
n
ci
u x /u ii , i
k i 1 ik k
0 para i j
2, 3, . . . . , n
2, 3, . . . . , n
n
(17)
1, . . . . . , 1
x Ax
x1, x2, . . . . . . . , xn
a 11 a 12
a 1n
x1
a 21 a 22
a 2n
x2
a n1 a n2
a nn
a nn
1
0
2
x1, x2, x3
0
2x 21
(18)
0
2
x Ax
2
2x 22
2x 1 x 2
x1
x1, x2, x3
x2
x3
2x 2 x 3
2x 1
x2
x1
2x 2
x2
2x 3
x3
2x 23
arreglando trminos
x 21 x 21 2x 1 x 2 x 22
x 22 2x 2 x 3 x 23
x 21 x 1 x 2 2 x 2 x 3 2 x 23 0
a no ser que x 1 , x 2 , x 3 0
x Ax
x 23
n |a ii |
10
Una regla que reemplaza a estos cuatro criterios es: Una matriz A es positiva definida
si y solo si sus primeras submatrices principales tienen determinante positivo. Empleando
la misma matriz del ejemplo anterior tenemos
det A 1
det 2
det A 2
det
2
1
2
det A 3
det
2
1
24
d1 t1
x1
b1
l1
d2 t2
x2
b2
l2
d3 t3
x3
b3
l3
x4
b4
d4
(19)
Tri x
L Ux
(19b)
11
Tri|b
L U|B
(19c)
(19d)
Esta ltima ecuacin muestra que solo necesitamos resolver una sola ecuacin para
determinar x por sustitucin regresiva. Pero para eso debemos determinar en forma
analtica las matrices L, U y el vector B.
Empezamos con las matrices aumentadas del problema (ec. 19c):
d1 t1
l1
d2 t2
l2
d3 t3
l3
d4
b1
D1 0
1 T1 0
b2
L2 D2 0
0 1
T2 0
b3
L3 D3 0
0 0
T3
b4
0 0
L4 D4
B1
|
B2
(20)
B3
B4
d1,
l2,
T1
D2
L3
t 1 /D 1 ,
T2
d2 T1L2, D3
l3,
L4
t 2 /D 2 ,
d3 L3T2,
l4,
T3
D4
t 3 /D 3 ,
d4 T3L4,
(21)
B1
B4
b 1 /D 1 , B 2
b2
b 4 B 3 L 4 /D 4
B 1 L 2 /D 2 , B 3
b3
B 2 L 3 /D 3 ,
(22)
El orden en el que calculan estos trminos no es arbitrario. Notar que a la derecha del
signo se deben tener los valores de los elementos ya calculados.
Finalmente, aplicamos sustitucin regresiva a
1 T1 0
x1
B1
0 1
T2 0
x2
B2
0 0
T3
x3
B3
0 0
x4
B4
12
y obtenemos
xn
xi
Bi
Tixi 1,
Bn
1, n
2, . . . . . . . . . . , 1
(23)
a 11 a 12 a 13
x1
b1
a 21 a 22 a 23
x2
b2
a 31 a 32 a 33
x3
b3
(24)
x1
a 12
a 11
x2
a 21
a 22
a 31
a 33
x3
a 13
a 11
a 23
a 22
a 32
a 33
x1
b1
a 11
x2
b2
a 22
x3
b3
a 33
(25)
Bx
(26)
13
Observando ec. (26) vemos que tenemos el vector x (incgnita) a ambos lados de la
ecuacin. El proceso llamado iteracin sucesiva, consiste en estimar un valor del vector x
a la derecha de la ecuacin y calcular ec.(26) para obtener un estimado ms exacto. Este
resultado se puede usar nuevamente a la derecha de la ecuacin para obtener un resultado
mejorado, y as sucesivamente.
Si usamos k 1, 2, 3,....como el ndice de iteracin, la ec.(26) se escribe ms
claramente as
k 1
Bx
c, k
0, 1, 2, . . . . . . .
x
(27)
x 10 , x 20 , . . . . . . x n0
es el
vector inicial
El proceso se detiene cuando el error entre dos iteraciones sucesivas es menor que un
cierto valor prefijado. Por ejemplo 10 4 , 10 6 .
La ec. (27) recibe el nombre de iteracin de Jacobi o mtodo de desplazamientos
simultneos. Los nuevos valores se reemplazan todos (simultneamente) al lado derecho
de la ecuacin en la iteracin siguiente.
En forma explcita, la ec. (27) es
x ki
1
a ii
a ij x kj , 1
bi
(28)
j 1
j i
k 1
x k1
1
a 11
b1
a 12 x k2
x k2
1
a 22
b2
a 21 x k1
x k3 1
1
a 33
b3
a 31 x k1 1
a 13 x k3
1
a 23 x k3
(29)
a 32 x k2 1
14
i 1
x ki 1
1
a ii
a ij x kj 1
bi
a ij x kj , para 1
j 1
(30)
j i 1
i 1
x ki
1
a ii
l ij x kj
bi
u ij x kj , para 1
j 1
(31)
j i 1
a 12
a 21
...
...
...
0
a n1
a n,n
a 1n
a 11
...
a 22
...
a n,n
an
1,n
0
0
o sea
A
Dx
Rx
b
b
despejando x
x
D 1 Rx
D 1b
Bx
(A)
15
D 1R
D 1b
z
La iteracin de Jacobi queda definida asi:
xi
Bx i
i 1,2,3.....
(B)
Reemplazando
xi
ei
xi
valor exacto
Bx
Be i
error
Be i
usando (A)
xi
lo que nos dice que la parte exacta no se altera en cada iteracin, y que el error en
cada iteracin es
ei
Be i
(C)
Ejercicio:
Escriba un programa implementando esta iteracin. Use (A) y (B)
Convergencia
Los mtodos de Jacobi y Gauss-Seidel convergen si
|a ii |
|a ij |; 1
|a ij |; 1
(32)
j 1
j i
n
|a ii |
i 1
j i
16
En cada iteracin obtenemos un nuevo valor del vector x que se relaciona con su
valor previo, de acuerdo a
k 1
(33)
k 1
wr
(34)
x ki 1
x ki
a ij x kj
w bi
(35)
j 1
i 1
x ki
x ki
l ij x kj
w bi
x ki
u ij x kj
j 1
(36)
j i 1
0, entonces claramente D 0
AD 0
17
Dk
Dk 1Fk
AD k
(k 1, 2, 3,.......)
El error correspondiente es
Fk
AD 1
F0 I
A D0
D0F0
F0
AD 0 I
F 20
F0
F 20
en forma similar
F2
F 21
F 40
y en general
Fk
F 20
18
q
n
19
clear
a rand(20,20)
% matriz de nmeros aleatorios
[b, iter] pan_reif(a)
% iter es el nmero de iteraciones, b el inverso
% de a
% Se puede constatar la exactitud de b
% calculando:b*a
% debe resultar la matriz identidad
Nmero de Operaciones
n 1 n 1 n! n
1
n 3 3n 2 n
3
1
n 3 3n 2 n
3
1
4n 3 9n 2 7n
6
2. 3 n 3 3n 2 n
No Aplicable
(37a)
|x i |
1
i 1
x 2i
(37b)
i 1
La norma l es
max|x i | 1
i n
(37c)
n x
(38)
20
Una norma matricial . es una funcin de valor real definida sobre el conjunto de
todas las matrices n x n y que satisface para todas las matrices A y B y todos los nmeros
reales lo siguiente:
i)
A
0.
ii) A
0, si y slo si A es [0].
iii)
A
| | A .
iv) A B
A
B .
v) AB
A B
Si . es una norma vectorial en R n , entonces
max Ax
x
(39)
max
(40)
|a ij |
i 1
1 j n
o sea
A
max
col 1 A
1,
col 2 A
1, . . . . . . . . ,
col n A
max Ax
max
(41)
|a ij |
j 1
1 i n
o sea
A
max
fila 1 A
1,
fila 2 A
max Ax
x
1, . . . . . . . . . ,
AA
fila n A
1/2
(42)
que equivale a
A
donde
es un valor caracterstico de
21
M.
Una norma muy usada es la norma de Frobenius (que no es una norma natural) y se
define asi:
n
1/2
|a ij |
(43)
i 1 j 1
n2 A
(44)
Cond A
(45)
Cond A
(46)
Ax
similarmente
b
A
b o sea A x
b
b y
x
1
de aqu obtenemos
22
x
x
b
b
O sea, las variaciones relativas de la norma del vector solucin, son menores que el
nmero de condicion multiplicado por las variaciones relativas de la norma del vector
independiente.
Cuando A tiene un error A pero b es exacta, siguiendo un procedimiento similar
obtenemos
x
x
A
A
1
2
AA
, donde A
n
cxi
i 1 i
es
1, 2, . . . . , n un
1, 2, . . . . . , n puede
por lo tanto
Ax
x
2
2
2
Ax, Ax
x, x
x A Ax
xx
23
cix
i
i
i
cx
i i
si x x n , tendramos c 1
trmino sera n . Por lo tanto
cx
i i
c2 . . . . . . . . . cn
i |c i |
0 y cn
|c j | 2
Ax
x
2
2
icix
2
2
AA
(47)
max
Corolario: Si A
A
2
2
A2
AA
(48)
x, vemos que
1
2
1
2
y finalmente
Cond A
max
1
2
(49)
min
siendo solucin de A Ax
x
En una matriz mal condicionada, tanto su inverso como su determinante resultan
inexactos.
Algunos sntomas que indican esta condicin son:
i) det A det A 1
1
ii) A 1 1 A
iii) AA 1 I
iv) A 1 A 1 1 I en grado mayor que en iii)
Una matriz que muestra en forma clara su mal condicionamiento, es la matriz de Hilbert, definida asi:
24
a ij
1
j 1
Programas
Los siguientes programas muestran las implementaciones usando el lenguaje
Matlab:
* Simple_Gauss.m
* Parpiv_Gauss.m
* Gauss_Jordan.m
* My_Crout.m
* My_Chol.m
* My_tridiag1.m
* Jacobi.m
* Gauss_Seidel.m
* pan_reif.m
Estos programas estn disponibles para su uso y estudio. Se recomienda estudiarlos y tomar nota de las distintas tcnicas de programacin en lo que se
refiere a lazos, control de error, comandos de Matlab para desplegar resultados con formato, etc.
Referencias
1. Anlisis Numrico y Visualizacin Grfica con Matlab de Shoichiro
Nakamura Ed. Pentice Hall.
2. Anlisis Numrico de Richard L. Burden y J. Douglas Faires, 6ta ed.
Thomson Ed.
3. Mtodos Numricos Aplicados a la Ingeniera de Antonio Nieves y
Federico C. Domnguez. Ed. Cecsa.
4. Mtodos Numricos para Ingenieros 3ra ed. de Steven C. Chapra
y Raymond P. Canale. Ed. Mc Graw Hill.
5. The Inversion of Large Matrices (The Pan and Reif algorithm provides a
solution) by Thomas E. Phipps Jr. Articulo publicado por BYTE
Magazine Abril 1986.
6. Computational Mathematics por B. P. Demidovich y I. A. Maron.
MIR Publishers.Moscow, 1981.
PROGRAMAS
Crout.m
clear
echo off
a [1 3 5;2 -2 8;-1 4 10];% un ejemplo
b [1 2 3];
n length(b);
y a\b
% Algoritmo de Crout
alfa eye(n,n);
25
beta zeros(n,n);
for j 1:n
for i 1:j
sum1 0;
for k 1:i-1
sum1 alfa(i,k).*beta(k,j) sum1;
end
beta(i,j) a(i,j)-sum1;
end
for i j 1:n
sum2 0;
for k 1:j-1
sum2 alfa(i,k).*beta(k,j) sum2;
end
alfa(i,j) (a(i,j)-sum2)./beta(j,j);
end
end
alfa,beta
c(1) b(1)./alfa(1,1);
for i 2:n
sum 0;
for r 1:i-1
sum sum alfa(i,r).*c(r);
end
c(i) (b(i)-sum)./alfa(j,j);
end
x(n) c(n)./beta(n,n);
for j n-1:-1:1
sum 0
for k j 1:n
sum sum beta(j,k).*x(k);
end
x(j) (c(j)-sum)./beta(j,j);
end
a,alfa,beta
disp(Y ES SOLUCION A\B)
for i 1:n
fprintf(y %12.8f x %12.8f\n,y(i),x(i))
end
My_Crout.m
%Algoritmo de Crout
function [x, l, t]
my_Crout(a,b)
n length(b);
% Inicializamos l, t
l zeros(n,n);
t eye(n,n);
for j 1:n
t(1,j) a(1,j)/a(1,1);
end
26
for i 1:n
l(i,1) a(i,1);
end
for i 1:n
for j 1:i
sum1 0;
for k 1:j-1
sum1 l(i,k).*t(k,j) sum1;
end
l(i,j) a(i,j)-sum1;
end
for j i 1:n
sum2 0;
for k 1:i-1
sum2 l(i,k).*t(k,j) sum2;
end
t(i,j) (a(i,j)-sum2)./l(i,i);
end
end
c(1) b(1)./l(1,1);
for i 2:n
sum 0;
for k 1:i-1
sum sum l(i,k).*c(k);
end
c(i) (b(i)-sum)./l(i,i);
end
x(n) c(n);
% Sustititucion regresiva
for j n-1:-1:1
sum 0;
for k j 1:n
sum sum t(j,k).*x(k);
end
x(j) (c(j)-sum);
end
My_Doolittle.m
% Algoritmo de Doolittle
function [x, alfa, beta] my_Doolittle(a,b)
n length(b);
alfa eye(n,n);
beta zeros(n,n);
for j 1:n
for i 1:j
sum1 0;
for k 1:i-1
sum1 alfa(i,k).*beta(k,j) sum1;
end
27
beta(i,j) a(i,j)-sum1;
end
for i j 1:n
sum2 0;
for k 1:j-1
sum2 alfa(i,k).*beta(k,j) sum2;
end
alfa(i,j) (a(i,j)-sum2)./beta(j,j);
end
end
c(1) b(1)./alfa(1,1);
for i 2:n
sum 0;
for r 1:i-1
sum sum alfa(i,r).*c(r);
end
c(i) (b(i)-sum)./alfa(j,j);
end
x(n) c(n)./beta(n,n);
for j n-1:-1:1
sum 0;
for k j 1:n
sum sum beta(j,k).*x(k);
end
x(j) (c(j)-sum)./beta(j,j);
end
My_Chol.m
% Cholesky procedure
function[x,u] my_chol(a,b)
n length(b);
u(1,1) sqrt(a(1,1));
for j 2:n
u(1,j) a(1,j)./u(1,1);
end
c(1) b(1)./u(1,1);
for i 2:n
sum1 0;
for k 1:i-1
sum1 sum1 u(k,i).^2;
% k debe ser
i ya que el termino diagonal no
% se ha calculado aun
end
if a(i,i) sum1
disp(Matriz nos es positiva definida)
end
u(i,i) sqrt(a(i,i)-sum1); % termino diagonal
for j i 1:n % solo la parte triangular superior
sum2 0;
for k 1:i-1
28
sum2 u(k,i).*u(k,j);
end
u(i,j) (a(i,j)-sum2)./u(i,i);
% termino arriba de la diagonal
end
end
for i 2:n % substitucion ascendente
sum 0;
for k 1:i-1
sum sum u(k,i).*c(k);
end
c(i) (b(i)-sum)./u(i,i);
end
x(n) c(n)./u(n,n);
for i n-1:-1:1 % substitucion regresiva
sum 0;
for k i 1:n
sum sum u(i,k).*x(k);
end
x(i) (c(i)-sum)./u(i,i);
end
Inv_Crout.m
% Programa de inversion de matriz
clear
echo off
a [1 2 3;5 -4 10;-1 7 2];
%la matriz eye(3) ocupa el lugar de b en la
% matriz aumentada
%
[a|eye(3)]
%luego se usa la decomposicion LUtres veces
% usando cada columna
% de eye(3) en lugar de b
B eye(3,3);
bb zeros(3,3)
for i 1:3
b B(:,i);
[x,L,U] my_crout(a,b);
for k 1:3
bb(k,i) x(k);
end
end
bb
bb*a
Elim_Gauss.m
function [x,ade] Elim_Gauss(a,b)
[m,n] size(a);
29
ade 1;
i 1;
while i
n-1
ade ade*a(i,i);
if ade 0
disp(HAY UN CERO EN LA DIAGONAL PRINCIPAL !),
break,end
k i 1;
while k n
j i 1;
while j n
a(j,i) 0;
a(k,j) a(k,j)-a(k,i)*a(i,j)/a(i,i);
j j 1;
end
b(k) b(k)-a(k,i)*b(i)/a(i,i);
k k 1;
end
i i 1;
end
ade ade*a(n,n);
if ade 0
disp(Hay un cero en la diagonal principal),
break,end
x(n) b(n)/a(n,n);
i n-1;
while i 1
x(i) b(i);
j 1;
while j n
x(i) x(i)-a(i,j)*x(j);
j j 1;
end
x(i) x(i)/a(i,i);
i i-1;
end
Gauss_Jordan.m
function [x]
Gauss_Jordan(a,b)
n length(b);
% Creamos matriz aumentada
for i 1:n
a(i,n 1) b(i);
end
[nrow,ncol] size(a);
% Buscamos pivot mayor
for k 1:nrow
pivot a(k,k);
il k;
for l k 1:nrow
30
if abs(a(l,k)) abs(pivot)
% No hacemos nada
elseif abs(a(l,k))
abs(pivot)
pivot a(l,k);
il l;
end
end
% pivot cero significa matriz singular
if pivot
0
disp(Matriz Singular)
else
% intercambio de filas para obtener el
% pivot mayor
for ll 1:ncol
temp a(k,ll);
a(k,ll) a(il,ll);
a(il,ll) temp;
end
end
% Normalizar la fila pivot
for j 1:ncol
c(k,j) a(k,j)/pivot;
end
% Ahora la eliminacion Gauss_Jordan
for i 1:nrow
if i k
% No hacemos nada
else
for j 1:ncol
c(i,j) a(i,j)-a(i,k)*c(k,j);
end
end
end
% Ahora ponemos el resultado c() en a()
a c;
for j 1:nrow
x(j) a(j,ncol);
end
end
%disp(*********** Matriz [a|x] aumentada *************)
%a,x
G_Seidel.m
clear
echo off
n 3;
L zeros(3,3);
U zeros(3,3);
c [10 3 1;2 8 3;4 1 9]
d [1 2 3];
31
% Normalizamos
for i 1:3
for j 1:3
a(i,j) c(i,j)./c(i,i);
end
b(i) d(i)./c(i,i);
end
for i 1:3
for j i 1:3
U(i,j) a(i,j);
end
end
for j 1:3
for i j 1:3
L(i,j) a(i,j);
end
end
a,L,U
w input(Entre el valor de w :);
disp(Los valores iniciales son: )
y 10.*[1 1 1 1 1 1]
x y;
% Empezamos la iteracion
fprintf( y(1) y(2) y(3) y(4) y(5) y(6) #iter\n)
fprintf(-\n)
for k 1:100
for i 1:3
sum1 0;
for j 1:i-1
sum1 L(i,j).*y(j) sum1;
end
sum2 0;
for j i 1:3
sum2 U(i,j).*x(j) sum2;
end
y(i) x(i) w.*(b(i)-sum1-x(i)-sum2);
end
error abs(y-x);
x y;
if error
10^-5
break
end
fprintf( %8.5f %8.5f %8.5f %3.0f\n,y(1),...
y(2),y(3),k)
end
Tri_diad.m
32
function f
tri_diag(a,b,c,d,n)
for i 2:n
r a(i)/b(i-1);
b(i) b(i)-r*c(i-1);
d(i) d(i)-r*d(i-1);
end
d(n) d(n)/b(n);
for i n-1:-1:1
d(i) (d(i)-c(i)*d(i 1))/b(i);
end
f d;
Jacobi.m
% Iteracion de Jacobi
clear
echo off
n 6;
a zeros(6,6);
for i 1:6
a(i,i) 2;
end
for i 1:5
a(i,i 1) 1;
a(i 1,i) 1;
end
a
b [3.1 5.1 5.1 5.1 5.1 2.9];
% Normalizamos
for i 1:6
for j 1:6
a(i,j) a(i,j)./2;
end
b(i) b(i)./2;
end
w input(Entre el valor de w :);
disp(Los valores iniciales son: )
y 10.*[1 1 1 1 1 1]
x y;
% Empezamos la iteracion de Jacobi
fprintf( y(1) y(2) y(3) y(4) y(5) y(6) #iter\n)
fprintf(-\n)
for k 1:100
for i 1:6
sum1 0;
for j 1:n
sum1 a(i,j).*x(j) sum1;
end
y(i) x(i) w.*(b(i)-sum1);
end
error abs(y-x);
x y;
if error
10^-5
33
break
end
fprintf( %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f...
%3.0f\n,y(1),y(2),y(3),y(4),y(5),y(6),k)
end
34