#include "TMV_Test.h" #include "TMV_Test_1.h" #include "TMV.h" #define NOELEMMULT #include "TMV_TestMatrixArith.h" template void TestTriMatrixArith_B4a() { typedef std::complex CT; tmv::Matrix a1x(4,4); for(int i=0;i<4;++i) for(int j=0;j<4;++j) { a1x(i,j) = T(3+4*i-6*j); } a1x(0,0) = 14; a1x(1,0) = -2; a1x(2,0) = 7; a1x(3,0) = -10; a1x(2,2) = 30; tmv::Matrix ca1x = a1x; ca1x(2,3) += CT(2,3); ca1x(1,0) *= CT(0,2); ca1x.col(1) *= CT(-1,3); ca1x.row(3) += tmv::Vector(4,CT(1,9)); tmv::Matrix a2x = a1x.transpose(); a2x.row(1) *= T(3); a2x.col(2) -= tmv::Vector(4,4); tmv::Matrix ca2x = ca1x; ca2x -= a2x; ca2x *= CT(1,-2); ca2x(0,0) = CT(0,-5); tmv::UpperTriMatrixView u1 = a1x.upperTri(); tmv::UpperTriMatrixView cu1 = ca1x.upperTri(); tmv::UpperTriMatrixView u2 = a2x.upperTri(); tmv::UpperTriMatrixView cu2 = ca2x.upperTri(); tmv::UpperTriMatrixView u4 = a1x.unitUpperTri(); tmv::UpperTriMatrixView cu4 = ca1x.unitUpperTri(); tmv::UpperTriMatrixView u5 = a2x.unitUpperTri(); tmv::UpperTriMatrixView cu5 = ca2x.unitUpperTri(); tmv::MatrixView a1 = a1x.view(); tmv::MatrixView ca1 = ca1x.view(); tmv::MatrixView a2 = a2x.view(); tmv::MatrixView ca2 = ca2x.view(); TestMatrixArith4(a1,ca1,u1,cu1,"Square/UpperTri 1"); TestMatrixArith4(a1,ca1,u2,cu2,"Square/UpperTri 2"); TestMatrixArith4(a1,ca1,u4,cu4,"Square/UpperTri 3"); TestMatrixArith4(a1,ca1,u5,cu5,"Square/UpperTri 4"); TestMatrixArith4(a2,ca2,u1,cu1,"Square/UpperTri 5"); #if (XTEST & 2) TestMatrixArith4(a2,ca2,u2,cu2,"Square/UpperTri 6"); TestMatrixArith4(a2,ca2,u4,cu4,"Square/UpperTri 7"); TestMatrixArith4(a2,ca2,u5,cu5,"Square/UpperTri 8"); #endif #if (XTEST & 1) tmv::Matrix a3x(12,16); for(int i=0;i<12;++i) for(int j=0;j<16;++j) a3x(i,j) = T(1-2*i+3*j); a3x.diag().addToAll(30); tmv::Matrix ca3x = a3x*CT(1,-2); ca3x.diag().addToAll(CT(-22,15)); tmv::UpperTriMatrixView u3 = a3x.subMatrix(0,12,0,16,3,4).upperTri(); tmv::UpperTriMatrixView cu3 = ca3x.subMatrix(0,12,0,16,3,4).upperTri(); tmv::UpperTriMatrixView u6 = a3x.subMatrix(0,12,0,16,3,4).unitUpperTri(); tmv::UpperTriMatrixView cu6 = ca3x.subMatrix(0,12,0,16,3,4).unitUpperTri(); tmv::MatrixView a3 = a3x.view(); tmv::MatrixView ca3 = ca3x.view(); TestMatrixArith4(a3,ca3,u1,cu1,"Square/UpperTri 9"); TestMatrixArith4(a3,ca3,u2,cu2,"Square/UpperTri 10"); TestMatrixArith4(a3,ca3,u3,cu3,"Square/UpperTri 11"); TestMatrixArith4(a3,ca3,u4,cu4,"Square/UpperTri 12"); TestMatrixArith4(a3,ca3,u5,cu5,"Square/UpperTri 13"); TestMatrixArith4(a3,ca3,u6,cu6,"Square/UpperTri 14"); TestMatrixArith4(a1,ca1,u3,cu3,"Square/UpperTri 15"); TestMatrixArith4(a2,ca2,u3,cu3,"Square/UpperTri 16"); TestMatrixArith4(a1,ca1,u6,cu6,"Square/UpperTri 17"); TestMatrixArith4(a2,ca2,u6,cu6,"Square/UpperTri 18"); #endif tmv::LowerTriMatrixView l1 = a1x.lowerTri(); tmv::LowerTriMatrixView cl1 = ca1x.lowerTri(); tmv::LowerTriMatrixView l2 = a2x.lowerTri(); tmv::LowerTriMatrixView cl2 = ca2x.lowerTri(); tmv::LowerTriMatrixView l4 = a1x.unitLowerTri(); tmv::LowerTriMatrixView cl4 = ca1x.unitLowerTri(); tmv::LowerTriMatrixView l5 = a2x.unitLowerTri(); tmv::LowerTriMatrixView cl5 = ca2x.unitLowerTri(); TestMatrixArith4(a1,ca1,l1,cl1,"Square/LowerTri 1"); TestMatrixArith4(a1,ca1,l2,cl2,"Square/LowerTri 2"); TestMatrixArith4(a1,ca1,l4,cl4,"Square/LowerTri 3"); TestMatrixArith4(a1,ca1,l5,cl5,"Square/LowerTri 4"); #if (XTEST & 2) TestMatrixArith4(a2,ca2,l1,cl1,"Square/LowerTri 5"); TestMatrixArith4(a2,ca2,l2,cl2,"Square/LowerTri 6"); TestMatrixArith4(a2,ca2,l4,cl4,"Square/LowerTri 7"); TestMatrixArith4(a2,ca2,l5,cl5,"Square/LowerTri 8"); #endif #if (XTEST & 1) tmv::LowerTriMatrixView l3 = a3x.subMatrix(0,12,0,16,3,4).lowerTri(); tmv::LowerTriMatrixView cl3 = ca3x.subMatrix(0,12,0,16,3,4).lowerTri(); tmv::LowerTriMatrixView l6 = a3x.subMatrix(0,12,0,16,3,4).unitLowerTri(); tmv::LowerTriMatrixView cl6 = ca3x.subMatrix(0,12,0,16,3,4).unitLowerTri(); TestMatrixArith4(a3,ca3,l1,cl1,"Square/LowerTri 9"); TestMatrixArith4(a3,ca3,l2,cl2,"Square/LowerTri 10"); TestMatrixArith4(a3,ca3,l3,cl3,"Square/LowerTri 11"); TestMatrixArith4(a3,ca3,l4,cl4,"Square/LowerTri 12"); TestMatrixArith4(a3,ca3,l5,cl5,"Square/LowerTri 13"); TestMatrixArith4(a3,ca3,l6,cl6,"Square/LowerTri 14"); TestMatrixArith4(a1,ca1,l3,cl3,"Square/LowerTri 15"); TestMatrixArith4(a2,ca2,l3,cl3,"Square/LowerTri 16"); TestMatrixArith4(a1,ca1,l6,cl6,"Square/LowerTri 17"); TestMatrixArith4(a2,ca2,l6,cl6,"Square/LowerTri 18"); #endif } #ifdef TEST_DOUBLE template void TestTriMatrixArith_B4a(); #endif #ifdef TEST_FLOAT template void TestTriMatrixArith_B4a(); #endif #ifdef TEST_LONGDOUBLE template void TestTriMatrixArith_B4a(); #endif #ifdef TEST_INT template void TestTriMatrixArith_B4a(); #endif