Zipo Ours bipolaire | ah nan ça marche juste pour mes matrices 2x2  
   Voilà en gros le bout de code, je vous copie pas les fonctions de manipulation de complexes mais en gros dans un autre module ya :
 c_add(complexe, complexe);
 c_sub(complexe, complexe);
 c_mul(complexe, complexe);
 c_div(complexe, complexe);
 et le type complexe est composé d'un champ double re et d'un champ double im  
  
  Code :
 - complexe *get_eig2D(...bla bla...){
 - double R, S;
 - complexe A[2][2], delta, Z1, Z2, *D,
 -          zero={0, 0}, deux={2, 0}, quatre={4, 0};
 - //blabla... remplissage de la matrice A
 - // delta = (a+d)²-4(ad-bc)
 - delta = c_sub(c_mul(c_add(A[0][0], A[1][1]), c_add(A[0][0], A[1][1])),
 -         c_mul(quatre, c_sub(c_mul(A[0][0], A[1][1]), c_mul(A[0][1], A[1][0])))                           
 -         );
 - // R = +-sqrt( (re(delta)+|delta|)/2 )
 - // S = +-sqrt( -(re(delta)-|delta|)/2 )
 - R = sqrt((delta.re + sqrt(delta.re*delta.re + delta.im*delta.im))/2);
 - S = sqrt(fabs((delta.re - sqrt(delta.re*delta.re + delta.im*delta.im))/2));
 - if(delta.im > 0){
 -             Z1.re = R; Z1.im = S;
 -             Z2.re = -R; Z2.im = -S;           
 - }else{
 -             Z1.re = R; Z1.im = -S;
 -             Z2.re = -R; Z2.im = S;     
 - }
 - //Eigenvalues are ((a+d)+Z1)/2  and  ((a+d)+Z2)/2
 - D=(complexe *)malloc(sizeof(complexe)*2);
 - D[0] = c_div(deux ,c_add(c_add(A[0][0], A[1][1]), Z1));
 - D[1] = c_div(deux ,c_add(c_add(A[0][0], A[1][1]), Z2));
 - return D;
 - }
 
  |  
    |