Bien le bonjour a tous ... je suis confronte a un probleme lors de lutilisation de cvSVD, en effet, celle-ci ne me donne pas les resultats escomptes ...

J'utilise pour tester, l'exmple de svd sur wikipedia, et scilab pour confirmer les resultats ...

voici mon code :


int nbrpoints = 4;

CvMat* A = cvCreateMat(nbrpoints,5,CV_64FC1);
CvMat* U = cvCreateMat(nbrpoints,nbrpoints,CV_64FC1);
CvMat* D = cvCreateMat(nbrpoints,5,CV_64FC1);
CvMat* V = cvCreateMat(5,5,CV_64FC1);

cvmSet(A,0,0,1 );
cvmSet(A,0,1,0 );
cvmSet(A,0,2,0 );
cvmSet(A,0,3,0 );
cvmSet(A,0,4,2 );

cvmSet(A,1,0,0 );
cvmSet(A,1,1,0 );
cvmSet(A,1,2,3 );
cvmSet(A,1,3,0 );
cvmSet(A,1,4,0 );

cvmSet(A,2,0,0 );
cvmSet(A,2,1,0 );
cvmSet(A,2,2,0 );
cvmSet(A,2,3,0 );
cvmSet(A,2,4,0 );

cvmSet(A,3,0,0 );
cvmSet(A,3,1,4 );
cvmSet(A,3,2,0 );
cvmSet(A,3,3,0 );
cvmSet(A,3,4,0 );



cvSVD(A, D, U, V, CV_SVD_V_T);


j'ai comme resultats :

D
4.000000 0.000000 0.000000 0.000000 0.000000
0.000000 3.000000 0.000000 0.000000 0.000000
0.000000 0.000000 2.236068 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000

U
0.000000 -0.000000 -1.000000 0.000000
0.000000 -1.000000 -0.000000 0.000000
0.000000 -0.000000 -0.000000 1.000000
-1.000000 -0.000000 -0.000000 0.000000

V
-0.000000 -1.000000 0.000000 0.000000 0.000000
-0.000000 0.000000 -1.000000 -0.000000 -0.000000
-0.447214 -0.000000 -0.000000 -0.000000 -0.894427
0.000000 0.000000 0.000000 -1.000000 0.000000
-0.894427 -0.000000 0.000000 0.000000 0.447214



Wikipedia donne comme resultats :

U
0 0 1 0
0 1 0 0
0 0 0 -1
1 0 0 0

V
0 1 0 0 0
0 0 1 0 0
0.447 0 0 0 0.894
0 0 0 1 0
-0.894 0 0 0 0.447

D
4 0 0 0
0 3 0 0
0 0 2.236 0


Enfin Scilab me donne les resultats suivant :

D
4 0 0 0
0 3 0 0
0 0 2.236 0

U
0 0 1 0
0 1 0 0
0 0 0 -1
1 0 0 0

V
0 0 0.447 0 -0.894
1 0 0 0 0
0 1 0 0 0
0 0 0 1 0
0 0 -0.894 0 0.447






Je n'y connais tellement rien en svd ... si quelqu'un a la moindre petite idee d'ou peut prevenir mon probleme ... bah ... trop cool