[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