12b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#include <iostream> 22b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct init { 32b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang init() { std::cout << "[" << "init" << "]" << std::endl; } 42b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang}; 52b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wanginit init_obj; 62b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// [init] 72b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#include <iostream> 82b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#include <Eigen/Dense> 92b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 102b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangusing namespace std; 112b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangusing namespace Eigen; 122b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 132b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangint main() 142b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang{ 152b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang MatrixXd A(2,2); 162b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang A << 2, -1, 1, 3; 172b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang cout << "Here is the input matrix A before decomposition:\n" << A << endl; 182b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[init]" << endl; 192b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 202b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[declaration]" << endl; 212b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang PartialPivLU<Ref<MatrixXd> > lu(A); 222b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang cout << "Here is the input matrix A after decomposition:\n" << A << endl; 232b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[declaration]" << endl; 242b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 252b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[matrixLU]" << endl; 262b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang cout << "Here is the matrix storing the L and U factors:\n" << lu.matrixLU() << endl; 272b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[matrixLU]" << endl; 282b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 292b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[solve]" << endl; 302b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang MatrixXd A0(2,2); A0 << 2, -1, 1, 3; 312b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang VectorXd b(2); b << 1, 2; 322b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang VectorXd x = lu.solve(b); 332b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang cout << "Residual: " << (A0 * x - b).norm() << endl; 342b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[solve]" << endl; 352b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 362b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[modifyA]" << endl; 372b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang A << 3, 4, -2, 1; 382b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang x = lu.solve(b); 392b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang cout << "Residual: " << (A0 * x - b).norm() << endl; 402b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[modifyA]" << endl; 412b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 422b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[recompute]" << endl; 432b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang A0 = A; // save A 442b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang lu.compute(A); 452b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang x = lu.solve(b); 462b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang cout << "Residual: " << (A0 * x - b).norm() << endl; 472b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[recompute]" << endl; 482b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 492b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[recompute_bis0]" << endl; 502b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang MatrixXd A1(2,2); 512b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang A1 << 5,-2,3,4; 522b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang lu.compute(A1); 532b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang cout << "Here is the input matrix A1 after decomposition:\n" << A1 << endl; 542b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[recompute_bis0]" << endl; 552b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 562b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[recompute_bis1]" << endl; 572b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang x = lu.solve(b); 582b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang cout << "Residual: " << (A1 * x - b).norm() << endl; 592b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangcout << "[recompute_bis1]" << endl; 602b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 612b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang} 62