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