program ozdegervektor
implicit real (A-H,O-Z)
parameter (N=3)
dimension A(N,N) , V(N,N)
data A/5,4,2,4,5,2,2,2,2/
tol = 1.0E-6
call JACOBI(A,V,N,TOL)
do i=1,N
do j=1,N
write(*,*) J,'ozdeger:' , A(I,J)
write(*,*) I, V(I,J)
end do
end do
end
SUBROUTINE JACOBI(A,V,N,TOL)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(N,N), V(N,N)
SIFIR=0.0D0
TOPLAM=SIFIR
TOL=DABS(TOL)
DO 20 I=1,N
DO 10 J=1,N
IF (TOL.GT.SIFIR) V(I,J)=SIFIR
10 TOPLAM=TOPLAM+DABS(A(I,J))
IF(TOL.GT.SIFIR) V(I,I)=1.0
20 CONTINUE
IF (N.EQ.1)RETURN
IF(TOPLAM.LE.SIFIR) RETURN
TOPLAM = TOPLAM/DFLOAT(N*N)
30 TTOPLAM=SIFIR
AMAX=SIFIR
DO 50 J=2,N
IH=J-1
DO 50 I=1,IH
AA=DABS(A(I,J))
IF(AA.GT.AMAX) AMAX=AA
TTOPLAM=TTOPLAM+AA
IF(AA.LT.0.1*AMAX) GO TO 50
AA=ATAN2(2.0*A(I,J),A(I,I)-A(J,J))/2.0
SINAA=DSIN(AA)
COSAA=DCOS(AA)
DO 60 K=1,N
TT=A(K,I)
A(K,I)=COSAA*TT+SINAA*A(K,J)
A(K,J)=-SINAA**TT+COSAA*A(K,J)
TT=V(K,I)
V(K,I)=COSAA*TT+SINAA*V(K,J)
60 V(K,J)=-SINAA*TT+COSAA*V(K,J)
A(I,I)=COSAA*A(I,I)+SINAA*A(J,I)
A(J,J)=-SINAA*A(I,J)+COSAA*A(J,J)
A(I,J)=SIFIR
DO 40 K=1,N
A(I,K)=A(K,I)
A(J,K)=A(K,J)
40 CONTINUE
50 CONTINUE
IF(DABS(TTOPLAM)/TOPLAM.GT.TOL) GO TO 30
RETURN
END
sonuçları ekrana yazdırmıyor.Gidişatın neresinde hata var acaba?
Hocam bu bilim dünyası Fortranı neden bırakmaz ki? :)
Bu uygulamayı başka bir dilde yazma şansınız yok mu? Altı üstü 50 satır kod başka bir dile aktarılabilir. Başka bir akademisyen görmediği sürece cevap alamayabilirsiniz. Fortran bilenlerin sayısı bayağı bir az. :(
Matrislerle özdeğer vektörü gibi bir şey bulmaya çalışıyorsunuz galiba.
@travego0403 aynen doğru söylüyorsun.Ben çok söyledim başka bir dile geçelim diye ama nümerik fizik dili fortran.Belki senle bişeyler yapıp ortaya koyarsak değişir :)
Basit programlar için neden olmasın? :)
Konunun silinmesini istiyorum.Kodda gereğinden fazla hata var ve baştan yazıldı.
Nasıl çözüldü?
Kodu yazan hoca çok sayıda hata yaptığını farkletti ve kodu geri çekti :=)
Gereğini yapalım o halde ;)
Sorun aslinda cozulmemis. @alquirel ve @bahdem musaadenizle [Cozuldu] etiketini kaldiriyorum.