#include <cxxstd/iostream.h>
#define USE_CXXLAPACK #include <flens/flens.cxx> /// /// We use our high-level interface that we defined before. /// #include "tut05-mylapack-version1.h" using namespace flens; using namespace std; typedef double T; int main() { typedef GeMatrix<FullStorage<T> > Matrix; typedef DenseVector<Array<T> > Vector; typedef Matrix::IndexType IndexType; typedef DenseVector<Array<IndexType> > IndexVector; const IndexType n = 4; /// /// We define an underscore object to ease the creation of matrix/vector views. /// Underscore<IndexType> _; Matrix A(n,n); Vector b(n); IndexVector piv(n); A = 2, 3, -1, 0, -6, -5, 0, 2, 2, -5, 6, -6, 4, 6, 2, -3.1; b = 20, -33, -43, 49; cerr << "A = " << A << endl; cerr << "b = " << b << endl; IndexType info = mylapack::trf(A, piv); if (info==0) { /// /// Passing `b(_(1,n))` as last argument to `trs` will cause a compile-time /// error. This is because the vector view `b(_(1,n))` is a temporary /// object but `trs` expects a lvalue reference. /// mylapack::trs(NoTrans, A, piv, b(_(1,n))); // // This would work (but it might be inconvenient): // // auto b_ = b(_(1,n)); // mylapack::trs(NoTrans, A, piv, b_); // cerr << "x = " << b << endl; } else { cerr << "A is numerically singular." << endl; } } |