⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmtl.cpp

📁 各种矩阵算法库。支持UpperTriangularMatrix,LowerTriangularMatrix, DiagonalMatrix, SymmetricMatrix, BandMatrix,U
💻 CPP
字号:
#define WANT_STREAM#define WANT_MATH#include "newmat.h"#include "tmt.h"#ifdef use_namespaceusing namespace NEWMAT;#endif// test maxima and minimaReal TestMax(const GenericMatrix& GM){   Matrix M = GM;   ColumnVector CV = GM.AsColumn();   int c, i, j, k; int n = CV.Nrows(), nr = M.Nrows(), nc = M.Ncols();   Real x1, x2, x3;   MatrixBandWidth mbw = GM.BandWidth();   int u = mbw.Upper(); int l = mbw.Lower();   bool IsBandMatrix = u > 0 && l > 0 && !(u == 0 && l == 0);   x1 = GM.MaximumAbsoluteValue();   x2 = GM.MaximumAbsoluteValue1(i);   if (fabs(CV(i)) != x2) return 1.1;   x3 = GM.MaximumAbsoluteValue2(i,j);   if (fabs(M(i,j)) != x3) return 1.2;   if (x3 != x1) return 1.3;   if (x2 != x1) return 1.4;   c = 0;   for (k = 1; k <= n; k++)   {      Real cvk = fabs(CV(k));      if (x1 <= cvk) { if (x1 < cvk) return 1.5; else c++; }   }   if (c == 0) return 1.6;   x1 = GM.MinimumAbsoluteValue();   x2 = GM.MinimumAbsoluteValue1(i);   if (fabs(CV(i)) != x2) return 2.1;   x3 = GM.MinimumAbsoluteValue2(i,j);   if (fabs(M(i,j)) != x3) return 2.2;   if (x3 != x1) return 2.3;   if (x2 != CV.MinimumAbsoluteValue()) return 2.4;   c = 0;   if (IsBandMatrix)   {      for (i = 1; i <= nr; i++) for (j = 1; j <= nc; j++)         if (i - j <= l && j - i <= u)      {         Real mij = fabs(M(i,j));         if (x1 >= mij) { if (x1 > mij) return 2.51; else c++; }      }   }   else   {      for (k = 1; k <= n; k++)      {         Real cvk = fabs(CV(k));         if (x1 >= cvk) { if (x1 > cvk) return 2.52; else c++; }      }   }   if (c == 0) return 2.6;   x1 = GM.Maximum();   x2 = GM.Maximum1(i);   if (CV(i) != x2) return 3.1;   x3 = GM.Maximum2(i,j);   if (M(i,j) != x3) return 3.2;   if (x3 != x1) return 3.3;   if (x2 != CV.Maximum()) return 3.4;   c = 0;   if (IsBandMatrix)   {      for (i = 1; i <= nr; i++) for (j = 1; j <= nc; j++)         if (i - j <= l && j - i <= u)      {         Real mij = M(i,j);         if (x1 <= mij) { if (x1 < mij) return 3.51; else c++; }      }   }   else   {      for (k = 1; k <= n; k++)      {         Real cvk = CV(k);         if (x1 <= cvk) { if (x1 < cvk) return 3.52; else c++; }      }   }   if (c == 0) return 3.6;   x1 = GM.Minimum();   x2 = GM.Minimum1(i);   if (CV(i) != x2) return 4.1;   x3 = GM.Minimum2(i,j);   if (M(i,j) != x3) return 4.2;   if (x3 != x1) return 4.3;   if (x2 != CV.Minimum()) return 4.4;   c = 0;   if (IsBandMatrix)   {      for (i = 1; i <= nr; i++) for (j = 1; j <= nc; j++)         if (i - j <= l && j - i <= u)      {         Real mij = M(i,j);         if (x1 >= mij) { if (x1 > mij) return 4.51; else c++; }      }   }   else   {      for (k = 1; k <= n; k++)      {         Real cvk = CV(k);         if (x1 >= cvk) { if (x1 > cvk) return 4.52; else c++; }      }   }   if (c == 0) return 4.6;   return 0;}void trymatl(){   Tracer et("Twenty first test of Matrix package");   Tracer::PrintTrace();   Matrix M(4, 4);   M <<  1.5 <<  1.0 << -4.0 <<  4.5     <<  3.5 <<  7.0 <<  2.0 << -1.0     << -1.5 <<  7.5 << -6.0 <<  5.0     <<  0.5 << -8.0 <<  5.5 <<  4.0;   UpperTriangularMatrix UM;  UM << M;   LowerTriangularMatrix LM;  LM << -M;   SymmetricMatrix SM; SM << (UM + UM.t());   BandMatrix BM(4, 1, 2);  BM.Inject(M);   DiagonalMatrix DM; DM << M;   SymmetricBandMatrix SBM(4,1); SBM.Inject(M);   RowVector Test(28); int k = 0;   // tests for different shapes   Test(++k) = TestMax(GenericMatrix(M));   Test(++k) = TestMax(GenericMatrix(UM));   Test(++k) = TestMax(GenericMatrix(LM));   Test(++k) = TestMax(GenericMatrix(SM));   Test(++k) = TestMax(GenericMatrix(DM));   Test(++k) = TestMax(GenericMatrix(BM));   Test(++k) = TestMax(GenericMatrix(SBM));   // tests for constant matrices - don't put non-zeros in corners of BM   Matrix MX(4,4);   MX = 1; Test(++k) = TestMax(GenericMatrix(MX));   BM.Inject(MX); Test(++k) = TestMax(GenericMatrix(BM));   MX = 0; Test(++k) = TestMax(GenericMatrix(MX));   BM.Inject(MX); Test(++k) = TestMax(GenericMatrix(BM));   MX = -1; Test(++k) = TestMax(GenericMatrix(MX));   BM.Inject(MX); Test(++k) = TestMax(GenericMatrix(BM));   // test for non-square   MX = M | (2 * M).t(); Test(++k) = TestMax(GenericMatrix(MX));   // test on row and column vector   RowVector RV(6);   RV << 1 << 3 << -5 << 2 << -4 << 3;   Test(++k) = TestMax(GenericMatrix(RV));   Test(++k) = TestMax(GenericMatrix(RV.t()));   // test for function form   Test(++k) = (MaximumAbsoluteValue(RV) - 5);   Test(++k) = (MinimumAbsoluteValue(RV) - 1);   Test(++k) = (Maximum(RV) - 3);   Test(++k) = (Minimum(RV) + 5);   Test(++k) = (MaximumAbsoluteValue(-RV) - 5);   Test(++k) = (MinimumAbsoluteValue(-RV) - 1);   Test(++k) = (Maximum(-RV) - 5);   Test(++k) = (Minimum(-RV) + 3);   // test formulae   RowVector RV2(6);   RV2 << 2 << 8 << 1 << 9 << 3 << -1;   Test(++k) = (MaximumAbsoluteValue(RV+RV2) - 11);   Test(++k) = (MinimumAbsoluteValue(RV+RV2) - 1);   Test(++k) = (Maximum(RV+RV2) - 11);   Test(++k) = (Minimum(RV+RV2) + 4);   Print(Test);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -