Anda di halaman 1dari 11

UNIVERSIDAD POLITCNICA DE VICTORIA

MAESTRA EN INGENIERA

ESPECIALIDAD: MECATRNICA

ASIGNATURA: PROCESADORES DIGITALES

CATEDRTICO: DR. MARCO AURELIO NUO MAGANDA

ALUMNO: JOSU HEL JIMNEZ ARTEAGA

REPORTE DE PRCTICA: 05

CLCULO DE UN DETERMINANTE
INTRODUCCIN Se implementar el clculo de un determinante de una matriz de 4 x 4 insertada desde el teclado. Esto se har utilizando el simulador PCSpim. Para calcular el determinante de una matriz de n x n se hace referencia a las siguientes definiciones: Considrese el caso de la matriz general de n x n

a11 a A = 21 ... a n1

a12 a 22 ... an2

... a1n ... a 2 n ... ... ... a nn

El ij-simo cofactor de A, denotado por Aij, es: Aij = (1) i + j M ij Mij es la matriz de (n 1)x(n 1) que se obtiene de A, al eliminar el i-simo rengln y la j-sima columna de A. Sea A una matriz de n x n. Entonces el determinante de A, escrito det A, o bien |A|, est dado por
det A = A = a11 A11 + a12 A12 + a13 A13 + ... + a1n A1n =
n k =1

a1k A1k

A la expresin del lado derecho de la ecuacin anterior se le conoce como desarrollo por cofactores. (1) Para una matriz de 4 x 4:

a11 a A = 21 a 31 a 41
Su determinante est dado por:

a12 a 22 a32 a 42

a13 a 23 a 33 a 43

a14 a 24 a 34 a 44

det A = A = a11 A11 + a12 A12 + a13 A13 + a14 A14

DESARROLLO Para el desarrollo del programa y ejecucin de los clculos, se utilizarn distintos registros y localidades de memoria de la arquitectura MIPS. Registros $t0 a $t9 Son registros que son guardados por la rutina llamada, y son utilizados para almacenar cantidades temporales que no necesitan ser preservadas a travs de las llamadas. Si se necesita usar el valor de uno de esos registros despus de una llamada, deber guardarse en otro antes de la misma. Registros $s0 a $s7 Son registros que almacenan valores, los cuales son preservados durante una llamada a rutina. Registros $a0 y $v0 Se utilizan como argumentos de funciones. (2)

La simulacin se har mediante el software PCSpim:

Figura 1. PCSpim

El procedimiento para calcular un determinante de 4x4 por el mtodo de cofactores, implica calcular cuatro determinantes de 3x3 y cada uno se resuelve de la misma manera, por lo que se har uso de llamadas a una subrutina, solo cambiando el valor de cada elemento de la matriz de 3x3 en cada llamada. Como el valor de cada elemento de esas matrices no se vuelve a utilizar despus de la llamada, se har uso de los registros $t0-$t9. Para comenzar se guardan en memoria los 16 valores de los elementos de la matriz original ingresada por medio del teclado.

El clculo del primer cofactor se hace asignando los valores guardados en memoria a los registros $t de la siguiente manera: t0 t1 t 2 t 3 A= t 4 t5 t 6 t 7 t8 t 9 a11 A11 = t 0[(t1)(t 5)(t 9) + (t 2)(t 6)(t 7) + (t 4)(t 8)(t 3) (t 7)(t 5)(t 3) (t 8)(t 6)(t1) (t 4)(t 2)(t 9)] No se alterarn los elementos de la matriz original, sino que el valor de cada elemento se asignar a un registro $t, segn la distribucin mostrada en la matriz anterior. Para el segundo cofactor: A= t0 t1 t 2 t 3

t 4 t5 t 6 t 7 t8 t 9 a12 A12 = t 0[(t1)(t 5)(t 9) + (t 2)(t 6)(t 7) + (t 4)(t 8)(t 3) (t 7)(t 5)(t 3) (t 8)(t 6)(t1) (t 4)(t 2)(t 9)] Para el tercer cofactor: t0 t1 t 2 t 3 A= t 4 t5 t 6 t 7 t8 t 9

a13 A13 = t 0[(t1)(t 5)(t 9) + (t 2)(t 6)(t 7) + (t 4)(t 8)(t 3) (t 7)(t 5)(t 3) (t 8)(t 6)(t1) (t 4)(t 2)(t 9)] Para el cuarto cofactor: t0 t1 t 2 t 3 A= t 4 t5 t 6 t 7 t8 t 9 a14 A14 = t 0[(t1)(t 5)(t 9) + (t 2)(t 6)(t 7) + (t 4)(t 8)(t 3) (t 7)(t 5)(t 3) (t 8)(t 6)(t1) (t 4)(t 2)(t 9)]

Lo nico que cambia en cada serie de operaciones, es el dato almacenado en los registros $t y el signo de $t0; mientras que las multiplicaciones, sumas y restas son anlogas en cada caso. Al final, se hallar el determinante de la manera antes mencionada:

A = a11 A11 + a12 A12 + a13 A13 + a14 A14


Para almacenar el resultado de cada clculo y sumarlo, se utilizarn los registros $s, ya que permanecen aun despus de una llamada a subrutina.

RESULTADOS Matriz propuesta: 3 2 0 1 1 5 1 6 A= 4 2 0 1 0 1 3 2

A = 3 2 0 1 2 4 0 1 + 0 4 2 1 (1) 4 2 0 1 3 2 0 3 2 0 1 2 0 1 3
A = 3[(5)(0)(2) + (1)(1)(1) + (2)(3)(6) (1)(0)(6) (3)(1)(5) (2)(1)(2)]

2[(1)(0)(2) + (1)(1)(0) + (4)(3)(6) (0)(0)(6) (3)(1)(1) (4)(1)(2)] + 0[(1)(2)(2) + (5)(1)(0) + (4)(1)(6) (0)(2)(6) (1)(1)(1) (4)(5)(2)] (1)[(1)(2)(3) + (5)(0)(0) + (4)(1)(1) (0)(2)(1) (1)(0)(1) (4)(5)(3)]

A = 3(1 + 36 + 15 + 4) 2(72 + 3 8) + 0(4 + 24 + 12 1 40) (1)(6 + 4 + 60) A = 3(56) 2(77) + 1(70) = 168 + 154 + 70 A = 392
En la simulacin, se ingresaron los datos, obteniendo como resultado lo mostrado en la siguiente figura:

Figura 2. Consola de PCSpim. Ejecucin del programa

Prueba de funcionamiento con otra matriz de 4 x 4: 1 3 0 1 A= 2 1 3 2 Clculo del determinante: 5 3 9 4 2 4 6 8

1 3 4 A =1 1 2

0 3 4

0 1 4 1 2

0 1 3 1 2 9 = 1(92) 3(70) + 5(2) 2(16) = 160 4

9 6 32 9 6 + 52 4 8 3 4 8 3

6 22 8 3

Ejecucin del programa:

Figura 3. Consola de PCSpim. Ejecucin del programa

CONCLUSIONES Existen varios mtodos para calcular determinantes. Se eligi el mtodo de cofactores, ya que solo maneja operaciones de adicin, sustraccin y multiplicacin, sin operaciones entre filas o columnas. El procedimiento requiere de calcular cuatro determinantes; se opt por definir una subrutina que hiciera el procedimiento, en vez de escribir el mismo cdigo en repetidas ocasiones. Para dar un seguimiento al funcionamiento del programa, la ventana principal de PCSpim facilit la tarea, ya que muestra el contenido de los registros y memorias, entre otros datos de utilidad. En la figura 4 se observa cmo se modifican los registros despus de la ejecucin del programa, as como la memoria, la cual se utiliz para almacenar la matriz original de 4 x 4.

Figura 4. PCSpim. Despus de la ejecucin del programa

REFERENCIAS
(1) (2)

Grossman, Stanley I.: lgebra Lineal, Ed. Iberoamrica. Larus, James R.: Assemblers, Linkers and the SPIM simulator, Microsoft Research.

ANEXOS Cdigo fuente del programa Archivo: Practica05.s


# PROCESADORES DIGITALES. PRCTICA 05 # JOSU HEL JIMNEZ ARTEAGA ############################# # SEGMENTO DE DATOS # ############################# .data strIntro: .asciiz " A " matriz: .space 64 # espacio de memoria = 4*(numero de enteros) strIntro2: .asciiz ": " strDeter: .asciiz "|A| = " strTitle: .asciiz "CALCULO DE DETERMINANTE DE UNA MATRIZ DE 4x4\nINTRODUCE EL VALOR DE CADA ELEMENTO...\n" ############################# # SEGMENTO DE CODIGO # ############################# .text .globl main main: # LECTURA li $t8, li $s0, li $s1, la $a0, li $v0, syscall DE DATOS PARA LA MATRIZ 0 1 1 strTitle 4 # imprimir cadena

# MUESTRA MENSAJE DE INTRODUCCION DE DATOS loop1: la $a0, strIntro li $v0, 4 # imprimir cadena syscall # MUESTRA INDICE DEL ELEMENTO EN LA MATRIZ li $v0, 1 # imprimir entero move $a0,$s1 syscall li $v0, 1 move $a0,$s0 syscall addi $s0, 1 bne $s0, 5, rst2 rst1: li $s0, 1 addi $s1, 1 rst2: la $a0, strIntro2 li $v0, 4 syscall # LECTURA DE DATOS li $v0, 5 # leer entero syscall

# ALMACENA DATO EN MEMORIA sw $v0, matriz($t8) addi $t8, 4 blt $t8,64, loop1 li $s7,0 #VALOR INICIAL PARA LA SUMA # VALORES PARA EL PRIMER DETERMINANTE li $t8, 0 lw $t0, matriz($t8) li $t8, 20 lw $t1, matriz($t8) li $t8, 24 lw $t2, matriz($t8) li $t8, 28 lw $t3, matriz($t8) li $t8, 36 lw $t4, matriz($t8) li $t8, 40 lw $t5, matriz($t8) li $t8, 44 lw $t6, matriz($t8) li $t8, 52 lw $t7, matriz($t8) li $t8, 56 lw $t8, matriz($t8) li $t9, 60 lw $t9, matriz($t9) jal calculo # VALORES PARA EL SEGUNDO DETERMINANTE li $t8, 4 lw $t0, matriz($t8) li $t8, -1 mul $t0, $t0,$t8 li $t8, 16 lw $t1, matriz($t8) li $t8, 24 lw $t2, matriz($t8) li $t8, 28 lw $t3, matriz($t8) li $t8, 32 lw $t4, matriz($t8) li $t8, 40 lw $t5, matriz($t8) li $t8, 44 lw $t6, matriz($t8) li $t8, 48 lw $t7, matriz($t8) li $t8, 56 lw $t8, matriz($t8) li $t9, 60 lw $t9, matriz($t9) jal calculo

# VALORES PARA EL TERCER DETERMINANTE li $t8, 8 lw $t0, matriz($t8) li $t8, 16 lw $t1, matriz($t8) li $t8, 20 lw $t2, matriz($t8) li $t8, 28 lw $t3, matriz($t8) li $t8, 32 lw $t4, matriz($t8) li $t8, 36 lw $t5, matriz($t8) li $t8, 44 lw $t6, matriz($t8) li $t8, 48 lw $t7, matriz($t8) li $t8, 52 lw $t8, matriz($t8) li $t9, 60 lw $t9, matriz($t9) jal calculo # VALORES PARA EL CUARTO DETERMINANTE li $t8, 12 lw $t0, matriz($t8) li $t8, -1 mul $t0, $t0,$t8 li $t8, 16 lw $t1, matriz($t8) li $t8, 20 lw $t2, matriz($t8) li $t8, 24 lw $t3, matriz($t8) li $t8, 32 lw $t4, matriz($t8) li $t8, 36 lw $t5, matriz($t8) li $t8, 40 lw $t6, matriz($t8) li $t8, 48 lw $t7, matriz($t8) li $t8, 52 lw $t8, matriz($t8) li $t9, 56 lw $t9, matriz($t9) jal calculo # MOSTRAR EL RESULTADO la $a0, strDeter li $v0, 4 syscall li $v0,1 move $a0,$s7 syscall # FINALIZAR EL PROGRAMA li $v0, 10 syscall

# ================================== # SUBPROCEDIMIENTO DE CLCULO # DE CADA DETERMINANTE # ================================== calculo: mul $s0, $t1, $t5 mul $s0, $s0, $t9 mul $s1, $t2, $t6 mul $s1, $s1, $t7 mul $s2, $t4, $t8 mul $s2, $s2, $t3 mul $s3, $t7, $t5 mul $s3, $s3, $t3 mul $s4, $t8, $t6 mul $s4, $s4, $t1 mul $s5, $t4, $t2 mul $s5, $s5, $t9 add $s6, $s0, $s1 add $s6, $s6, $s2 sub $s6, $s6, $s3 sub $s6, $s6, $s4 sub $s6, $s6, $s5 mul $s6,$t0,$s6 add $s7,$s7,$s6 jr $ra;

Anda mungkin juga menyukai