ΓΡΑΜΜΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΞΙΣΩΣΕΩΝ
Ι.
ΜΕΘΟΔΟΣ GAUSS
ΛΥΣΗ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ Ax = B (όπου Α ένας 3x3 πίνακας και Β ένας πίνακας στήλη)
Με
διαδοχικές
πράξεις ο
πίνακας Α
μετατρέπεται σε
άνω τριγωνικό,
και τότε η λύση
είναι προφανής
Το πρόγραμμα Gauss.for κάνει τις πράξεις με 3 διαφορετικούς τρόπους:
*************************************************************
* 1o MEROS THS ASKHSHS: APLH GRAFH TOY
PROGRAMMATOS *
*************************************************************
Στο
1ο μέρος, δε
χρησιμοποιούνται
πίνακες της fortran. Τα
στοιχεία των
πινάκων Α και Β
γράφονται
ένα-ένα και οι
πράξεις
γίνονται με τη
σειρά που
πρέπει και
μία-μία
a11= 3d0
a12=-1d0
a13= 2d0
a21= 1d0
a22= 2d0
a23= 3d0
a31= 2d0
a32=-2d0
a33=-1d0
b1 =12d0
b2 =11d0
b3 = 2d0
print*, 'Proto meros tou programmatos:'
print*, 'Oi pinakes A(3x3) kai B(3x1):'
print
'(4f7.3)',a11,a12,a13,b1
print
'(4f7.3)',a21,a22,a23,b2
print '(4f7.3)',a31,a32,a33,b3
print*
* BHMA 1o - MHDENIZW THN 1H STHLH
* 2h grammh
factor=a21/a11
a21=a11*factor-a21 !Mhdenizetai
a22=a12*factor-a22 !Allazei
a23=a13*factor-a23 !Allazei
b2 =b1 *factor-b2
!Allazei
* 3h grammh
factor=a31/a11
a31=a11*factor-a31 !Mhdenizetai
a32=a12*factor-a32 !Allazei
a33=a13*factor-a33 !Allazei
b3 =b1 *factor-b3
!Allazei
print*, '
print
'(4f7.3)',a11,a12,a13,b1
print
'(4f7.3)',a21,a22,a23,b2
print
'(4f7.3)',a31,a32,a33,b3
print*
* BHMA 2o - MHDENIZW THN 2H STHLH
* 3h grammh
factor=a32/a22
a31=a21*factor-a31 !Mhdenizetai
a32=a22*factor-a32 !Mhdenizetai
a33=a23*factor-a33 !Allazei
b3 =b2 *factor-b3
!Allazei
print*, '
print
'(4f7.3)',a11,a12,a13,b1
print
'(4f7.3)',a21,a22,a23,b2
print
'(4f7.3)',a31,a32,a33,b3
print*, 'O pinakas A exei ginei ano trigonikos'
print*
* LYSH TOY SYSTHMATOS
x3= b3 /a33
x2=(b2 -a23*x3)/a22
x1=(b1-a12*x2-a13*x3)/a11
print*, 'H lisi tou sistimatos:'
print'(f7.3)',x1
print'(f7.3)',x2
print'(f7.3)',x3
print*, 'Press
Enter to continue'
pause
print*
**************************************************
* 2o
MEROS THS ASKHSHS: GRAFH ME PINAKES *
**************************************************
Στο
2ο μέρος,
γίνεται χρήση
των πινάκων
της fortran. Οι
πράξεις
γίνονται
μία-μία με τη
σειρά που
πρέπει
a(1,1)= 3d0
a(1,2)=-1d0
a(1,3)= 2d0
a(2,1)= 1d0
a(2,2)= 2d0
a(2,3)= 3d0
a(3,1)= 2d0
a(3,2)=-2d0
a(3,3)=-1d0
b(1) =12d0
b(2) =11d0
b(3) = 2d0
print*, 'Deftero meros tou
programmatos'
print*, 'Oi pinakes A(3x3) kai B(3x1)'
print '(4f7.3)',a(1,1),a(1,2),a(1,3),b(1)
print '(4f7.3)',a(2,1),a(2,2),a(2,3),b(2)
print '(4f7.3)',a(3,1),a(3,2),a(3,3),b(3)
print*
* BHMA 1o - MHDENIZW THN 1H STHLH
* 2h grammh
factor=a(2,1)/a(1,1)
a(2,1)=a(1,1)*factor-a(2,1) !Mhdenizetai
a(2,2)=a(1,2)*factor-a(2,2) !Allazei
a(2,3)=a(1,3)*factor-a(2,3) !Allazei
b(2) =b(1)
*factor-b(2) !Allazei
* 3h grammh
factor=a(3,1)/a(1,1)
a(3,1)=a(1,1)*factor-a(3,1) !Mhdenizetai
a(3,2)=a(1,2)*factor-a(3,2) !Allazei
a(3,3)=a(1,3)*factor-a(3,3) !Allazei
b(3) =b(1)
*factor-b(3) !Allazei
print*, '
print '(4f7.3)',a(1,1),a(1,2),a(1,3),b(1)
print '(4f7.3)',a(2,1),a(2,2),a(2,3),b(2)
print '(4f7.3)',a(3,1),a(3,2),a(3,3),b(3)
print*
* BHMA 2o - MHDENIZW THN 2H STHLH
* 3h grammh
factor=a(3,2)/a(2,2)
a(3,1)=a(2,1)*factor-a(3,1) !Mhdenizetai
a(3,2)=a(2,2)*factor-a(3,2) !Mhdenizetai
a(3,3)=a(2,3)*factor-a(3,3) !Allazei
b(3) =b(2)
*factor-b(3) !Allazei
print*, '
print '(4f7.3)',a(1,1),a(1,2),a(1,3),b(1)
print '(4f7.3)',a(2,1),a(2,2),a(2,3),b(2)
print '(4f7.3)',a(3,1),a(3,2),a(3,3),b(3)
print*, 'O pinakas A exei ginei ano trigonikos'
print*
* LYSH TOY SYSTHMATOS
x(3)= b(3) /a(3,3)
x(2)=(b(2) -a(2,3)*x(3))/a(2,2)
x(1)=(b(1)-a(1,2)*x(2)-a(1,3)*x(3))/a(1,1)
print*, 'H lisi tou sistimatos:'
print'(f7.3)',x(1)
print'(f7.3)',x(2)
print'(f7.3)',x(3)
print*, 'Press
Enter to continue'
pause
print*
*******************************************
* 3o MEROS THS ASKHSHS: GENIKEYSH *
*******************************************
Στο
3ο μέρος,
γίνεται και
πάλι χρήση
πινάκων, αλλά
αυτή τη φορά οι
πράξεις μεταξύ
των γραμμών ή
των στηλών γίνονται
με επαναλήψεις
(loops).
Παρατηρήστε
πόσο πιο
«συμπυκνωμένο»
είναι το πρόγραμμα.
a(1,1)= 3d0
a(1,2)=-1d0
a(1,3)= 2d0
a(2,1)= 1d0
a(2,2)= 2d0
a(2,3)= 3d0
a(3,1)= 2d0
a(3,2)=-2d0
a(3,3)=-1d0
b(1) =12d0
b(2) =11d0
b(3) = 2d0
print*, 'Trito meros tou
programmatos'
print*, 'Oi pinakes A(3x3) kai B(3x1)'
print '(4f7.3)',a(1,1),a(1,2),a(1,3),b(1)
print '(4f7.3)',a(2,1),a(2,2),a(2,3),b(2)
print '(4f7.3)',a(3,1),a(3,2),a(3,3),b(3)
print*
do k=1,N-1
do i=k+1,N
factor=a(i,k)/a(k,k)
do j=k,N
a(i,j)=a(k,j)*factor-a(i,j)
enddo
b(i)=b(k)*factor-b(i)
enddo
print*, 'Oi pinakes A kai
B:'
print
'(4f7.3)',a(1,1),a(1,2),a(1,3),b(1)
print '(4f7.3)',a(2,1),a(2,2),a(2,3),b(2)
print
'(4f7.3)',a(3,1),a(3,2),a(3,3),b(3)
print*
enddo
print*, 'O pinakas A exei ginei ano trigwnikos'
x(N)=b(N)/a(N,N)
do k=N-1,1,-1
sum=b(k)
do j=k+1,N
sum=sum-x(j)*A(k,j)
enddo
x(k)=sum/A(k,k)
enddo
print*, 'H lisi tou sistimatos:'
print'(f7.3)',x(1)
print'(f7.3)',x(2)
print'(f7.3)',x(3)
print*, 'Press
Enter to exit'
pause
end