📄 mmat_13.cc
字号:
// file: $isip/class/math/matrix/MMatrix/mmat_13.cc// version: $Id: mmat_13.cc,v 1.26 2002/03/05 15:15:19 gao Exp $//// isip include files//#include "MMatrix.h"#include "MMatrixDiagnose.h"//-----------------------------------------------------------------------------//// define the argument matrices// (nrows, ncols, elements)//// note: imaginary parts are in the second half of the array//-----------------------------------------------------------------------------double MMAT_ARG_MATRICES [MMAT_NUM_MATS_TOTAL] [MMAT_MAT_SIZE] = { // matrices with zero imaginary part // // A: a full 4x4 non-singular matrix // {4, 4, 3, 4, 7, 2, 3, 5, 6, 1, 8, 4, 1, 3, 4, 5, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // B: a diagonal 4x4 non-singular matrix // {4, 4, 5, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // C: a symmetric 4x4 non-singular matrix // {4, 4, 5, 2, 3, 4, 2, 7, 6, 1, 3, 6, 8, 3, 4, 1, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // D: a lower triangular 4x4 non-singular matrix // {4, 4, 5, 0, 0, 0, 2, 2, 0, 0, 3, 6, 3, 0, 4, 6, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // E: a upper triangular 4x4 non-singular matrix // {4, 4, 5, 2, 3, 4, 0, 2, 6, 6, 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // F: a full 4x4 singular matrix // {4, 4, 3, 4, 3, 2, 5, 7, 8, 6, 9, 12, 9, 6, 15, 14, 24, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // G: a full 4x2 matrix // {4, 2, 4, 5, 7, 2, 3, 9, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // H: a full 2x4 matrix // {2, 4, 4, 7, 3, 2, 5, 2, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // matrices with non-zero imaginary part // // I: a full 4x4 non-singular matrix // {4, 4, 2, 9, 1, 4, 3, 5, 8, 1, 8, 4, 9, 3, 4, 8, 7, 2, 4, 5, 1, 6, 7, 9, 5, 3, 5, 6, 4, 4, 3, 5, 2, 8}, // J: a diagonal 4x4 non-singular matrix // {4, 4, 9, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 3}, // K: a symmetric 4x4 non-singular matrix // {4, 4, 2, 7, 1, 3, 7, 5, 2, 4, 1, 2, 7, 9, 3, 4, 9, 6, 1, 3, 5, 2, 3, 7, 4, 1, 5, 4, 3, 6, 2, 1, 6, 2}, // L: a lower triangular 4x4 non-singular matrix // {4, 4, 2, 0, 0, 0, 4, 1, 0, 0, 6, 7, 9, 0, 4, 2, 3, 8, 6, 0, 0, 0, 9, 4, 0, 0, 6, 6, 1, 0, 8, 9, 3, 1}, // M: a upper triangular 4x4 non-singular matrix // {4, 4, 8, 9, 1, 9, 0, 9, 3, 5, 0, 0, 2, 8, 0, 0, 0, 4, 3, 7, 5, 6, 0, 6, 3, 7, 0, 0, 3, 8, 0, 0, 0, 1}, // N: a full 4x4 singular matrix // {4, 4, 2, 6, 4, 6, 3, 8, 3, 9, 1, 6, 6, 3, 1, 3, 2, 3, 4, 6, 6, 8, 8, 1, 5, 8, 6, 3, 1, 4, 2, 3, 3, 4}, // O: a full 4x2 matrix // {4, 2, 7, 1, 6, 2, 6, 3, 2, 8, 8, 6, 3, 3, 6, 8, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // P: a full 2x4 matrix // {2, 4, 8, 4, 2, 3, 1, 6, 2, 8, 6, 3, 3, 1, 2, 7, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},};//-----------------------------------------------------------------------------//// define types of the argument matrices////-----------------------------------------------------------------------------Integral::MTYPE MMAT_ARG_MAT_TYPES [MMAT_NUM_MATS_TOTAL] = { // matrices with zero imaginary part // // A: a full 4x4 non-singular matrix // Integral::FULL, // B: a diagonal 4x4 non-singular matrix // Integral::DIAGONAL, // C: a symmetric 4x4 non-singular matrix // Integral::SYMMETRIC, // D: a lower triangular 4x4 non-singular matrix // Integral::LOWER_TRIANGULAR, // E: a upper triangular 4x4 non-singular matrix // Integral::UPPER_TRIANGULAR, // F: a full 4x4 singular matrix // Integral::FULL, // G: a full 4x2 matrix // Integral::FULL, // H: a full 2x4 matrix // Integral::FULL, // matrices with non-zero imaginary part // // I: a full 4x4 non-singular matrix // Integral::FULL, // J: a diagonal 4x4 non-singular matrix // Integral::DIAGONAL, // K: a symmetric 4x4 non-singular matrix // Integral::SYMMETRIC, // L: a lower triangular 4x4 non-singular matrix // Integral::LOWER_TRIANGULAR, // M: a upper triangular 4x4 non-singular matrix // Integral::UPPER_TRIANGULAR, // N: a full 4x4 singular matrix // Integral::FULL, // O: a full 4x2 matrix // Integral::FULL, // P: a full 2x4 matrix // Integral::FULL,};//-----------------------------------------------------------------------------//// define the results of operations:// F(matrix, scalar) -> scalar////-----------------------------------------------------------------------------// is the type possible?//boolean MMAT_IS_TYPE_POSSIBLE_RES [MMAT_NUM_MATS_TOTAL] [MMAT_NUM_TYPES] = { // can A be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, false, true}, // can B be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, true, true, true, true, true}, // can C be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, true, false, false, true}, // can D be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGL, UPPER_TRIANGLEE ? // {true, false, false, true, false, true}, // can E be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, true, true}, // can F be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, false, true}, // can G be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, false, true}, // can H be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, false, true}, // can I be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, false, true}, // can J be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, true, true, true, true, true}, // can K be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, true, false, false, true}, // can L be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGL, UPPER_TRIANGLEE ? // {true, false, false, true, false, true}, // can M be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, true, true}, // can N be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, false, true}, // can O be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, false, true}, // can P be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE ? // {true, false, false, false, false, true}};// is the matrix diagonal?//boolean MMAT_IS_DIAGONAL_RES [MMAT_NUM_MATS_TOTAL] = { // can A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P be a DIAG? // false, true, false, false, false, false, false, false, false, true, false, false, false, false, false, false};// is the matrx symmetric?//boolean MMAT_IS_SYMMETRIC_RES [MMAT_NUM_MATS_TOTAL] = { // can A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P be a SYMMETRIC? // false, true, true, false, false, false, false, false, false, true, true, false, false, false, false, false};// is the matrix singular?//boolean MMAT_IS_SINGULAR_RES[MMAT_NUM_MATS_TOTAL] = { // is A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P square? // false, false, false, false, false, true, false, false, false, false, false, false, false, true, false, false};// is the matrix lower_triangle?//boolean MMAT_IS_LOWERTRIANGULAR_RES [MMAT_NUM_MATS_TOTAL] = { // can A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P be a LOWER_TRIANGLE? // false, true, false, true, false, false, false, false, false, true, false, true, false, false, false, false};// is the matrix upper_triangle?//boolean MMAT_IS_UPPERTRIANGULAR_RES [MMAT_NUM_MATS_TOTAL] = { // can A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P be a UPPER_TRIANGLE? // false, true, false, false, true, false, false, false, false, true, false, false, true, false, false, false};double MMAT_IDENTITY_MATRICES [MMAT_MAT_SIZE] = { // a full 4x4 identity matrix // 4, 4, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};double MMAT_ORTHOGONAL_MATRICES [MMAT_MAT_SIZE] = { // a full 4x4 orthogonal matrix // 4, 4, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};// is the type possible?//boolean MMAT_CHANGE_TYPE_RES [MMAT_NUM_MATS_TOTAL] [MMAT_NUM_TYPES] = { // can A be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, false, true}, // can B be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, true, true, true, true, true}, // can C be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGL, UPPER_TRIANGLEE, SPARSE ? // {true, false, true, false, false, true}, // can D be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, true, false, true}, // can E be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, true, true}, // can F be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, true, true}, // can G be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, false, true}, // can H be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, false, true}, // can I be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, false, true}, // can J be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, true, true, true, true, true}, // can K be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGL, UPPER_TRIANGLEE, SPARSE ? // {true, false, true, false, false, true}, // can L be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, true, false, true}, // can M be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, true, true}, // can N be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, true, true}, // can O be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, false, true}, // can P be a FULL, DIAG, SYMMETRIC, LOWER_TRIANGLE, UPPER_TRIANGLE, SPARSE ? // {true, false, false, false, false, true},};// test nextZero result//double MMAT_NEXT_ZERO_ARG[MMAT_NEXT_ZERO_SIZE] = { // start position // 1, 0,};double MMAT_NEXT_ZERO_RES[MMAT_NUM_MATS_TOTAL * 2] = { // A, row and column index // -1, -1, // B, row and column index // 1, 2, // C, row and column index // -1, -1, // D, row and column index // 1, 2, // E, row and column index // 2, 0, // F, row and column index // -1, -1, // G, row and column index // -1, -1, // H, row and column index // -1, -1, // I, row and column index // -1, -1, // J, row and column index // 1, 2, // K, row and column index // -1, -1, // L, row and column index // 1, 2, // M, row and column index // 2, 0, // N, row and column index // -1, -1, // O, row and column index // -1, -1, // P, row and column index // -1, -1,};// test nextNonZero result//double MMAT_NEXT_NONZERO_ARG[MMAT_NEXT_NONZERO_SIZE] = { // start position // 1, 1,};double MMAT_NEXT_NONZERO_RES[MMAT_NUM_MATS_TOTAL * 4] = { // A // 6, 1, 2, 0, // B // 3, 2, 2, 0, // C // 6, 1, 2, 0, // D // 3, 2, 0, 0, // E // 6, 1, 2, 0, // F // 8, 1, 2, 0, // G // 3, 2, 0, 0, // H // 9, 1, 2, 0, // I // 8, 1, 2, 5, // J // 1, 2, 2, 5, // K // 2, 1, 2, 4, // L // 6, 2, 0, 6, // M // 3, 1, 2, 3, // N // 3, 1, 2, 5,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -