Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 1 mensaje ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Jue Jun 17, 2010 5:23 am
Mensajes: 401
Ubicación: Venezuela

Nota Publicado: Sab Ago 28, 2010 4:04 am 
Arriba  
Bueno, trato de crear una clase Matriz muy sencilla para que se vea como es la implementación. Faltan muchas cosas como el constructor y destructor de la clase y, prácticamente, casi todas las funciones (sólo lo hice con la suma) que se pueden implementar con matrices pero este es el comienzo. El programa fuente lo compilé con:

Código:
g++ matriz.c++ -o matriz


y se ejecuta con:

Código:
./matriz


Aquí les dejo el *.zip con el *.c++, el *.h y el ejecutable.

Saludos

Editado -- Dom Jul 11, 2010 5:21 pm --

Bueno, ampliamos la clase ( MATRIZ0.1.zip). Ahora tiene más funciones; incluso se sobrecarga los operadores << y >> para la entrada y salida (también tiene resta, multiplicación de matrices, escalares x matrices; entre otros). También se incluye el constructor (ahora, cuando se inicializa una matriz esta lo hace con ceros en todos sus elementos; no con "basura") y destructor de la clase. Trataremos, en el futuro, de seguir generalizando.

Saludos

Editado -- Vie Jul 16, 2010 9:43 pm --

Estuve un buen tiempo tratando de implementar la inversa de una matriz dentro de la Clase hasta que, por fin, lo logré. Como es una sola función adicional la incluyo después; así como la generalización.

Saludos

Editado -- Vie Jul 23, 2010 9:24 am --

Bueno, no tengo por ahora mucho tiempo para dedicarle a esto pero como el tema lo publicaron en la portada hice un alto para añadir el cálculo de la inversa. El programa principal inicializa una matriz (a), calcula su inversa (b) y verifica que su producto (a*b) es la matriz identidad (c = a*b). Imprime cada matriz simplemente con la instrucción cout (el operador << está sobrecargado para ello). La clase se puede generalizar para matrices NxN (o MxN pero aquí habría que hacer una prueba de conformidad para multiplicación de matrices, etc) por lo que el orden habria que pasárselo como parámetro al interior de las funciones. Por qué no lo hice así al principio? Porque es más fácil depurar el código con matrices cuadradas pequeñas. La generalización debería ser más fácil (eso creo).

Saludos

Editado -- Dom Jul 25, 2010 12:58 am --

Gracias a nicky, descubrí esta funcionalidad de pastebin. Por ello, publico un link a código syntax higlithing:

matriz.c++

del programa principal. Fíjense que una vez declarados los objetos de la clase Matriz (a, b, c, el que quieran) y definidos sus procedimientos (asumimos que están bien pero sabemos que hay que mejorarlos), la multiplicación es tan natural como la de los tipos enteros o double. Para calcular el producto de a*b simplemente coloco c = a*b (sabemos que hay un algoritmo para ello pero está encapsulado en un procedimiento donde sobrecargamos el operador * de multiplicación). Para determinar la inversa usamos una función miembro de la clase (invermat(double **a)) y se la asignamos al objeto b: b.invermat(w). Después del c = a*b, simplemente desplegamos la matriz identidad con un cout << c.

Saludos

Editado -- Jue Jul 29, 2010 9:58 am --

Después de algún tiempo, he podido restituir las entradas a mi blog que contiene codigo C++ (la mayoría de ellos para Linux aunque el código es fácilmente portable, con muy ligeras modificaciones, porque se ajusta a los estándares) para resolver varios problemas de análisis numérico:

Codigo C++

Si tienen algún problema en la implementación de alguno de ellos agradecería que me lo comunicaran ya que fueron restituidas por copy/paste y detecté alguno que otro error.

Nota: Retiré el primer *.zip (MATRIZ0.1.zip) porque ya no tiene sentido mantenerlo. Dejaré siempre los dos últimos.

Saludos

Editado -- Jue Ago 26, 2010 7:12 pm --

Después de un tiempo dedicado a otras cosas, le puse un poco de empeño a esta Clase Matriz. Como bien sabemos, las matrices tienen filas y columnas que pueden ser diferentes. La antigua Clase Matriz sólo trataba con matrices cuadradas 3 x 3. Ahora si está generalizada (eso creo) a matrices MxN debido a que ahora si existe posibilidad de pasarle como parámetros el número de filas y colunnas de la matriz gracias a que se mejoró el constructor de la Clase. Eso también permite que los métodos y procedimientos expresados a través de las funciones miembro y amigas de la Clase puedan acceder a estos valores que antes se asumían de manera arbitraria en 3. Para probarlo, definí tres objetos para la multiplicación de matrices, mediante la sobrecarga del operador *, donde se incluye ahora un assert para verificar que las matrices son conformes, es decir, el número de columas de la primera matriz debe ser igual al número de filas de la segunda matriz para que la multiplicación tenga sentido. No incluí los procedimientos para la suma, resta, etc pero ya están en Matriz0.2 y sólo hay que generalizarlas adecuadamente (me imagino que el assert debe vericar ahora , por ejemplo para la suma, que ambas matrices sean iguales).

A continuación, incluyo la salida del programa y el adjunto Matriz0.3.zip.

Código:
Objeto a; Matriz a(3,3)
   1.00000   2.00000   3.00000
   2.00000   1.00000   4.00000
   3.00000   4.00000   1.00000

Objeto b; Matriz b(3,2)
   1.00000   2.00000
   2.00000   1.00000
   3.00000   4.00000

Objeto c(3,2) = a(3,3) * b(3,2)
  14.00000  16.00000
  16.00000  21.00000
  14.00000  14.00000


El resultado fue verificado con calc de Openoffice.org.

matriz.c++

Matriz.h

Saludos

Nota: Matriz0.3.zip tenía un pequeño error (un 2 adicional en el nombre de la cabecera de la Clase del programa principal que impediría su compilación). Ya fue corregido. Mis disculpas a los 9 que ya lo habían bajado.

Editado -- Vie Ago 27, 2010 6:33 pm --

Ya incluí una nueva versión que añade, entre otras, suma, resta y multiplicación de escalares con matrices y la inversión de matrices cuadradas. Ahora si puedo resolver sistemas lineales como pensé una vez sin necesidad de usar el método de Gauss-Jordan. Sólo sería posible de manera expedita mediante la implementación de una Clase Matriz.

Saludos

Editado -- Vie Ago 27, 2010 9:34 pm --

cerenkov escribió:
...Editado -- Vie Ago 27, 2010 6:33 pm --

... Ahora si puedo resolver sistemas lineales como pensé una vez sin necesidad de usar el método de Gauss-Jordan. Sólo sería posible de manera expedita mediante la implementación de una Clase Matriz...


Bueno, ya lo implementé aquí:

Resolución de sistemas lineales: Clase Matriz

Fue mucho más rápido que con el método de Gauss-Jordan.

Saludos


Adjuntos:
MATRIZ0.4.zip [8.26 KiB]
571 veces
MATRIZ0.3.zip [6.11 KiB]
362 veces
MATRIZ0.2.zip [7.77 KiB]
218 veces

_________________
[Reglamento del foro] [Blog]
 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 1 mensaje ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
Instanciar clase padre en clase hija (PHP) (SOLUCIONADO)

en Programación

greer

2

804

Sab Jul 13, 2013 1:28 am

greer Ver último mensaje

Acceder a un metodo en una clase desde otra clase

en Programación

adrianeric

7

5548

Mié Feb 23, 2011 9:21 pm

mcun Ver último mensaje

Inversa de una matriz NxN con C++

en Programación

cerenkov

2

7560

Sab Jul 03, 2010 4:35 am

cerenkov Ver último mensaje

Determinante de una matriz NxN con C++

en Programación

cerenkov

0

18788

Vie Jul 02, 2010 3:23 am

cerenkov Ver último mensaje

Matlab y contenido de la matriz

en Programación

farras84

5

1860

Vie Jun 12, 2009 9:14 am

fpuga Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO