Ejemplo n.º 1
0
Archivo: jacobi.c Proyecto: Egor-mn/NSU
double getResidualNorm(int id, matrix a, vector x, vector y, double c, int size) {
    vector v1, v2;
    multiplyMatrixVector(a, x, size, v1);
    multiplyVectorConst(y, c, size);
    subVectors(v1, y, size, v2);
    return getVectorNorm(id, v2, size);
}
Ejemplo n.º 2
0
CMatrix::MatrixError_t CMatrix::normalize_I( ActionAppliedTo_t eActionArea /*= kAll*/, int p /*= 1*/ )
{
    float fNorm;
    
    if (eActionArea == kAll)
    {
        fNorm   = getNorm(p);

        if (fNorm <= 0)
            return kMatrixNoError;

        for (int i = 0; i < m_aiMatrixDimensions[kRow]; i++)
            CUtil::mulBuffC(m_ppfMatrix[i], 1.F/fNorm, m_aiMatrixDimensions[kCol]);
    }
    else if (eActionArea == kRow)
    {
        for (int i = 0; i < m_aiMatrixDimensions[kRow]; i++)
        {
            fNorm   = getVectorNorm(i,-1,p);
            if (fNorm <= 0)
                return kMatrixNoError;

            CUtil::mulBuffC(m_ppfMatrix[i], 1.F/fNorm, m_aiMatrixDimensions[kCol]);
        }
    }
    else if (eActionArea == kCol)
    {
        for (int j = 0; j < m_aiMatrixDimensions[kCol]; j++)
        {
            fNorm   = getVectorNorm(-1,j,p);
            if (fNorm <= 0)
                return kMatrixNoError;

            for (int i = 0; i < m_aiMatrixDimensions[kRow]; i++)
                m_ppfMatrix[i][j]  /= fNorm;
        }
    }

    return kMatrixNoError;
}
Ejemplo n.º 3
0
float CMatrix::getNorm( int p /*= 1*/ ) const
{
    if (p<=0)
        return -1;

    float fResult = 0;

    if (p==1)
    {
        for (int j = 0; j < m_aiMatrixDimensions[kCol]; j++)
        {
            float fTmp = getVectorNorm(-1,j,p);
            //for (int i = 0; i < m_aiMatrixDimensions[kRow]; i++)
            //    fTmp += abs(m_ppfMatrix[i][j]);

            if (fTmp > fResult)
                fResult = fTmp;
        }
    }
    else if (p == 2)
    {
        for (int i = 0; i < m_aiMatrixDimensions[kRow]; i++)
        {
            //float fTmp  = getVectorNorm(i,-1,p);
            //fResult    += fTmp * fTmp;
            fResult += CUtil::mulBuffScalar(m_ppfMatrix[i], m_ppfMatrix[i], m_aiMatrixDimensions[kCol]);
        }

        fResult = sqrt(fResult);
    }
    else
    {
        for (int i = 0; i < m_aiMatrixDimensions[kRow]; i++)
            for (int j = 0; j < m_aiMatrixDimensions[kCol]; j++)
                fResult += pow(m_ppfMatrix[i][j], 1.F*p);

        fResult = pow(fResult, 1.F/p);
    }

    return fResult;
}
Ejemplo n.º 4
0
float CMatrix::getColNorm( int iCol, int p /*= 1*/ ) const
{
    return getVectorNorm(-1, iCol, p);
}
Ejemplo n.º 5
0
float CMatrix::getRowNorm( int iRow, int p /*= 1*/ ) const
{
    return getVectorNorm(iRow, -1, p);
}