38 typedef typename SparseMatrixType::StorageIndex StorageIndex;
40 const Index rows = internal::random<Index>(1,
n);
41 const Index cols = internal::random<Index>(1,
n);
42 const Index depth = internal::random<Index>(1,
n);
44 enum {
Flags = SparseMatrixType::Flags };
53 Scalar s1 = internal::random<Scalar>();
54 Scalar s2 = internal::random<Scalar>();
68 SparseMatrixType
m2(
rows, depth);
69 SparseMatrixType m2t(depth,
rows);
70 SparseMatrixType m3(depth,
cols);
71 SparseMatrixType m3t(
cols, depth);
87 VERIFY_IS_APPROX(m4 = m2t.transpose() * m3, refMat4 = refMat2t.transpose() * refMat3);
88 VERIFY_IS_APPROX(m4 = m2t.transpose() * m3t.transpose(), refMat4 = refMat2t.transpose() * refMat3t.transpose());
97 refMat4 = refMat2 * (refMat3 + refMat3).leftCols(
cols / 2));
100 VERIFY_IS_APPROX(m4 = (m2t.transpose() * m3).pruned(0), refMat4 = refMat2t.transpose() * refMat3);
102 refMat4 = refMat2t.transpose() * refMat3t.transpose());
103 VERIFY_IS_APPROX(m4 = (
m2 * m3t.transpose()).pruned(0), refMat4 = refMat2 * refMat3t.transpose());
105 #ifndef EIGEN_SPARSE_PRODUCT_IGNORE_TEMPORARY_COUNT
107 if ((!SparseMatrixType::IsRowMajor) &&
m2.rows() <= m3.cols()) {
118 SparseMatrixType As(Ad.sparseView()),
B(2, 2);
120 VERIFY_IS_EQUAL((Ad * Ad.transpose()).eval().sparseView().eval().nonZeros(), 2);
128 VERIFY_IS_APPROX(dm4 = m2t.transpose() * m3, refMat4 = refMat2t.transpose() * refMat3);
129 VERIFY_IS_APPROX(dm4 += m2t.transpose() * m3, refMat4 += refMat2t.transpose() * refMat3);
130 VERIFY_IS_APPROX(dm4 -= m2t.transpose() * m3, refMat4 -= refMat2t.transpose() * refMat3);
131 VERIFY_IS_APPROX(dm4 = m2t.transpose() * m3t.transpose(), refMat4 = refMat2t.transpose() * refMat3t.transpose());
132 VERIFY_IS_APPROX(dm4 += m2t.transpose() * m3t.transpose(), refMat4 += refMat2t.transpose() * refMat3t.transpose());
133 VERIFY_IS_APPROX(dm4 -= m2t.transpose() * m3t.transpose(), refMat4 -= refMat2t.transpose() * refMat3t.transpose());
134 VERIFY_IS_APPROX(dm4 =
m2 * m3t.transpose(), refMat4 = refMat2 * refMat3t.transpose());
135 VERIFY_IS_APPROX(dm4 +=
m2 * m3t.transpose(), refMat4 += refMat2 * refMat3t.transpose());
136 VERIFY_IS_APPROX(dm4 -=
m2 * m3t.transpose(), refMat4 -= refMat2 * refMat3t.transpose());
146 VERIFY_IS_APPROX(dm4 =
m2 * refMat3t.transpose(), refMat4 = refMat2 * refMat3t.transpose());
147 VERIFY_IS_APPROX(dm4 = m2t.transpose() * refMat3, refMat4 = refMat2t.transpose() * refMat3);
149 refMat4 = refMat2t.transpose() * refMat3t.transpose());
157 VERIFY_IS_APPROX(dm4 =
m2 * (refMat3 + refMat3), refMat4 = refMat2 * (refMat3 + refMat3));
159 refMat4 = refMat2t.transpose() * (refMat3 + refMat5) * 0.5);
162 VERIFY_IS_APPROX(dm4.col(0) =
m2 * refMat3.col(0), refMat4.col(0) = refMat2 * refMat3.col(0));
164 refMat4.col(0) = refMat2 * refMat3t.transpose().col(0));
166 refMat4.col(0) = refMat2t.transpose() * refMat3.col(0));
167 VERIFY_IS_APPROX(dm4.col(0) = m2t.transpose() * refMat3t.transpose().col(0),
168 refMat4.col(0) = refMat2t.transpose() * refMat3t.transpose().col(0));
172 VERIFY_IS_APPROX(dm4 = dm4 + refMat2 * m3, refMat4 = refMat4 + refMat2 * refMat3);
175 VERIFY_IS_APPROX(dm4.noalias() += refMat2 * m3, refMat4 += refMat2 * refMat3);
176 VERIFY_IS_APPROX(dm4.noalias() -= refMat2 * m3, refMat4 -= refMat2 * refMat3);
177 VERIFY_IS_APPROX(dm4 = refMat2 * m3t.transpose(), refMat4 = refMat2 * refMat3t.transpose());
178 VERIFY_IS_APPROX(dm4 = refMat2t.transpose() * m3, refMat4 = refMat2t.transpose() * refMat3);
180 refMat4 = refMat2t.transpose() * refMat3t.transpose());
184 Index c = internal::random<Index>(0, depth - 1);
185 Index r = internal::random<Index>(0,
rows - 1);
186 Index c1 = internal::random<Index>(0,
cols - 1);
187 Index r1 = internal::random<Index>(0, depth - 1);
190 VERIFY_IS_APPROX(m4 =
m2.col(
c) * dm5.col(c1).transpose(), refMat4 = refMat2.col(
c) * dm5.col(c1).transpose());
193 refMat4 = refMat2.col(
c) * dm5.col(c1).transpose());
195 VERIFY_IS_APPROX(dm4 =
m2.col(
c) * dm5.col(c1).transpose(), refMat4 = refMat2.col(
c) * dm5.col(c1).transpose());
197 VERIFY_IS_APPROX(m4 = dm5.col(c1) *
m2.col(
c).transpose(), refMat4 = dm5.col(c1) * refMat2.col(
c).transpose());
200 refMat4 = dm5.col(c1) * refMat2.col(
c).transpose());
202 VERIFY_IS_APPROX(dm4 = dm5.col(c1) *
m2.col(
c).transpose(), refMat4 = dm5.col(c1) * refMat2.col(
c).transpose());
205 refMat4 = dm5.row(r1).transpose() * refMat2.col(
c).transpose());
208 refMat4 = dm5.row(r1).transpose() * refMat2.col(
c).transpose());
211 refMat4 = refMat2.row(
r).transpose() * dm5.col(c1).transpose());
214 refMat4 = refMat2.row(
r).transpose() * dm5.col(c1).transpose());
217 refMat4 = refMat2.row(
r).transpose() * dm5.col(c1).transpose());
221 VERIFY_IS_APPROX(m4 = dm5.col(c1) *
m2.middleRows(
r, 1), refMat4 = dm5.col(c1) * refMat2.row(
r));
225 VERIFY_IS_APPROX(m4 = dm5.row(r1).transpose() *
m2.row(
r), refMat4 = dm5.row(r1).transpose() * refMat2.row(
r));
227 VERIFY_IS_APPROX(dm4 = dm5.row(r1).transpose() *
m2.row(
r), refMat4 = dm5.row(r1).transpose() * refMat2.row(
r));
233 ColSpVector cv0(
cols), cv1;
237 RowSpVector rv0(depth), rv1;
238 RowDenseVector drv0(depth), drv1(rv1);
243 VERIFY_IS_APPROX(cv1 = m3t.adjoint() * cv0, dcv1 = refMat3t.adjoint() * dcv0);
258 initSparse<Scalar>(
density, refM3, m3);
298 initSparse<Scalar>(
density, refA, mA);
301 }
while (refUp.isZero());
302 refLo = refUp.adjoint();
304 refS = refUp + refLo;
305 refS.diagonal() *= 0.5;
308 for (
int k = 0;
k < mS.outerSize(); ++
k)
309 for (
typename SparseMatrixType::InnerIterator it(mS,
k); it; ++it)
310 if (it.index() ==
k) it.valueRef() *=
Scalar(0.5);
326 VERIFY_IS_APPROX(
x.noalias() += mUp.template selfadjointView<Upper>() *
b, refX += refS *
b);
327 VERIFY_IS_APPROX(
x.noalias() -= mLo.template selfadjointView<Lower>() *
b, refX -= refS *
b);
328 VERIFY_IS_APPROX(
x.noalias() += mS.template selfadjointView<Upper | Lower>() *
b, refX += refS *
b);
333 refX = refLo.template selfadjointView<Lower>() * refS);
335 refX = refS * refLo.template selfadjointView<Lower>());
338 VERIFY_IS_APPROX(
x = mA.template triangularView<Upper>() *
b, refX = refA.template triangularView<Upper>() *
b);
339 VERIFY_IS_APPROX(
x = mA.template triangularView<Lower>() *
b, refX = refA.template triangularView<Lower>() *
b);
340 VERIFY_IS_APPROX(
x =
b * mA.template triangularView<Upper>(), refX =
b * refA.template triangularView<Upper>());
341 VERIFY_IS_APPROX(
x =
b * mA.template triangularView<Lower>(), refX =
b * refA.template triangularView<Lower>());
345 refX = refA.template triangularView<Lower>() * refS);
347 refX = refS * refA.template triangularView<Lower>());
349 refX = refA.template triangularView<Upper>() * refS);
351 refX = refS * refA.template triangularView<Upper>());
Matrix< Scalar, Dynamic, Dynamic > DenseMatrix
Definition: BenchSparseUtil.h:23
Matrix< Scalar, Dynamic, 1 > DenseVector
Definition: BenchSparseUtil.h:24
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Map< RowVectorXf > v2(M2.data(), M2.size())
M1<< 1, 2, 3, 4, 5, 6, 7, 8, 9;Map< RowVectorXf > v1(M1.data(), M1.size())
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
Scalar * b
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
Matrix< SCALARB, Dynamic, Dynamic, opt_B > B
Definition: bench_gemm.cpp:48
Represents a diagonal matrix with its storage.
Definition: DiagonalMatrix.h:172
a sparse vector class
Definition: SparseVector.h:62
#define max(a, b)
Definition: datatypes.h:23
char char char int int * k
Definition: level2_impl.h:374
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
Extend namespace for flags.
Definition: fsi_chan_precond_driver.cc:56
int c
Definition: calibrate.py:100
double Zero
Definition: pseudosolid_node_update_elements.cc:35
list x
Definition: plotDoE.py:28
@ ForceRealDiag
Definition: sparse.h:32
@ MakeUpperTriangular
Definition: sparse.h:32
void initSparse(double density, Matrix< Scalar, Dynamic, Dynamic, Opt1 > &refMat, SparseMatrix< Scalar, Opt2, StorageIndex > &sparseMat, int flags=0, std::vector< Matrix< StorageIndex, 2, 1 > > *zeroCoords=0, std::vector< Matrix< StorageIndex, 2, 1 > > *nonzeroCoords=0)
Definition: sparse.h:42
internal::nested_eval< T, 1 >::type eval(const T &xpr)
Definition: sparse_permutations.cpp:47
#define VERIFY_EVALUATION_COUNT(XPR, N)
Definition: test/sparse_product.cpp:28