jacod2
C JACOD2 SOURCE GOUNAND 26/01/14 21:15:06 12449 SUBROUTINE JACOD2(A,D) C===================================================================== C C DIAGONALISATION DE A SYMETRIQUE C C sans sortir les vecteurs propres C C 2025/10 Gounand : on reprend et simplifie jacob2.eso C C ENTREEES C A(3,3) = MATRICE A DIAGONALISER A(1,3)=A(2,3)=0. C A(3,1)=A(3,2)=0. C SORTIES C D(3) = LES 3 VALEURS PROPRES D(1) > D(2) ET D(3)=A(3,3) C C RECUPERATION INCA FEVRIER 85 EBERSOLT C==================================================================== IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C -INC PPARAM -INC CCOPTIO -INC CCREEL C DIMENSION A(3,*),D(*) DIMENSION r(3,3) * xpet=xpetit*10.D0 * D(3)=A(3,3) * Scaling de A amax=0.d0 do i=1,2 do j=1,2 amax=max(amax,abs(a(j,i))) enddo enddo * Matrice nulle if (amax.lt.xpet) then D(1)=XZERO D(2)=XZERO return endif C amax1=1.D0/amax do i=1,2 do j=1,2 R(j,i)=a(j,i)*amax1 enddo enddo * Trace J1(A) et determinant J2(A) de A xj1=R(1,1)+R(2,2) xj2=R(1,1)*R(2,2)-R(1,2)**2 * Le discriminant reduit J4(A) du polynome caracteristique en l : * x^2 - J1(A) x + J2(A) = 0 * est : J4(A) = (J1(A) / 2) ^ 2 - J2(A) * * Construisons S le deviateur de A : S = A - J1(A)/2 I * On a J1(S)=0 et lambda_A = lambda_S + J1(A)/2 * * A et S ont les memes vecteurs propres * Le polynome caracteristique de S est : * x^2 + J2(S) = 0 * avec J2(S) = - [ ((a11-a22)/2)^2 + a12^2 ] = -J4(A) * Cette expression de J4 est interessante car somme de carres donc positive * xj4 = ((R(1,1)-R(2,2))/2)**2+R(1,2)**2 xsj4=sqrt(xj4) stra=sign(1.d0,xj1) * Formules de Fagnano modifiees pour les deux racines * cf. The Ins and Outs of Solving Quadratic Equations with Floating-Point * Arithmetic, Frederic Goualard, HAL preprint x1=(xj1/2)+stra*xsj4 if (x1.eq.0.d0) then x2=0.d0 else x2=xj2/x1 endif if (stra.gt.0) then d(1)=x1 d(2)=x2 else d(1)=x2 d(2)=x1 endif * Scaling des valeurs propres d(1)=d(1)*amax d(2)=d(2)*amax RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales