Να γραφεί πρόγραμμα που να υπολογίζει
την ορίζουσα ενός τετραγωνικού πίνακα Α(nxn). Η ορίζουσα ενός τετραγωνικού
πίνακα είναι ίση με την ορίζουσα του ισοδύναμου άνω τριγωνικού πίνακα,
και η ορίζουσα του άνω τριγωνικού πίνακα είναι ίση με το γινόμενο των
στοιχείων της διαγωνίου του. Ο άνω τριγωνικός πίνακας προκύπτει από τον
τετραγωνικό βάσει της ιδιότητας ότι η ορίζουσα δεν μεταβάλλεται αν μια
στήλη ή γραμμή πολλαπλασιαστεί με έναν αριθμό και προστεθεί σε μια άλλη
στήλη ή γραμμή αντίστοιχα (βλ. απαλοιφή Gauss):
Κώδικας:
PROGRAM orizousa
IMPLICIT NONE
INTEGER, PARAMETER:: Nmax = 50
INTEGER:: N, i, j, k, l, m, zerodet
REAL:: A(Nmax,Nmax), c, det
WRITE(*,*) ' Dwse ti Diastasi tou Pinaka (N):'
READ(*,*) N
WRITE(*,*) ' Dwse ta stoixeia tou Pinaka A:'
READ(*,*) ((A(i,j),j=1,N),i=1,N)
WRITE(*,*) 'A ='
WRITE(*,'(3(3F6.1/))') ((A(i,j),j=1,N),i=1,N)
!
DO
k = 1, N-1
! - elegxos gia midenika ston pinaka
IF (A(k,k) == 0.00) THEN
zerodet = 1
DO l = k+1, N
IF (A(l,k) /= 0.00) THEN
DO m = k,
N
A(k,m)
= A(k,m) + A(l,m)
END DO
zerodet =
0
END IF
END DO
END IF
IF (zerodet == 1) EXIT
! - ypologismos trigwnikou
DO i = k+1, N
c = A(i,k)/A(k,k)
DO j = k, N
A(i,j) = A(i,j) - c*A(k,j)
END DO
END DO
END DO
WRITE(*,*) 'Atrig ='
WRITE(*,'(3(3F6.1/))') ((A(i,j),j=1,N),i=1,N)
! - ypologismos
orizousas
IF (zerodet == 1) THEN
det = 0.00
ELSE
det = A(1,1)
DO i = 2, N
det = det * A(i,i)
END DO
END IF
WRITE (*,*) 'Orizousa tou A: |A|=', det
END
Εκτέλεση:
Dwse ti Diastasi tou Pinaka (N):
3
Dwse ta stoixeia tou Pinaka A:
2 1 3 4 0 2 -1 3 1
A =
2.0 1.0 3.0
4.0 0.0 2.0
-1.0 3.0 1.0
Atrig =
2.0 1.0 3.0
0.0 -2.0 -4.0
0.0 0.0 -4.5
Orizousa tou
A: |A|= 18.00000
|
|