Decomposition de cholesky

Contenu du snippet

Cette source montre comment remplir la matrice L, dans la décomposition de Cholesky A=LLT, où A est la matrice associée au systéme Ax=b.
Il ya aussi deux procédure qui permette de resoudre deux systémes, 1 ayant une matrice triangulaire inférieure, l'autre une matrice triangulaire supérieure.

Ce n'est qu'un essai qui ne demande qu'a être amélioré.

Merci de ne pas être trop sévère, car je débute tout juste en prog.

Source / Exemple :


/*****Resolution du systeme lineaire (triangle inferieur)*****/
void resyst_tri_inf(float mat[dim][dim],float b1[dim],float x1[dim],int n)
{
 	int i,k;
	float S;
 	x1[1]=b1[1]/mat[1][1];
 	for(i=2;i<=n;i++)
 	{
		S=0;
  		for(k=1;k<=i;k++)
			S+=mat[i][k]*x1[k];
		x1[i]=(b1[i]-S)/mat[i][i];
 	}
}
/*****Resolution du systeme lineaire (triangle superieur)*****/
void resyst_tri_sup(float mat[dim][dim],float b1[dim],float x1[dim],int n)
{
 	int i,k;
	float S;
 	x1[n]=b1[n]/mat[n][n];
 	for(i=n-1;i>=1;i--)
 	{
		S=0;
  		for(k=n;k>=i+2;k--)
			S+=mat[i][k]*x1[k];
		x1[i]=(b1[i]-S)/mat[i][i];
 	}
}
/*****cholesky : résolution d'un systeme de la forme Ax=b,*/
/*Avec A = L.LT, A étant une matrice sysmétrique définie positive de dimension n*/
/*L:matrice triangulaire inférieur, et LT:transposée de L*/
void cholesky(float A[dim][dim],float L[dim][dim],int n)
{
	int i,j,k;
	float S;
	for(j=1;j<=n;j++)
	{
		S=0;
		for(k=1;k<j;k++)
		S+=pow(L[j][k],2);
		L[j][j]=sqrt(A[j][j]-S);
		for(i=j;i<=n;i++)
		{
			S=0;
			for(k=1;k<j;k++)
			S+=L[i][k]*L[j][k];
			L[i][j]=(A[i][j]-S)/L[j][j];
		}
	}
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.