You are on page 1of 7

TAREA 1

PROGRAMACIN
EN FORTRAN


Alumno: Bastin guila Vergara
Asignatura: Diseo Computarizado
Profesor: Claudio Garca Herrera

Martes 30 de septiembre, 2014
Santiago de Chile
UNIVERSIDAD DE SANTIAGO DE CHILE
FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA MECNICA


TAREA 1 | Programacin en Fortran

1 | P g i n a

1.0 Resumen
El presente informe contiene los resultados correspondientes a la Tarea N1 del curso
Diseo Computarizado, la que consiste en utilizar el lenguaje Fortran para la
creacin de un programa, que sea capaz de realizar operaciones con matrices y
vectores, provenientes de un problema de mecnica de solidos deformables.
Inicialmente, se tiene un sistema matricial de la forma AX=B, donde A es una matriz
simtrica de 156x156, X es el vector de incgnitas y B el vector de constantes. Ambos
son entregados en archivos de extensin .dat que contienen solamente los valores
distintos de cero. Especficamente se pide lo siguiente:
Multiplicar la matriz A con el vector B.
Ordenar los valores del vector AB de menor a mayor, mediante una subrutina.
Resolver el sistema AX=B con el mtodo numrico de factorizacin LU.
Para dar solucin a los problemas propuestos, se crea un programa que multiplique
A y B, y que adems contiene dos subrutinas para realizar el ordenamiento de los
valores del vector resultante y la bsqueda del vector de incgnitas X del sistema de
ecuaciones inicial.

2.0 Supuestos Tericos
A continuacin detalla la teora utilizada para la resolucin de los tres problemas.
2.1 Multiplicacin de la matriz A y el vector B
Si se tiene una matriz A de m filas y n columnas y un vector columna B de n
elementos, la multiplicacin de A y b, genera un vector columna tambin de n filas,
en donde cada elemento se calcula con la ecuacin 1.

=
,

=1
; = 1

Ecuacin 1
TAREA 1 | Programacin en Fortran

2 | P g i n a

2.2 Ordenamiento de datos
Existen varios algoritmos ideados con la finalidad de reordenar los elementos
contenidos en un vector segn su valor, los ms usados son el de burbuja, el de
seleccin y el de insercin. En este caso, se utiliza el mtodo de la burbuja, el cual
consiste en realizar comparaciones entre valores adyacentes e intercambiarlos
cuando se cumpla la condicin impuesta, es decir, que el segundo sea menor (o mayor)
que el primero. Si el vector es de n elementos, se necesitaran n-1 pasadas y n-1
comparaciones por cada pasada. A continuacin un breve ejemplo:
Se tiene un vector de 4 elementos [ 3 4 5 -7]
Pasada 1
Compara 3 y -4 : nada
compara 3 y 5 : nada
compara 5 y -7 : intercambia

[ -4 3 5 -7]
[ -4 3 5 -7]
[ -4 3 -7 5]
Pasada 2
compara -4 y 3 : nada
compara 3 y -7 : intercambia
compara 3 y 5: nada
...

[ -4 3 -7 5]
[ -4 -7 3 5]
[ -4 -7 3 5]
...

Se necesitar una pasada ms, para obtener [-7 -4 3 5].
2.3 Resolucin del sistema de ecuaciones, por mtodo LU
Un sistema de ecuaciones lineales en su forma matricial puede resolverse mediante
varios mtodos numricos, como por ejemplo la factorizacin LU, Gauss-Seidel o
Gauss - Jordan. En este caso, se utiliza el mtodo LU, en base un algoritmo que
puede ser consultado en [1].
El mtodo consiste bsicamente en descomponer la matriz A, en dos matrices
escalonadas, una superior U y una inferior L, cuya diagonal es la unidad, de tal
manera que, LU=A. El sistema se resuelve de la siguiente forma
AX=B
(LU)X=B
L(UX)=B
LY=B
UX=Y
Sistema inicial
Se descompone A, en L y U
Se escribe el sistema de esta forma
Se toma LY=B y se resuelve para Y por sustitucin hacia adelante
Se toma UX=Y, y se resuelve para X por sustitucin hacia atrs.
TAREA 1 | Programacin en Fortran

3 | P g i n a

3.0 Presentacin de resultados
En esta seccin se nombran las generalidades del programa creado.
3.1 Datos de entrada
El programa se encuentra en el archivo tarea.f90.
Se necesita el archivo matrixDC1.dat que contiene los valores no nulos de la
matriz A, ordenados como se muestra en la figura. La primera columna es el
nmero de la fila i, luego la columna j, y luego el valor en la posicin (i,j) de la
matriz A.
Se necesita el archivo fv01.dat, que contiene los valores del vector columna
B. La primera columna corresponde a la fila i del vector columna, y luego est
el valor para la posicin (i,1)
Estos tres archivos no se muestran en el informe, debido a su tamao, sin
embargo se adjuntan con el cdigo.
3.2 Ejecucin del programa
Una vez compilado y ejecutado el programa, se pide ingresar el valor de n,
correspondiente al nmero de filas y columnas de la matriz A. Si el programa corre
sin problemas, aparece el mensaje final all mostrado, de lo contrario, saldr no se
puede factorizar la matriz A
3.3 Lectura de archivos y formacin de A y B
Para que el programa abra los archivos matrixDC1.dat y fv01.dat se utilizan las
ordenes open (unit=15,file="fv01.dat") y open (unit=14,file="matrixDC1.dat").
Luego con un ciclo DO en donde el contador i vara desde 1 hasta 858 (debido a
que el archivo matrixDC1 contiene esa cantidad de filas que deben ser ledas) y la
orden read(14,*) i , j , valmat se dice al programa que de forma a la matriz.
Como la matriz con la que se trabaja tiene una gran cantidad de valores nulos, cuyas
posiciones en la matriz no se entregan, es conveniente definir en primer lugar que la
matriz A es una matriz nula y que luego con el ciclo do, se reescriban los valores no
nulos de ella. De la misma forma se procede para la formacin del vector B.
TAREA 1 | Programacin en Fortran

4 | P g i n a

3.4 Multiplicacin de la matriz A y el vector B
La multiplicacin de estos elementos se realiza mediante un doble ciclo DO. El ciclo
interno, en donde j va desde 1 a 156, cumple la funcin de multiplicar los elementos
de una fila de A, con los elementos del vector columna B y realiza la suma de los
productos realizados. El ciclo externo, en donde i va desde 1 a 156, ordena al
programa realizar lo anterior, para todas las filas de la matriz. El resultado, se
escribe en el archivo AB01.txt.
3.5 Ordenamiento de datos
El ordenamiento de los valores del vector AB de menor a mayor, se realiza mediante
el mtodo de la burbuja, a travs de la subrutina ORDEN. Esta subrutina, utiliza un
ciclo do en i para las pasadas y un ciclo do en j para las comparaciones y ambos van
desde 1 a n-1 (en este caso hasta 155) tal como se explic en la seccin anterior.
Adems, se utiliza la variable auxiliar z, para poder realizar correctamente el
intercambio entre los valores del vector, si se llega a cumplir la condicin impuesta
en la sentencia IF. El resultado se escribe en ABorden.txt
3.6 Resolucin del sistema de ecuaciones, por mtodo LU
La factorizacin LU de la matriz A y la resolucin del sistema de ecuaciones, se
realiza en la subrutina LU. A diferencia de la subrutina anterior y las primeras
operaciones del programa, esta etapa nos pide ingresar desde la consola, la cantidad
de filas y columnas n de la matriz A y el vector B. La programacin utiliza una serie
de ciclos do y sentencias IF ordenadamente en etapas, tal cual se muestra en el
algoritmo que puede ser consultado en [1]. El resultado, se escribe en el archivo
X01.dat y como un extra, se ha creado una subrutina llamada comprobacin, que
multiplica la matriz A con el vector solucin y lo escribe junto al vector B en el archivo
comprobacin.txt , para verificar si la solucin X obtenida es la correcta.

TAREA 1 | Programacin en Fortran

5 | P g i n a

3.7 Archivos de salida
Los archivos que contienen los resultados, se muestran parcialmente en figura 1. Se
excluye el archivo comprobacin.txt, ya que no es parte de la solucin pedida.
4.0 Discusin, conclusiones y observaciones
El programa en s, funciona solamente para una matriz A de 156x156 y una vector B
de 156 elementos, ya que as se especifican las dimensiones de ambos elementos al
inicio del programa con la sentencia real*8 A (156,156), B (156,156), lo mismo
ocurre para las dems matrices utilizadas en la programacin. Esta situacin, podra
ser mejorada, utilizando la funcin ALLOCATABLE, la cual permite definir matrices
cuyas dimensiones pueden ser ledas desde la consola, al ejecutar el programa.
Otra limitacin del programa guarda relacin con la cantidad de lneas que debe leer
en los archivos matrixDC1.dat y fv01.dat. En esta ocasin se utiliza el valor exacto
de cada archivo (858 y 3 lneas, respectivamente) y se podra mejorar con la sentencia
read (*,*) b, c en donde b y c serian la cantidad de lneas de los archivos
anteriormente indicados.
A pesar de estos inconvenientes, el programa cumple su funcin de acuerdo a lo
pedido, pero podra ser mejorado para que funcione de forma ms general, sin tener
que variar el cdigo ya escrito en el caso de trabajar con matrices provenientes de
otro estudio.
Dentro de las dificultades que se presentaron en la programacin, se encuentra en
primer lugar la definicin de los vectores columna, cuya dimensin debe ser indicada
Figura 1: archivos de salida del programa. De izquierda a derecha: AB01.txt, ABorden01.txt, X01.txt.
TAREA 1 | Programacin en Fortran

6 | P g i n a

como vector(n,1) y no como vector(n), de lo contrario, los resultados obtenidos son
errneos. Una segunda dificultad, fue escribir correctamente la matriz A, ya que al
ser simtrica, los datos entregados en el archivo matrixDC1.dat corresponden a las
posiciones (i,j) pero no a las (j,i). Por ejemplo, se entrega el valor A(1,3), pero no el
A(3,1), por lo que el programa debe ser capaz de asignar correctamente los valores
para formar la matriz simtrica.
Respecto a la factorizacin LU, es importante recalcar la diferencia en la forma de
realizar una sustitucin hacia adelante y hacia atrs. La primera se realiza con un
ciclo DO, con i variando entre 1 y n-1, en cambio para la sustitucin hacia atrs, se
requiere que el contador comience desde n-1 hasta 1, lo cual puede realizarse
mediante la sentencia do i=n-1 , 1 , -1.
Las matriz A y el vector B no son escritos en archivos .txt o mostrados en la consola,
lo mismo pasa con las matrices UP, LOW e Y utilizadas en la programacin del
mtodo LU, ya que sera un gasto de memoria innecesario considerando que son de
gran tamao y que incluso podran llegar a ser an ms grandes, por lo dems,
forman parte del programa y de los clculos, pero no son las soluciones buscadas.
El mtodo de la burbuja utilizado es bastante simple, pero por lo mismo no es el ms
eficiente de todos. Para efectos de la tarea se adapta bastante bien en cuanto al
tiempo que requiere para finalizar el ordenamiento, ya que el vector AB no es tan
grande, sin embargo, si se tuviera un vector de una cantidad de elementos mucho
mayor, se debiese analizar la necesidad de utilizar otro mtodo de ordenamiento.
Respecto a la solucin obtenida para el sistema de ecuaciones, mediante el mtodo
LU, se puede decir que es buena. Si bien, no se calcul el error, mediante el archivo
extra comprobacin.txt, se puede ver que todos los valores nulos en el vector B, son
bastante cercanos a cero en el vector AX y que los valores no nulos del vector B,
resultaron ser idnticos en l solucin encontrada.

5.0 Referencias
[1] BURDEN, Richard, FAIRES, Douglas. Anlisis Numrico. 7
a
ed. Mxico. Editorial
Thomson Learning, 2002. pp. 393-394.

You might also like