|
|
#include <iostream> |
|
|
struct init { |
|
|
init() { std::cout << "[" << "init" << "]" << std::endl; } |
|
|
}; |
|
|
init init_obj; |
|
|
|
|
|
#include <iostream> |
|
|
#include <Eigen/Dense> |
|
|
|
|
|
using namespace std; |
|
|
using namespace Eigen; |
|
|
|
|
|
int main() |
|
|
{ |
|
|
MatrixXd A(2,2); |
|
|
A << 2, -1, 1, 3; |
|
|
cout << "Here is the input matrix A before decomposition:\n" << A << endl; |
|
|
cout << "[init]" << endl; |
|
|
|
|
|
cout << "[declaration]" << endl; |
|
|
PartialPivLU<Ref<MatrixXd> > lu(A); |
|
|
cout << "Here is the input matrix A after decomposition:\n" << A << endl; |
|
|
cout << "[declaration]" << endl; |
|
|
|
|
|
cout << "[matrixLU]" << endl; |
|
|
cout << "Here is the matrix storing the L and U factors:\n" << lu.matrixLU() << endl; |
|
|
cout << "[matrixLU]" << endl; |
|
|
|
|
|
cout << "[solve]" << endl; |
|
|
MatrixXd A0(2,2); A0 << 2, -1, 1, 3; |
|
|
VectorXd b(2); b << 1, 2; |
|
|
VectorXd x = lu.solve(b); |
|
|
cout << "Residual: " << (A0 * x - b).norm() << endl; |
|
|
cout << "[solve]" << endl; |
|
|
|
|
|
cout << "[modifyA]" << endl; |
|
|
A << 3, 4, -2, 1; |
|
|
x = lu.solve(b); |
|
|
cout << "Residual: " << (A0 * x - b).norm() << endl; |
|
|
cout << "[modifyA]" << endl; |
|
|
|
|
|
cout << "[recompute]" << endl; |
|
|
A0 = A; |
|
|
lu.compute(A); |
|
|
x = lu.solve(b); |
|
|
cout << "Residual: " << (A0 * x - b).norm() << endl; |
|
|
cout << "[recompute]" << endl; |
|
|
|
|
|
cout << "[recompute_bis0]" << endl; |
|
|
MatrixXd A1(2,2); |
|
|
A1 << 5,-2,3,4; |
|
|
lu.compute(A1); |
|
|
cout << "Here is the input matrix A1 after decomposition:\n" << A1 << endl; |
|
|
cout << "[recompute_bis0]" << endl; |
|
|
|
|
|
cout << "[recompute_bis1]" << endl; |
|
|
x = lu.solve(b); |
|
|
cout << "Residual: " << (A1 * x - b).norm() << endl; |
|
|
cout << "[recompute_bis1]" << endl; |
|
|
|
|
|
} |
|
|
|