Autor Tema: Problemas manejando matrices  (Leído 954 veces)

juansrx

  • Newbie
  • *
  • Mensajes: 22
  • Karma: 6
Problemas manejando matrices
« en: Junio 05, 2012, 11:41:35 pm »
Buenas Tardes


Como sabrán estoy trabajando en un conjunto de librerias para manejar algebra lineal, ahora, estoy escribiendo la parte encargada de manejar matrices. Lo primero fue implementar la suma de matrices.


El programa de prueba se ve mas o menos asi:


Código: [Seleccionar]



/*
* test_blvector.prg
*/


import "mod_key";
import "mod_text";
import "mod_video";


include "BLMatrix.h";


global
   //Vectores en R3 para probar
   float tabla1[2][2]=1,2,3,4, 5, 6, 7, 8, 9;
   float tabla2[2][2]=20,21,22,23, 24, 25, 26, 27, 28;
   float tabla3[2][2]=0.0,0.0,0.0,0.0,0.0,0.0, 0.0, 0.0, 0.0;


end


process main()


private


   int i, j;
   float var;


end


begin


   set_mode(640, 480, 8);
   
   BLMatrix_Add(&tabla1, &tabla2, &tabla3, 3, 3);
   while(!key(_esc))
   
      //Suma de vectores
     
     
      for(i = 0; i < 3; ++i)
     for(j = 0; j < 3; ++j)
            write(0,80*(j+1),20*(i+1),4,tabla3[i][j]);   
end
      end
 
      frame;
   
   end


end





Y la libreria BLMatrix.h define la función suma de la siguiente manera:


Código: [Seleccionar]



#ifndef BLMATRIX_H
#define BLMATRIX_H


#include "BLVector.h"


/*
 * BLMatrix_Add(float pointer m1, float pointer m2, float pointer m3, int n, int m)
 * Calcula la matriz resultante de la suma de las matrices m1 y m2 en Mnxm, asumiendo
 * que ambas tengan el mismo tamaño. y almacena el resultado en la matriz m3.
 *
 * Parametros:
 * float pointer m1 : matriz en Mnxm que representa el primer sumando
 * float pointer m2 : matriz en Mnxm que representa el segundo sumando
 * float pointer m2 : matriz en Mnxm donde se almacena el resultado
 * int n : cantidad de filas de m1 y m2.
 * int m : cantidad de columnas de m1 y m2
 *
 * Valor de Retorno:
 * Ninguno.
*/


function BLMatrix_Add(float pointer m1, float pointer m2, float pointer m3, int n, int m)
private


   int i; //Indice...
   
end


begin
     
   //La suma se hara a nivel de filas, por medio de la suma vectorial.
   for(i = 0; i < n; ++i)
     
      BLVector_Add(&m1[i], &m2[i], &m3[i], m);
       
   end
   
end


#endif




Que significa que se va sumando por filas y calculando el resultado por filas por medio de la funcion BLVector_Add() de BLVector.h (reutlizar, reutilizar, reutlizar...). Esta función esta dada de la siguiente manera:




Código: [Seleccionar]



/*
 * BLVector_Add(float pointer v1, float pointer v2, float pointer v3, int n)
 * Calcula el vector resultante de la suma de los vectores v1 y v2 en Rn, asumiendo que ambos
 * tengan el mismo tamaño. y almacena el resultado en el vector s3.
 *
 * Parametros:
 * float pointer v1 : vector en Rn que representa el primer sumando
 * float pointer v2 : vector en Rn que representa el segundo sumando
 * float pointer v2 : vector en Rn donde se almacena el resultado
 * int n : Dimension de ambos vectores
 *
 * Valor de Retorno:
 * Ninguno.
*/


function BLVector_Add(float pointer v1, float pointer v2, float pointer v3, int n)
private


   int i; //Indice...
   
end


begin
     
   //Se hace suma componenete por componente del vector.
   for(i = 0; i < n; ++i)
     
      v3[i] = v1[i] + v2[i];
   
   end
   
end


Lo que pasa, es que al imprimir el resultado, veo que las primeras posiciones las suma bien, pero a partir de cierta posición no asigna el resultado de la suma (posiciones de tabla3 que siguen siendo 0), he tratado de alterar el manejo de los indices, recorridos, etc, y al parecer no estoy manejando adecuadamente las referencias a las filas de la tabla (el recorrido en BLMatrix_Add pareciera que se "saltara" posiciones o algo así), pero no he podido descifrar cual es el problema.


Si alguien sabe que debo hacer, que estoy haciendo mal,  o si tiene algún enlace o guía de como manejar matrices a través de funciones, o como puedo hacer que este esquema funcione, cualquier ayuda por mínima que sea será bienvenida.


Muchas Gracias.