matrixbase::DotPower

Description

Raise this matrix to the power of another matrix.

Syntax

BOOL DotPower( matrixbase & mb )

Parameters

mb
[input] matrix to which this matrix is raised (the exponents)

Return

Returns TRUE on success and FALSE on Failure.

Examples

EX1

// Element-wise power calculation of two matrices
void matrixbase_DotPower_ex1()
{
    BOOL rc;
    int ii,jj;
    
    matrix<double> mat1 = {
        {-2, 99,  0,  2},
        {-2, 99,  0,  2},
        {-2, 99,  0,  2},
        {-2, 99,  0,  2},
        {-2, -2,  2,  2}
    };

    matrix<double> mat2 = {
        {-2,  99,  0,  2},
        { 2,  -2, 99,  0},
        { 0,   2, -2, 99},
        {99,   0,  2, -2},
        {-.5, .5,-.5, .5}
    };
    for(ii=0; ii<5; ii++)
        for(jj=0; jj<4; jj++) {
            if(mat1[ii][jj]==99)
                mat1[ii][jj]=NANUM;  // set row=ii,col=jj to NANUM
            if(mat2[ii][jj]==99)
                mat2[ii][jj]=NANUM;  // set row=ii,col=jj to NANUM
            }

    MatrixPage MatPg1;
    MatPg1.Create("Origin");
    MatrixLayer MatLy1 = MatPg1.Layers(0);
    Matrix Mat1(MatLy1);
    Mat1 = mat1; //matrix to raise
    printf("  The original matrix is %s.\n",Mat1.GetName());
    
    MatrixPage MatPg2;
    MatPg2.Create("Origin");
    MatrixLayer MatLy2 = MatPg2.Layers(0);
    Matrix Mat2(MatLy2);
    Mat2 = mat2;  // matrix to be raised
    
    MatrixPage MatPg3;
    MatPg3.Create("Origin");
    MatrixLayer MatLy3 = MatPg3.Layers(0);
    Matrix Mat3(MatLy3);
    Mat3 = mat1; //matrix for result
    rc=Mat3.DotPower( mat2 );  // Power mat2 to mat1
    if(!rc) 
        printf("  Error: DotPower on %s by %s failed.\n",
          Mat2.GetName(),Mat3.GetName());
    else
    {
        printf("  The result of %s^%s is %s.\n",
          Mat1.GetName(),Mat2.GetName(),Mat3.GetName());
        printf("  Note that a missing value raising results a missing.\n");
        printf("  Note that a missing value being raised results a missing.\n");

    }
}

Remark

Raise this matrix to the power of another matrix on an element by element basis placing the result in this matrix. The underlying base type of the matrix passed as an argument must be "less than or equal" to the underlying base type of this matrix. The matrices must have the same size.

Note

The following is a summary of various matrix operations:

1) Multiplication:

1-1) * ... Proper multiplication of 2 matrices (mat1*mat2)

1-2) * ... Scaler multiplication of a matrix (mat1*A or A*mat1)

1-3) DotMultiply ... Element-wise multiplication of 2 matrices

1-4) Cross ... Cross product of 2 matrices

1-5) CumulativeProduct ... cumulative product of a matrix

2) Division:

2-1) / ... Not defined for 2 matrices. For proper division, multiply Inverse(mat1)

2-2) / ... Scaler division of a matrix (mat1/A)

2-3) DotDivide ... Element-wise division of 2 matrices

3) Addition:

3-1) + ... Element-wise addition of 2 matrices

3-2) + ... Scaler addition of a matrix (mat1+A or A+mat1)

3-3) SumColumns ... Summation of each column in a matrix

3-4) CumulativeSum ... Cumulative product of a matrix

4) Subtraction:

4-1) - ... Element-wise subtraction of 2 matrices

4-2) - ... Scaler subtraction of a matrix (mat1-A or A-mat1)

4-3) Difference ... Difference of adjacent 2 rows in a matrix (1st order differential)

5) Power:

5-1) ^ (or pow) ... Not defined as element-wise power of 2 matrices

5-2) ^ (or pow) ... Not defined as scaler power of a matrix

5-3) DotPower ... Element-wise power of 2 matrices

See Also

matrixbase::DotDivide, matrixbase::DotMultiply, matrixbase::Cross

header to Include

origin.h