Sei sulla pagina 1di 7

UNIVERSIDAD DE SANTIAGO DE CHILE

FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA MECNICA

TAREA 1
PROGRAMACIN
EN FORTRAN

Alumno:

Bastin guila Vergara

Asignatura:

Diseo Computarizado

Profesor:

Claudio Garca Herrera

Martes 30 de septiembre, 2014


Santiago de Chile

TAREA 1 | Programacin en Fortran

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 multiplica 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. Adems, se ha aadido una subrutina aparte, para efectos de
comprobar la solucin obtenida.

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

1|Pgina

TAREA 1 | Programacin en Fortran

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

Pasada 1

Compara 3 y -4 : nada

compara 3 y 5 : nada

compara 5 y -7 : intercambia

[ -4
[ -4
[ -4

3 5 -7]
3 5 -7]
3 -7 5]

[ -4
[ -4
[ -4

3 -7 5]
-7 3 5]
-7 3 5]
...

Pasada 2

compara -4 y 3 : nada

compara 3 y -7 : intercambia

compara 3 y 5: nada
...

Se necesitar una pasada ms, para obtener [-7 -4

5 -7]

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

Sistema inicial

(LU)X=B

Se descompone A, en L y U

L(UX)=B

Se escribe el sistema de esta forma

LY=B

Se toma LY=B y se resuelve para Y por sustitucin hacia adelante

UX=Y

Se toma UX=Y, y se resuelve para X por sustitucin hacia atrs.

2|Pgina

TAREA 1 | Programacin en Fortran

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. 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, en la entrega virtual.

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 se
ejecuta sin problemas, aparece un mensaje que indica los ficheros que se han creado,
de lo contrario, saldr que 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. De la
misma forma se procede para la formacin del vector B.
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
3|Pgina

TAREA 1 | Programacin en Fortran

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; 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 el archivo 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 ordenadas en etapas, tal cual se muestra en el algoritmo
que puede ser consultado en [1]. El resultado, se escribe en el archivo X01.dat.
Como un extra, se ha creado la rutina COMPROBACIN, que multiplica la matriz A
con el vector solucin X y lo escribe junto al vector B en el archivo comprobacin.txt ,
para verificar si la solucin X obtenida es la correcta.
3.7 Archivos de salida
Los archivos que crea el programa y que contienen los resultados obtenidos, debido a
la cantidad de filas que tienen, se muestran solo parcialmente en la figura 1. Se
excluye el archivo comprobacin.txt, ya que no es parte de la solucin pedida.

4|Pgina

TAREA 1 | Programacin en Fortran

Figura 1: archivos de salida del programa. De izquierda a derecha: AB01.txt, ABorden01.txt, X01.txt.

4.0 Discusin, conclusiones y observaciones personales.


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 corresponden a 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
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
5|Pgina

TAREA 1 | Programacin en Fortran

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 un ciclo DO definido como do i= n-1 , 1 , -1.
Las matriz A y el vector B no son escritos en archivos .txt o en la terminal, 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
comprobacin.txt, se puede ver que todos los valores que son 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 la solucin encontrada.

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

6|Pgina

Potrebbero piacerti anche