本文整理汇总了C++中Blackbox::applyTranspose方法的典型用法代码示例。如果您正苦于以下问题:C++ Blackbox::applyTranspose方法的具体用法?C++ Blackbox::applyTranspose怎么用?C++ Blackbox::applyTranspose使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Blackbox
的用法示例。
在下文中一共展示了Blackbox::applyTranspose方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: testTiming
void testTiming(Blackbox & A)
{
typedef typename Blackbox::MatrixDomain Dom;
typedef typename Dom::Block Block;
Dom MD = A.domain();
size_t m = A.rowdim(), n = A.coldim();
size_t k = (m + n)/2;
LinBox::UserTimer timer;
Block B(n,k), C(m,k), D(k,m), E(k,n), F(k,k);
MD.random(B); MD.random(D);
vector<typename Dom::Element> v1, v2(m);
typename Dom::RandIter r(MD);
typename Dom::Element x;
for(size_t i = 0; i != n; ++i){
r.random(x);
v1.push_back(x);
}
//Tests:
cout << "Timing tests:" << endl << endl;
timer.clear(); timer.start();
for(size_t j = 0; j != m; ++j) A.apply(v2,v1);
timer.stop();
cout << "apply using vectors time: " << timer << endl;
timer.clear(); timer.start();
A.applyTranspose(C,B);
timer.stop();
cout << "apply using row addin time: " << timer << endl;
timer.clear(); timer.start();
A.unpackingApplyTranspose(C,B);
timer.stop();
cout << "apply using block axpy time: " << timer << endl;
timer.clear(); timer.start();
MD.mul(F, D, C);
timer.stop();
cout << "Matrix Domain mul time: " << timer << endl;
cout << "End of timing tests" << endl << endl;
} // testTiming
示例2: testTransposeBlackbox
static bool testTransposeBlackbox(Blackbox & A)
{
typedef typename Blackbox::Field Field;
commentator().start ("Testing Transpose", "testTranspose", 1);
Transpose<Blackbox> B(A);
bool ret = true, ret1;
size_t m = A.rowdim(), n = A.coldim();
const Field & F = A.field();
VectorDomain<Field> VD (F);
BlasVector<Field> x(F,n), y(F,m), z(F,n), w(F,m);
VD.random(x);
A.apply(y, x);
B.applyTranspose(w, x);
ret1 = VD.areEqual(y, w);
if (not ret1) commentator().report() << "A and B^T disagree, FAIL" << std::endl;
ret = ret and ret1;
VD.random(y);
A.applyTranspose(x, y);
B.apply(z, y);
ret1 = VD.areEqual(x, z);
if (not ret1) commentator().report() << "A^T and B disagree, FAIL" << std::endl;
ret = ret and ret1;
ret1 = testBlackboxNoRW(B);
if (not ret1) commentator().report() << "testBlackbox A^T FAIL" << std::endl;
ret = ret and ret1;
commentator().stop (MSG_STATUS (ret), (const char *) 0, "testTranspose");
return ret;
}
示例3: testSingularInconsistentSolve
static bool testSingularInconsistentSolve (const Field &F,
VectorStream<Vector> &stream1,
VectorStream<Vector> &stream2,
const char *text,
MethodTraits method)
{
typedef Diagonal <Field, Vector> Blackbox;
ostringstream str;
str << "Testing singular inconsistent solve (" << text << ")";
commentator().start (str.str ().c_str (), "testSingularInconsistentSolve", stream1.m ());
VectorDomain<Field> VD (F);
typename WiedemannSolver<Field>::ReturnStatus status;
bool ret = true;
Vector d1, d, b, x, y, u;
typename Field::Element uTb;
VectorWrapper::ensureDim (d, stream2.dim ());
VectorWrapper::ensureDim (b, stream2.dim ());
VectorWrapper::ensureDim (x, stream2.dim ());
VectorWrapper::ensureDim (y, stream2.dim ());
VectorWrapper::ensureDim (d1, stream1.dim ());
MethodTraits traits (method);
traits.preconditioner (MethodTraits::NONE);
while (stream1 && stream2) {
commentator().startIteration ((unsigned)stream1.j ());
stream1.next (d1);
stream2.next (b);
VD.copy (d, d1);
ostream &report = commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION);
report << "Diagonal entries: ";
VD.write (report, d);
report << endl;
report << "Right-hand side: ";
VD.write (report, b);
report << endl;
BlasVector<Field> dd(F,d);
Blackbox D (dd);
//Blackbox D (d);
status = solve (D, x, b, u, F, traits);
if (status == WiedemannSolver<Field>::INCONSISTENT) {
D.applyTranspose (y, u);
report << "Certificate of inconsistency found." << endl;
report << "Certificate is: ";
VD.write (report, u) << endl;
report << "u^T A = ";
VD.write (report, y) << endl;
VD.dot (uTb, u, b);
report << "u^T b = ";
F.write (report, uTb) << endl;
if (!VD.isZero (y)) {
commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR)
<< "ERROR: u is not in the right nullspace of D" << endl;
ret = false;
}
if (F.isZero (uTb)) {
commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR)
<< "ERROR: u^T b = 0" << endl;
ret = false;
}
}
else if (status == WiedemannSolver<Field>::FAILED) {
commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR)
<< "ERROR: Solver refused to certify inconsistency" << endl;
ret = false;
}
else {
commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR)
<< "ERROR: Solver gave solution even though system is inconsistent" << endl;
ret = false;
}
commentator().stop ("done");
commentator().progress ();
}
stream1.reset ();
stream2.reset ();
commentator().stop (MSG_STATUS (ret), (const char *) 0, "testSingularInconsistentSolve");
//.........这里部分代码省略.........