All pastes #755545 Raw Edit

Someone

public text v1 · immutable
#755545 ·published 2007-10-30 19:30 UTC
rendered paste body
long double ** Simulador :: armarMatrizSimulacion(){
    atb = prodPorTraspuesta();
    ata = prodTraspuestas();
    unsigned ncuad = m->getTamanio()*m->getTamanio();
    long double ** matriz = new long double *[ncuad];
    for(int i = 0; i < anchoCuerpo*anchoCuerpo; i++) {
        matriz[i] = new long double [ncuad+1];
    }
    for(int i = 0; i < ncuad; i++) {
        for(int j = 0; j < ancuad; j++) {
            matriz[i][j] = ata[i][j];
        }
        matriz[i][ncuad] = b[i];
    }
    return matriz;
}

/* multiplica a traspuesta por a */
long double ** Simulador :: prodTraspuestas() {
    unsigned int filas = seniales->size();
    unsigned int columnas = m->getTamanio();
    long double ** m = new long double *[columnas];
    for(int i = 0; i < columnas; i++) {
        m[i] = new long double [columnas];
    }
    long double * aux = new long double[filas];
    
    for(int i = 0; i < columnas; i++) {
        /* "cacheamos" una columna para que la acceda linealmente sin dobles saltos */
        for(int t = 0; t < filas; t++){
            aux[t] = a[t][i];
          }
        for(int j = 0; j <= i; j++) {
            long double acum = 0;
            for(int k = 0; k < filas; k++) {
                acum = acum + aux[k]*a[k][j];
            }
            m[i][j] = acum;
            m[j][i] = acum;
        }
    }
    return m;
}

/* multiplica b por a^t */
long double * Simulador :: prodPorTraspuesta(int filas, int columnas) {
    unsigned int filas = seniales->size();
    unsigned int columnas = m->getTamanio();
    long double * d = new long double[columnas];
    for(int i = 0; i < columnas; i++) {

        long double acum = 0;
        for(int j = 0; j < filas; j++) {
            acum = acum + a[j][i]*b[j];
        }
        d[i] = acum;
    }
    return d;
}