Get the diagonal or N-th diagonal of this matrix.
int GetDiagonal( vectorbase & vbDiagonal, int nNthDiagonal = 0 )
Returns 0 on success and a non-zero error code on failure.
EX1
void matrixbase_GetDiagonal_ex1() { int ii,jj; matrix<double> mat1 = { { 0, 1, 99, 1, 1}, { 1, 99, 1, 1, 1}, {99, 1, 0, 1, 1} }; for(ii=0; ii<3; ii++) for(jj=0; jj<5; jj++) if(mat1[ii][jj]==99) mat1[ii][jj]=NANUM; vector vR; int rc = mat1.GetDiagonal(vR); if(rc!=0) printf("Error: GetDiagonal failed. rc=%d\n", rc); else{ for(int ii = 0; ii < vR.GetSize(); ii++) printf("\t%g",vR[ii]); } }
EX2
// Get the diagonal of a matrix, and put it into a vector void matrixbase_GetDiagonal_ex2() { int ii,jj; matrix<double> mat1 = { { 0, 1, 99, 1, 1}, { 1, 99, 1, 1, 1}, {99, 1, 0, 1, 1} }; for(ii=0; ii<3; ii++) for(jj=0; jj<5; jj++) if(mat1[ii][jj]==99) mat1[ii][jj]=NANUM; // set row=ii,col=jj to NANUM // Input matrix is: // { 0, 1, --, 1, 1} // { 1, --, 1, 1, 1} // {--, 1, 0, 1, 1} // Output diagonal vector is: // { 0, --, 0} MatrixPage MatPg1; MatPg1.Create("Origin"); MatrixLayer MatLy1 = MatPg1.Layers(0); Matrix Mat1(MatLy1); Mat1 = mat1; printf(" Input matrix is %s.\n",Mat1.GetName()); MatrixPage MatPg2; MatPg2.Create("Origin"); MatrixLayer MatLy2 = MatPg2.Layers(0); Matrix Mat2(MatLy2); vector vec1; int rc=Mat1.GetDiagonal(vec1); //Put the upper triangular matrix of Mat1 to Mat2 if(rc!=0) printf(" Error: GetDiagonal failed. Error Code=%d\n",rc); else { Mat2.SetSize(1,vec1.GetSize()); Mat2.SetRow(vec1, 0); // Set 2nd Row(as the index starts 0) of Mat2 printf(" Vector from the diagonal is placed in %s.\n",Mat2.GetName()); printf(" Note that the NANUM value in the diagonal is preserved,\n"); } MatrixPage MatPg3; MatPg3.Create("Origin"); MatrixLayer MatLy3 = MatPg3.Layers(0); Matrix Mat3(MatLy3); vector vec2; rc=Mat1.GetDiagonal(vec2,-1); //Get the 1th diagonal below the main diagonal if(rc!=0) printf(" Error: GetDiagonal failed. Error Code=%d\n",rc); else { Mat3.SetSize(1,vec2.GetSize()); Mat3.SetRow(vec2, 0); printf(" Vector from the diagonal is placed in %s.\n",Mat3.GetName()); printf(" Note that the NANUM value in the diagonal is preserved,\n"); } }
Get the diagonal or N-th diagonal of this matrix and place the result in a vector. The result vector and this matrix must have the same underlying base type or a run time error will be generated.
matrixbase::SetDiagonal, matrixbase::GetLowerTriangular, matrixbase::GetUpperTriangular, matrixbase::MakeIdentity
origin.h