Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DECOMPOSITION DE CHOLESKY


Information sur la source

Description

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

  • /*****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];
  • }
  • }
  • }
/*****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];
		}
	}
}

Commentaires et avis

signaler à un administrateur
Commentaire de GoldenEye le 19/03/2004 00:13:06

passe les paramètres de type float[][] par référence (avec un pointeur) et non par valeur ça ralentit bcp

signaler à un administrateur
Commentaire de vecchio56 le 19/03/2004 17:48:41 administrateur CS

bah ce sont déja des pointeurs puisque ce sont des tableau, non?

signaler à un administrateur
Commentaire de vecchio56 le 19/03/2004 17:52:17 administrateur CS

bah ce sont déja des pointeurs puisque ce sont des tableau, non?

signaler à un administrateur
Commentaire de djl le 22/03/2004 05:16:19

ouai ca suffit, par contre le compilo connai la taille, donc lui donner le nombre de lignes lui suffit pour qu'il calcul le nombre de colonnes, on passe float A[][dim] en parametre

signaler à un administrateur
Commentaire de Tnarol le 25/06/2008 17:12:00

L'algo cholesky ne fonctionne pas. Il faut (au moins) donner des valeurs initiales à L et écrire des 0 au dessus de la diagonale supérieure.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,33 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.