本文整理汇总了C++中SparseMatrix::Transpose方法的典型用法代码示例。如果您正苦于以下问题:C++ SparseMatrix::Transpose方法的具体用法?C++ SparseMatrix::Transpose怎么用?C++ SparseMatrix::Transpose使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SparseMatrix
的用法示例。
在下文中一共展示了SparseMatrix::Transpose方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc, char** argv) {
cout << "> Creating sm <" << endl;
SparseMatrix<int> sm;
cin >> sm;
cout << sm << endl;
sm.Output(cout);
SparseMatrix<int> tsm;
sm.Transpose(tsm);
cout << tsm << endl;
tsm.Output(cout);
//-------------------------------------------------------
cout << "> Creating sm2 <" << endl;
SparseMatrix<int> sm2;
cin >> sm2;
cout << sm2 << endl;
sm2.Output(cout);
SparseMatrix<int> sm3;
sm.Add(sm2, sm3);
cout << sm3 << endl;
sm3.Output(cout);
return 0;
}
示例2: aik
void StableFluid3D::initPoisson()
{
clearPoisson();
int n = resX * resY * resZ;
for (int i = 0; i < 2; ++i)
{
r.push_back(Vector(n));
z.push_back(Vector(n));
}
p.Resize(n);
SparseMatrix hTranspose;
SparseMatrix h;
laplacian = SparseMatrix(n, n);
hTranspose = SparseMatrix(n, n);
h = SparseMatrix(n, n);
preconditioner = SparseMatrix(n, n);
pressure.Resize(n);
tempPressure.Resize(n);
vel.Resize(n);
ones.Resize(n);
for (int i = 0; i < n; ++i)
{
ones[i] = 1;
}
double rdxSqr = (resX * resX) / (width * width);
double rdySqr = (resY * resY) / (height * height);
double rdzSqr = (resZ * resZ) / (depth * depth);
// initialize values for the laplacian matrix
for (int i = 0; i < resX; ++i)
{
for (int j = 0; j < resY; ++j)
{
for (int k = 0; k < resZ; ++k)
{
int row = makeIndex(i, j, k);
int x1 = (i == (resX - 1) ? row : row + 1);
int x2 = (i == 0 ? row : row - 1);
int y1 = (j == (resY - 1) ? row : row + resX);
int y2 = (j == 0 ? row : row - resX);
int z1 = (k == (resZ - 1) ? row : row + resY * resX);
int z2 = (k == 0 ? row : row - resY * resX);
laplacian[row][row] += 6 * (rdxSqr + rdySqr + rdzSqr);
laplacian[row][x1] -= rdxSqr;
laplacian[row][x2] -= rdxSqr;
laplacian[row][y1] -= rdySqr;
laplacian[row][y2] -= rdySqr;
laplacian[row][z1] -= rdzSqr;
laplacian[row][z2] -= rdzSqr;
}
}
}
// perform Cholesky preconditioning
// decompose laplacian into H * H^T
SparseVector::iterator iter;
hTranspose = laplacian.Transpose();
SparseMatrix& A = hTranspose;
for (int k = 0; k < n; ++k)
{
SparseVector::iterator aik(A[k]);
aik.seek(k);
if (aik.getIndex() != k)
{
assert(0);
}
double divisor = std::sqrt(*aik);
*aik = divisor;
aik++;
while (aik)
{
*aik /= divisor;
aik++;
}
SparseVector::iterator ajk(A[k]);
ajk.seek(k + 1);
while (ajk)
{
int j = ajk.getIndex();
aik.reset();
aik.seek(j);
//.........这里部分代码省略.........