[C con Clase] Parametros por defecto correlados

Steven Davidson srd4121 en njit.edu
Mie Mar 18 18:39:07 CET 2009


Hola Vicente,

vicente lozano wrote:
> Hola,
> 
> Estoy intentando hacer esta funcion:
> 
> Matrix(int rows, int cols=rows, double value=0)
> 
> dentro de la clase Matrix como constructor polivalente que
> funcionaria asi:
> 
> Matrix m(n); // Crea una matriz cuadrada nxn rellenada con 0's
> 
> Matrix m(n,m); //Crea una matriz NxM rellenada con 0's
> 
> Matrix m(n,m,valor); // Crea una matriz NxM rellenada con 0's
> 
> Esto se puede hacer asi de algun modo o tengo que crear varios 
> constructores?
> 

En general, esto debería funcionar sin problemas. Sin embargo, este 
ejemplo sí tiene un problema, ya que usas 'm' tanto para el nombre del 
objeto como para el segundo parámetro. No sé si es un fallo al escribir 
el ejemplo. El ejemplo corregido sería:

Matrix obj1( n );

Matrix obj2( n, m );

Matrix obj3( n, m, valor );

> Lo ideal seria poder llamarla como
> 
> sqrmatrix(4, valor), sqrmatrix(4), matrix(4,2), matrix(4,2,value)
> 
> Pero siendo constructor solo puedo usar un nombre asi que creo que la
> unica opcion es hacer una subclase matriz cuadrada o limitar los 
> constructores a matrices nxm y luego usar funciones que inicialicen
> las cuadradas, no se, yo creo que lo mejor es lo de la subclase, que
> pensais vosotros?
> 

Bien. Lo que quieres hacer ahora es tener dos tipos de matrices: 
cuadradas (n x n) y "no cuadradas" (n x m). Si quieres hacer esto, 
entonces sugiero crear una clase derivada para representar una matriz 
cuadrada. La jerarquía será la siguiente:

class Matrix  {...};
class SqrMatrix : public Matrix  {...};

> De paso si alguien tiene por ahi metodos numericos para calcular 
> determinantes, valores propios, factorizaciones LU y toda la pesca, 
> agradeceria me los pasara o me indicara algun link, porque yo lo
> tengo pero en Espanya y no bajo hasta dentro de un mesecillo o asi.
> 

No tengo nada preparado para enviarte, pero te daré algunas pistas, para:
1. Determinantes suelo basarme en cofactores.
2. Valores propios (o eigenvalores) para una matriz, puedes usar la 
descomposición QR.
3. Factorización LU ya es en sí un algoritmo establecido.

Estoy seguro que puedes conseguir información en internet para estos 
temas. Por ejemplo,

1. http://es.wikipedia.org/wiki/Determinante_(matem%C3%A1tica)
2. http://es.wikipedia.org/wiki/Descomposici%C3%B3n_QR
3. http://es.wikipedia.org/wiki/Descomposici%C3%B3n_LU


Espero que todo esto te ayude.

Steven





Más información sobre la lista de distribución Cconclase