1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#include <iostream>
#include <vector>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
using namespace std;
using namespace boost::numeric::ublas;
std::vector<matrix<float>> decomp_lu(matrix<float> m)
{
std::vector<matrix<float>> V_results(m.size1());
matrix<float> l(m.size1(), m.size1());
cout << "dimension de la matrice soumise au LU :"<<m.size1()<<"\n";
while(for(int col=0; col<m.size2(); col=col+1)
{
for(int lig=col; lig<m.size1(); lig=lig+1)
{m(lig,col)!=0;}
})
{
for(int i=0; i<=m.size1()-2; i=i+1)//calcul de L, l'operation est faite (n-1) fois
{
//coef à 0 de la matrice L
for(int c=0; c<m.size1(); ++ c)
for(int d=0; d<m.size2(); ++ d)
l(c,d)=0;
//coef à 1 sur la diagonale de la matrice L
for(int c=0; c<m.size1(); ++ c)
l(c,c)=1;
if (m(i,i)!=0)
{
//calcul des coef non nuls de la matrice L
for(int j=i; j<=m.size1()-2; ++ j)
l(j+1,i)=-m(j+1,i)/m(i,i);
}
if (m(i,i)==0)
{
cout<< "SAUT \n";
goto jump;
}
V_results[i]=l; //ecriture de la ieme matrice de L
cout << "operation numero "<< i <<", L : "<< l <<"\n";
m=prod(l, m);
cout << "operation numero "<< i <<", U : "<< m <<"\n";
jump:;
}
}//fin du while
V_results[m.size1()-1]=m;
return(V_results);
} |
Partager