//-*-c++-*-----------------------------------------------------------------
//
// A simple LU factorization algorithm written using MTL
// The example matrix is the same as the getrf example, which
// is the LAPACK version of LU factorization.
//
//-------------------------------------------------------------------------
#include "mtl/lu.h"
#include "mtl/matrix.h"
#include "mtl/dense1D.h"
#include "mtl/utils.h"
/*
Sample output:
3x3
[
[1,2,2],
[2,1,2],
[2,2,1]
]
3x3
[
[2,1,2],
[0.5,1.5,1],
[1,0.666667,-1.66667]
]
[2,2,3,]
也就是,
pivot =
[2,0,0,]
[0,2,0,]
[0,0,3,]
L=
[2*2,0,0],
[0.5,1.5*2,0],
[1,0.666667,-1.66667*3]
U=
[1,1,2],
[0,1,1],
[0,0.666667,1]
*/
int
main()
{
using namespace mtl;
//begin
typedef matrix<double,
rectangle<>,
dense<external>,
column_major>::type Matrix;
const Matrix::size_type N = 3;
double da [] = { 1, 2, 2, 2, 1, 2, 2, 2, 1 };
Matrix A(da, N, N);
dense1D<int> pivots(N, 0);
//end
print_all_matrix(A);
//begin
lu_factor(A, pivots);
//end
print_all_matrix(A);
print_vector(pivots);
return 0;
}
该博客展示了一个使用MTL编写的简单LU分解算法。示例矩阵与LAPACK版本的LU分解示例相同,代码中定义了矩阵和向量,进行了LU分解操作,并输出分解后的矩阵和主元向量,还给出了示例输出结果。

被折叠的 条评论
为什么被折叠?



