Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

Ονοματεπώνυμο: Ζαχαριουδάκης Νίκος


Αριθμός Μητρώου: 2980
Ημερομηνία παράδοσης αναφοράς: 10.11.2005

Εργαστηριακή Αναφορά

Μαθηματικό μοντέλο μελέτης σε PC:

Αντίστροφος πίνακας A −1 (m × n )

Subroutines: SGETRF(M, N, A, LDA, IPIV, INFO)


SGETRI(N, A, LDA, IPIV, WORK, LWORK, INFO)

Ηλεκτρονικοί Υπολογιστές ΙΙ 1
Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

Πρόβλημα:

Έστω ο παρακάτω γραμμικός πίνακας A (3× 3) :

 2 − 1 1
A =  1 3 2
− 1 − 1 1 

Αξιοποιώντας τα παραπάνω δεδομένα, σε προγραμματιστικό περιβάλλον Η/Υ:

i. Προσδιορίστε τον αντίστροφο πίνακα του A(3× 3) , A −1 (3 × 3) ,


επαληθεύοντας το αποτέλεσμα σας.

Επίλυση προβλήματος σε προγραμματιστικό περιβάλλον Η/Υ:

Θα αναπτύξουμε κώδικα σε προγραμματιστική γλώσσα Fortran, ο οποίος


θα κάνει χρήση δύο εξειδικευμένων subroutines της βιβλιοθήκης Fortran,
Lapack. Έτσι, κάνοντας compilation του εν λόγω κώδικα και εκτελώντας εν
συνεχεία το πρόγραμμα, το τελευταίο θα είναι σε θέση να:

 Αναγνώσει τον παραπάνω πίνακα A (3× 3) από το αρχείο


«expdata.out».
 Εξάγει τον αντίστροφο του A(3× 3) , A −1 (3 × 3) .

 Εξάγει το πίνακα A × A −1 (3× 3) .

Lapack subroutines: SGETRF(M, N, A, LDA, IPIV, INFO)

SGETRI(N, A, LDA, IPIV, WORK, LWORK, INFO)

Ηλεκτρονικοί Υπολογιστές ΙΙ 2
Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

Κώδικας Fortran

c234567
program ergastiriaki_anafora_6
implicit none
real A(3,3),B(3,3),C(3,3),WORK(3)
integer i,j,k,M,N,LDA,IPIV(3),INFO,LWORK
call expdata(A)
print*, ""
print*, "Eisagate ton eksis pinaka A(3x3) dedomenon:"
do i=1,3
print*, ""
write (*,1) A(i,1), A(i,2), A(i,3)
1 format (4x,F4.1,4X,F4.1,4X,F3.1)
enddo
do i=1,3
do j=1,3
B(i,j)=A(i,j)
enddo
enddo
M=3
N=3
LWORK=N
LDA=N
call SGETRF(M,N,A,LDA,IPIV,INFO)
call SGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
print*, ""
print*, ""
print*, "Me vasi ton pinaka A(3x3) pou eisagate, o antistrofos tou
& A(3x3), A^-1(3x3), einai:"
do i=1,3
print*, ""
write (*,2) A(i,1), A(i,2), A(i,3)
2 format (3x,F6.3,3x,F6.3,3x,F6.3)
enddo
print*, ""
print*, ""
call ginomeno (A,B,C)
print*, "To ginomeno A(3x3)*A^-1(3*3), einai iso me:"
do i=1,3
print*, ""
write(*,3) C(i,1),C(i,2),C(i,3)
3 format (3X,F5.2,3X,F5.2,3X,F5.2)
enddo
print*, ""
end

Ηλεκτρονικοί Υπολογιστές ΙΙ 3
Πανεπιστήμιο Κρήτης – Τμήμα Φυσικής

subroutine expdata(A)
implicit none
real A(3,3)
integer i
open (unit=4,file="expdata.out")
do i=1,3
read(4,5) A(i,1),A(i,2),A(i,3)
5 format (4x,F4.1,4x,F4.1,4x,F3.1)
enddo
end

subroutine ginomeno(A,B,C)
implicit none
real A(3,3),B(3,3),C(3,3)
integer i,j,k
do i=1,3
do j=1,3
C(i,j)=0
do k=1,3
C(i,j)=C(i,j)+A(i,k)*B(k,j)
enddo
enddo
enddo
end

Ερώτημα i

Ο αντίστροφος του A(3× 3) , A −1 (3 × 3) , εκτελώντας το πρόγραμμα είναι:

 0,333 0,000 − 0,333


A = − 0,200 0,200 − 0,200
−1

 0,133 0,200 0,467 

Σχετικά με την επαλήθευση, αρκεί I n = A × A −1 . Έτσι, εκτελώντας το πρόγραμμα, το


γινόμενο προσδιορίζεται ως εξής:

1,00 0,00 0,00


A × A = 0,00 1,00 0,00 = I n
−1

0,00 0,00 1,00 

Συνεπώς, ο εξαγόμενος αντίστροφος του A(3× 3) , A −1 (3 × 3) , ευσταθεί.

Ηλεκτρονικοί Υπολογιστές ΙΙ 4

You might also like