- Sistemas lineales de ecuaciones
- Métodos directos
- Doolittle
- Código fuente de Doolittle
- Código fuente de Crout
- Código fuente de Cholesky
- Resultados con los métodos directos
- Conclusiones
- Bibliografía
En la práctica de la ingeniería y ciencias es frecuente tener la necesidad de resolver un sistema de ecuaciones lineales. Estos sistemas aparecen en muy diversos problemas, ya sea como la solución completa de un problema ó al menos como parte de ella. Dada esta necesidad frecuente, se requiere resolverlos en forma eficiente.
Los métodos numéricos que resuelven los sistemas se pueden clasificar en directos e indirectos.
Los métodos directos son aquellos que determinan la solución en un numero determinado de pasos.
Los métodos iterativos son aquellos que obtienen la solución aproximándose a ella en un numero finito, pero no definido de pasos.
La siguiente entrega pretende encontrar la solución de un sistema
de ecuaciones lineales por los métodos anteriormente mencionados.
Como los algoritmos de los métodos ya están disponibles en la mayoría de los libros de texto sobre la materia, se explicara en la medida de lo posible, detalles de implementación(personales)de los métodos directos(que son mas difíciles de programar).
El lenguaje de programación idóneo para tal fin será matlab 6.0
SISTEMAS LINEALES DE ECUACIONES
Antes de empezar con los detalles de implementación de los métodos directos resulta conveniente determinar con que sistema
o sistemas vamos a trabajar.
Para los métodos directos se preferirá un sistema cuya matriz de
coeficientes sea simétrica y definida positiva; la razón de tal decisión radica es que con este tipo de matrices trabaja el método directo de "Cholesky", a diferencia de Doolittle y Crout.
Puesto que se utilizará un W(factor de relajación) dado :
W = (raíz cuadrada(5)+1)/2 = 1.61803398874989aprox.
No será necesario tener un sistema tridiagonal para hallar dicho valor.
Como consecuencia de lo anteriormente expuesto, se utilizará el mismo sistema para los métodos directos e iterativos.
Una matriz A es simétrica si su transpuesta es igual a A.
Es decir: A = [a(i,j)] es simétrica si y solo si [a(i,j)]=[a(j,i)].
Una matriz simétrica A es positiva definida si y solo si los eigenvalores(valores propios) de A son positivos.
Toda matriz simétrica se puede descomponer como:
A = L*Lt (transpuesta)
Para construir de manera fácil la matriz en cuestión, basta con utilizar las siguientes instrucciones en matlab:
>>L=tril(ones(10)); %construye L
>>A=L*L'; %construye L*Lt
>>A%matriz simétrica
A =
1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2
1 2 3 3 3 3 3 3 3 3
1 2 3 4 4 4 4 4 4 4
1 2 3 4 5 5 5 5 5 5
1 2 3 4 5 6 6 6 6 6
1 2 3 4 5 6 7 7 7 7
1 2 3 4 5 6 7 8 8 8
1 2 3 4 5 6 7 8 9 9
1 2 3 4 5 6 7 8 9 10
Si se quiere comprobar que efectivamente se trata de una matriz positiva definida, basta con teclear:
>>eig(A)%calcula los valores propios de A
Que obtendrá:
ans =
0.2557
0.2738
0.3080
0.3662
0.4652
0.6431
1.0000
1.8730
5.0489
44.7661
Y todos los valores propios de A son positivos
Para evitar problemas de convergencia en los métodos iterativos es necesario que el esquema convergente quede determinado.
Para el método de Jacobi basta teclear:
>> S=diag(diag(A));%crea la matriz diagonal
>> T=S-A;
>>B=inv(S)*T;
>>eig(B)
Que arroja:
ans =
-6.2572
-0.3709
0.4470
0.7060
0.8199
0.8800
0.9156
0.9386
0.9545
0.9666
Como cada uno de los valores propios es menor que ("<1"),entonces el esquema de convergencia "A", sirve para obtener las ecuaciones iterativas del método de Jacobi.
Para el método de Gauss-Seidel:
>> L=tril(A,-1);
>>D=diag(diag(A));
>> S=D+L;
>> T=S-A;
>>B=inv(S)*T;
>> eig(B)
Que arroja:
ans =
0
0.5000
0.6667
0.7500
0.8000
0.8333
0.8571
0.8750
0.8889
0.9000
Como cada uno de los valores propios es menor que ("<1"),entonces el esquema de convergencia "A", sirve para obtener las ecuaciones iterativas del método de Gauss-Seidel.
Como ya se ha determinado la matriz de coeficientes del sistema, ahora sólo resta elegir el vector de términos independientes y determinar la solución del sistema(para ayudarnos a ver mejor el comportamiento de los métodos).
Como todo sistema se puede escribir como Ax=b, utilizaremos
a matlab para resolverlo por x = (inversa de A)*b.(solución por la inversa)
Entonces se teclea:
>>b=[11;2;9;20;5;6;7;0;1;3];%vector de términos independientes
>> x=inv(A)*b;%solución por la inversa
El resultado obtenido será:
x =
20
-16
-4
26
-16
0
8
-8
-1
2
Que es el vector solución que se presumirá obtener por los métodos a evaluar.
Nuestro sistema quedará entonces de la siguiente manera:
Que es la forma matricial Ax=b.
Puesto que ya se determinó el sistema con el cual se trabajará, ahora se centrará la atención en la programación de los métodos directos.
La lógica de los algoritmos(procedimientos no ambiguos que resuelven problemas),sugieren que el cuerpo de la implementación sea:
1)Captura de los datos de entrada.
2)Implementación de un método directo.
3)Implementación de los procedimientos progresivos y regresivos que llevan a la solución.
4)Salida y presentación de los resultados.
Se explicara solo los detalles del método de Doolittle, cuya lógica
es aplicable a los restantes métodos directos respecto a los itenes
- y 3).
(Captura de los datos de entrada)
¿Que es lo que necesita un método directo para poder empezar?
Resulta lógico pensar que necesita A y b (Ax=b), pero si esto se hace pidiéndole al usuario que digite A y luego b, se corre el riesgo que digite mal los datos, además resulta muy cansado hacerlo.
Podría además digitar un tamaño de matriz que no corresponde a la matriz.
Para aminorar un poco el riesgo, se le pedirá al usuario que ingrese la matriz aumentada del sistema, de la cual se sacará la información necesaria para que el método funcione.
Como el tamaño de A es n*n, el tamaño de la matriz aumentada es n*n+1, puesto que se incluye a "b"(una columna mas).
El algoritmo de captura quedaría como:
- Lea matriz
- Tam=tamaño(matriz)
- Para i=1, n haga
b(i)=matriz(i,n+1) (determinar "b")
Para j=1, n haga
A(i,j)=matriz(i,j) (determinar "A")
Finpara
Finpara
4- b1=transpuesta(b) ("b" es un vector columna)
DOOLITTLE
(Implementación de los procedimientos progresivos y regresivos que llevan a la solución.)
Se utilizará un sistema de 3*3 y 4*4 para ver el comportamiento
de "c" en L*c=b, y de "x" en Ux=c.
L*c=b
c(1)=b(1)
c(2)=b(2)-[l(2,1)*c(1)]
c(3)=b(3)-[l(3,1)*c(1)+l(3,2)*c(2)]
c(1)=b(1)
c(2)=b(2)-[l(2,1)*c(1)]
c(3)=b(3)-[l(3,1)*c(1)+l(3,2)*c(2)]
c(4)=b(4)-[l(4,1)*c(1)+l(4,2)*c(2)+l(4,3)*c(3)]
Es facil observar, que lo que se esta efectuando entre corchetes([]), es una sumatoria.
También se observa que en L(i,j) , i<>j y i>j
Además, de c(2) a c(n) se tiene que para L(i,j), i=2,n y j=1,n-1
Entonces el esquema para c quedaria como:
c(1)=b(1)
c(i)=b(i)-Sumatoria(L(i,j)*c(i)), i<>j y i>j para todo L(i,j)
con i=2,n y j=1,n-1
El procedimiento que resume este comportamiento es:
c(1)=b(1)
Para i=2,n haga
z=0
Para j=1,n-1 haga
Si i<>j y i>j entonces
z=z+L(i,j)*c(j)
Finsi
Finpara
c(i)=b(i)-z
Finpara
Ux=c
x(3)=c(3)/u(3,3)
x(2)={c(1)-[u(2,3)*x(3)]}/u(2,2)
x(1)={c(1)-[ u(1,3)*x(3)+u(1,2)*x(2) ]}/u(1,1)
x(4)=c(4)/u(4,4)
x(3)={c(3)-[u(3,4)*x(4)]}/u(3,3)
x(2)={c(2)-[u(2,4)*x(4)+u(2,3)*x(3)]}/u(2,2)
x(1)={c(1)-[u(1,4)*x(4)+u(1,3)*x(3)+u(1,2)*x(2)]}/u(1,1)
Es facil observar, que lo que se esta efectuando entre corchetes([]), es una sumatoria.
También se observa que en U(i,j) , i<>j y i<j
Además, de x(n-1) a x(1) se tiene que para U(i,j), i=n-1,1 y j=n,2
Entonces el esquema para x quedaria como:
x(n)=c(n)/u(n,n)
x(i)=c(i)-Sumatoria(U(i,j)*x(j)), i<>j y i<j para todo U(i,j)
con i=n-1,1 y j=n,2
El procedimiento que resume este comportamiento es:
x(n)=c(n)/u(n,n)
Para i=n-1,1 haga
Para j=n:-1:2 haga
Si I<>j y i<j entonces
z=z+U(i,j)*x(j)
Finsi
Finpara
x(i)=(c(i)-z)/U(i,i)
Finpara
A continuación se da el código fuente con algunos comentarios sobre las instrucciones donde es conveniente.
matriz=input ('TECLEE LA MATRIZ AUMENTADA DEL SISTEMA, por ejemplo: [5 -4 2 20;2 -3 4 19;1 1 3 10]n');
tam=size(matriz);%sacar el tamaño de la matriz para determinar:
%A(matris de coeficientes) y b(vector de terminos independientes)
n=tam(1);%saca el numero de filas de la matriz(tamaño de A)
for i=1:n
b(i)=matriz(i,n+1);%determinar "b"
for j=1:n
A(i,j)=matriz(i,j);%determinar "A"
end
end
b1=b';% "b" es un vector columna
L=eye(n);%inicializa la "L" de doolittle(le da el tamaño de A),y evita crear sus unos y ceros
for k=1:n-1 %factorizacion de doolittle'''''''''''''''''''''''''''''
for i=k+1:n %'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
L(i,k)=A(i,k)/A(k,k); %(se determina la "L")'''''''''''''''''''''' '''''''''''
for j=1:n %''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
A(i,j)=A(i,j)-A(k,j)*L(i,k);%(se determina la "U"(A se transforma en U))
end %'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
U=A;%cambio de variable
c=b1;%se inicializa el vector "c", que tiene el mismo tamaño de "b"(se determina c(1))
for i=2:n %procedimiento para hallar "c"(progresivamente)
z=0; %''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
for j=1:n-1 %''''''''L*c=b'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
if i~=j & i>j %''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
z=z+L(i,j)*c(j);%''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
c(i)=b1(i)-z; %''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
x=c;%se inicializa el vector "x", que tiene el mismo tamaño de "c"
x(n)=c(n)/U(n,n);%se determina x(n)(ultima solucion del sistema)
for i=n-1:-1:1 %procedimiento para hallar "x"(regresivamente)
z=0; %'''''''''''''''''''''''''''''''''''''''''''''
for j=n:-1:2 %''''''U*x=c''''''''''''''''''''''''''''''''''
if i~=j & i<j %'''''''''''''''''''''''''''''''''''''''''''''
z=z+U(i,j)*x(j);%'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
x(i)=(c(i)-z)/U(i,i); %'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
L%muestra la matriz triangular inferior de doolittle
U%muestra ''''''''''''''''''''''superior ''''''''''''
LU=L*U%muestra la factorizacion de doolittle
x%vector solucion del sistema
clear all%elimina las variables del espacio de trabajo(evita que el programa se cargue de basura)
%copyright 2004
%ESVEN MORALES
matriz=input ('TECLEE LA MATRIZ AUMENTADA DEL SISTEMA, por ejemplo: [5 -4 2 20;2 -3 4 19;1 1 3 10]n');
tam=size(matriz);%sacar el tamaño de la matriz para determinar
%A(matris de coeficientes)y b(vector de terminos independientes)
n=tam(1);%saca el numero de filas de la matriz
for i=1:n
b(i)=matriz(i,n+1);%determinar "b"
for j=1:n
A(i,j)=matriz(i,j);%determinar "A"
end
end
b1=b';% "b" es un vector columna
U=eye(n);%inicializa la "U" de crout(le da el tamaño de A),y evita crear sus unos y ceros
for k=1:n-1 %factorizacion de crout'''''''''''''''''''''
for j=k+1:n %'''''''''''''''''''''''''''''''''''''''''''
U(k,j)=A(k,j)/A(k,k); %(se determina la "U")''''''''''''''''''''''
for i=1:n %'''''''''''''''''''''''''''''''''''''''''''
A(i,j)=A(i,j)-A(i,k)*U(k,j);%(se determina la "L"(A se transforma en L))
end %'''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''
L=A;%cambio de variable
c=b1;%se inicializa el vector "c", que tiene el mismo tamaño de "b"
c(1)=b1(1)/L(1,1);%se determina el primer elemento de c
for i=2:n %procedimiento para hallar "c"(progresivamente)
s=0; %''''''''''''''''''''''''''''''''''''''''''''''
for j=1:n-1 %''''''''''''''''''''''''''''''''''''''''''''''
if i~=j & i>j %''''''''''''''''''''''''''''''''''''''''''''''
s=s+L(i,j)*c(j);%''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''
c(i)=(b1(i)-s)/L(i,i); %''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''
x=c;%se inicializa el vector "x", que tiene el mismo tamaño de "c"
for i=n-1:-1:1 %procedimiento para hallar "x"(regresivamente)
s=0; %'''''''''''''''''''''''''''''''''''''''''''''
for j=n:-1:2 %'''''''''''''''''''''''''''''''''''''''''''''
if i~=j & i<j %'''''''''''''''''''''''''''''''''''''''''''''
s=s+U(i,j)*x(j);%'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
x(i)=c(i)-s; %'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
L%muestra la matriz triangular inferior de crout
U%muestra ''''''''''''''''''''''superior ''''''''
LU=L*U%muestra la factorizacion de crout
x%vector solucion del sistema
clear all%elimina las variables del espacio de trabajo(evita que el programa se cargue de basura)
%copyright 2004
%ESVEN MORALES
matriz=input ('TECLEE LA MATRIZ AUMENTADA DEL SISTEMA, por ejemplo: [5 -4 2 20;2 -3 4 19;1 1 3 10]n');
tam=size(matriz);%sacar el tamaño de la matriz para determinar A(matris de coeficientes)
% y b(vector de terminos independientes)
n=tam(1);%saca el numero de filas de la matriz
for i=1:n
b(i)=matriz(i,n+1);%determinar "b"
for j=1:n
A(i,j)=matriz(i,j);%determinar "A"
end
end
b1=b';% "b" es un vector columna
for k=1:n %Algoritmo de cholesky
for i=1:k-1 %'''''''''''''''''''''
sum=0; %'''''''''''''''''''''
for j=1:i-1 %'''''''''''''''''''''
sum=sum+A(i,j)*A(k,j); %'''''''''''''''''''''
end %'''''''''''''''''''''
A(k,i)=(A(k,i)-sum)/A(i,i); %'''''''''''''''''''''
end %'''''''''''''''''''''
sum=0; %'''''''''''''''''''''
for j=1:k-1 %'''''''''''''''''''''
sum=sum+A(k,j)*A(k,j); %'''''''''''''''''''''
end %'''''''''''''''''''''
A(k,k)=sqrt(A(k,k)-sum); %'''''''''''''''''''''
end %'''''''''''''''''''''
for i=1:n-1 %Añade los ceros de la L de cholesky
for j=1:n %''(puesto que el algoritmo solo '''
if j>i %'''altera los elementos de'''''''''
A(i,j)=0; %'''la diagonal principal de A''''''
end %''''y por debajo de esta)''''''''''
end %'''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''
L=A;%cambio de variable
Lt=L';%Lt sera la U de cholesky(transpuesta de L)
c=b1;%se inicializa el vector "c", que tiene el mismo tamaño de "b"
c(1)=b1(1)/L(1,1);%se determina el primer elemento de c
for i=2:n %procedimiento para hallar "c"(progresivamente)
s=0; %''''''''''''''''''''''''''''''''''''''''''''''
for j=1:n-1 %''''''''''''''''''''''''''''''''''''''''''''''
if i~=j & i>j %''''''''''''''''''''''''''''''''''''''''''''''
s=s+L(i,j)*c(j) ;%''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''
c(i)=(b1(i)-s)/L(i,i); %''''''''''''''''''''''''''''''''''''''''''''''
end %''''''''''''''''''''''''''''''''''''''''''''''
x=c;%se inicializa el vector "x", que tiene el mismo tamaño de "c"
x(n)=c(n)/Lt(n,n);%se determina x(n)(ultima solucion del sistema)
for i=n-1:-1:1 %procedimiento para hallar "x"(regresivamente)
z=0; %'''''''''''''''''''''''''''''''''''''''''''''
for j=n:-1:2 %''''''Lt*x=c''''''''''''''''''''''''''''''''''
if i~=j & i<j %'''''''''''''''''''''''''''''''''''''''''''''
z=z+Lt(i,j)*x(j);%'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
x(i)=(c(i)-z)/Lt(i,i); %'''''''''''''''''''''''''''''''''''''''''''''
end %'''''''''''''''''''''''''''''''''''''''''''''
L%muestra la matriz triangular inferior de cholesky
Lt%muestra ''''''''''''''''''''''superior ''''''''
LLt=L*Lt%muestra la factorizacion de cholesky
x%vector solucion del sistema
clear all%elimina las variables del espacio de trabajo(evita que el programa se cargue de basura)
%copyright 2004
%ESVEN MORALES
RESULTADOS CON LOS METODOS DIRECTOS
DOOLITTLE
L =
1 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1
U =
1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 1 1
0 0 0 0 0 1 1 1 1 1
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 1
LU =
1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2
1 2 3 3 3 3 3 3 3 3
1 2 3 4 4 4 4 4 4 4
1 2 3 4 5 5 5 5 5 5
1 2 3 4 5 6 6 6 6 6
1 2 3 4 5 6 7 7 7 7
1 2 3 4 5 6 7 8 8 8
1 2 3 4 5 6 7 8 9 9
1 2 3 4 5 6 7 8 9 10
x =
20
-16
-4
26
-16
0
8
-8
-1
2
CROUT
L =
1 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1
U =
1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 1 1
0 0 0 0 0 1 1 1 1 1
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 1
LU =
1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2
1 2 3 3 3 3 3 3 3 3
1 2 3 4 4 4 4 4 4 4
1 2 3 4 5 5 5 5 5 5
1 2 3 4 5 6 6 6 6 6
1 2 3 4 5 6 7 7 7 7
1 2 3 4 5 6 7 8 8 8
1 2 3 4 5 6 7 8 9 9
1 2 3 4 5 6 7 8 9 10
x =
20
-16
-4
26
-16
0
8
-8
-1
2
cholesky
L =
1 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1
Lt =
1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 1 1
0 0 0 0 0 1 1 1 1 1
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 1
LLt =
1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2
1 2 3 3 3 3 3 3 3 3
1 2 3 4 4 4 4 4 4 4
1 2 3 4 5 5 5 5 5 5
1 2 3 4 5 6 6 6 6 6
1 2 3 4 5 6 7 7 7 7
1 2 3 4 5 6 7 8 8 8
1 2 3 4 5 6 7 8 9 9
1 2 3 4 5 6 7 8 9 10
x =
20
-16
-4
26
-16
0
8
-8
-1
2
Nota: como éste trabajo solo fue realizado por una sola persona, no tuvo tiempo para implementar los métodos iterativos(a pesar de que son mas fáciles de implementar).
No obstante el trabajo de escritorio que si realizó, y las investigaciones personales que hizo, dieron pie para poder
Sacar las próximas conclusiones.
Ventajas y desventajas de los métodos iterativos comparados con los métodos directos.
Ventajas
*Probablemente más eficientes que los directos para sistemas de orden muy alto.
*Mas simples de programar.
*Puede aprovecharse una aproximación a la solución ,si tal aproximación existe.
*Se obtienen fácilmente aproximando burdas de la solución.
*Son menos sensibles a los errores de redondeo(valioso en sistemas
mal condicionados).
*Se requiere menos memoria de máquina.Generalmente, las necesidades de memoria son proporcionales al orden de la matriz.
Desventajas
*Si se tienen varios sistemas que comparten la matriz coeficiente, esto no representará ahorro de cálculos ni tiempo de máquina, ya que por cada vector a la derecha de A tendrá que aplicarse el método
seleccionado.
*Aún cuando la convergencia este asegurada, puede ser lenta y ,por lo tanto, los cálculos requeridos para obtener una solución particular
no son predecibles.
*El tiempo de máquina y la exactitud del resultado dependen del
criterio de convergencia.
*Si la convergencia es lenta, los resultados deben interpretarse con cautela.
*No se tiene ventaja particular alguna(tiempo de máquina por iteración) si la matriz coeficiente es simétrica.
*No se obtiene la inversa de A ni el determinante de A.
-INTRODUCCION AL ÁLGEBRA LINEAL. Antón Howard. 2da Ed
-METODOS NUMERICOS PARA INGENIEROS. Chapra/Canale
Mc-Graw Hill. 4a Ed
ESVEN SALOMON MORALES BITAR
UNIVERSIDAD AUTONOMA DEL CARIBE
INGENIERIA DE SISTEMAS
BARRANQUILLA / ATLANTICO