Set the diagonal or N-th diagonal of this matrix.
int SetDiagonal( vectorbase & vbDiagonal, int nNthDiagonal = 0 )
Returns 0 on success or a non-zero error code on failure.
EX1
// Set a vector to the diagonal of a matrix void matrixbase_SetDiagonal_ex1() { int rc, ii,jj; matrix<double> mat1 = { { 2, 1, 99, 1, 1}, { 1, 99, 1, 1, 1}, {99, 1, 2, 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: // { 2, 1, --, 1, 1} // { 1, --, 1, 1, 1} // {--, 1, 2, 1, 1} vector vec1 = {1, 1, 1}; //Vector for the diagonal of the output matrix // Output matrix with all 1s at the diagonal: // {1, 0, 0} // {0, 1, 0} // {0, 0, 1} 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); Mat2=mat1; rc=Mat2.SetDiagonal(vec1); //Put 1s into the diagonal of Mat2 if(rc!=0) printf(" Error: SetDiagonal failed. Error Code=%d\n",rc); else { printf(" Output matrix with 1s at the diagonal is %s.\n",Mat2.GetName()); printf(" Note that the output matrix is a square matrix.\n"); printf(" Note that all cells in the non-diagonal area became 0s.\n"); } }
Set the diagonal or N-th diagonal of this matrix from a vector and set all other elements to 0. The source vector and this matrix must have the same underlying base type or a run time error will be generated.
matrixbase::GetDiagonal, matrixbase::GetLowerTriangular, matrixbase::GetUpperTriangular, matrixbase::MakeIdentity
origin.h