shmeiwseis
TRANSCRIPT
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ - ΤΟΜΕΑΣ ΚΑΤΑΣΚΕΥΩΝ
ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟ∆ΟΙ Μανόλης Γ. Σφακιανάκης Επίκουρος Καθηγητής
Σηµειώσεις
ΠΑΤΡΑ 2005
1
ΑΝΤΙ ΠΡΟΛΟΓΟΥ
Οι σηµειώσεις που περιέχονται στο τεύχος αυτό αποτελούν συνέχεια της ύλης του 1ου και 2ου
Κεφαλαίου του βιβλίου Αριθµητικές Μέθοδοι του Καθηγητή του Γενικού Τµήµατος του Παν/µίου
Πατρών, κ. Β. Β. Μάρκελλου.
Περιγράφονται αναλυτικά τα ακόλουθα:
η µέθοδος Bairstow, για την εύρεση όλων των ριζών (πραγµατικών και µιγαδικών)
κανονικών πολυωνύµων n-στού βαθµού,
οι µέθοδοι Crout και Cholesky, για την επίλυση συστήµατος γραµµικών εξισώσεων, και
η µέθοδος Krylov, για την εύρεση των συντελεστών του χαρακτηριστικού πολυωνύµου
καθώς καί του συνόλου των ιδιοδιανυσµάτων ενός τετραγωνικού πίνακα αναφορικά µε το
θεµελιώδες πρόβληµα ιδιοτιµών.
Παρατίθεται πίνακας σηµείων ολοκλήρωσης & αντίστοιχων βαρών για ολοκλήρωση κατά
Gauss.
Ολα τα παραπάνω συνοδεύονται από αντίστοιχες υπορουτίνες σε FORTRAN 90/95.
Μανόλης Γ. Σφακιανάκης
Επίκουρος Καθηγητής
Πάτρα 2005
2
1. Η ΜΕΘΟ∆ΟΣ Bairstow
Η µέθοδος του Bairstow αναφέρεται στο πρόβληµα της εύρεσης όλων των ριζών µίας εξίσωσης η
οποία έχει τη µορφή κανονικού πολυωνύµου n-στού βαθµού µε γενικό τύπο
0.....)( 012
22
21
1 =++++++= −−
−− axaxaxaxaxaxf n
nn
nn
n (1.1)
Στη γενική περίπτωση, η πολυωνυµική εξίσωση (1.1) δύναται να έχει πραγµατικές αλλά, ίσως,
και µιγαδικές ρίζες. Ως γνωστόν, εάν µία ρίζα είναι µιγαδική τότε ρίζα θα είναι και η συζυγής της.
Εποµέ-νως, εάν οι συζυγείς µιγαδικοί αριθµοί
ziy +== ρρ1 , ziy −== ρρ2 (1.2) είναι ρίζες της (1.1), τότε το τριώνυµο
ρρρρρρ ++−=−−= xxxxxg )())(()( 2 (1.3) θα είναι τέλειος διαιρέτης του πολυωνύµου f(x). Με βάση αυτό, η (1.1) ξαναγράφεται ως
).....()()()()( 012
23
32
2 bxbxbxbxbxgxbxgxf nn
nn +++++⋅=⋅= −
−−
− (1.4) όπου το πηλίκο b(x) θα είναι πολυώνυµο n-2 βαθµού και το υπόλοιπο θα προκύπτει µηδέν, λόγω της
θεώρησης ότι το g(x) είναι τέλειος διαιρέτης. Κρίνεται εποµένως σκόπιµο να αναζητούνται οι ρίζες
της (1.1) ανά ζεύγη, ως ρίζες τριωνύµων-τέλειων διαιρετών της µορφής g(x). Αναζητούνται δηλαδή
όλα τα δυνατά τριώνυµα g(x) τα οποία είναι τέλειοι διαιρέτες του f(x). Eτσι, µετά την εύρεση του
πρώτου διαιρέτη, έστω g1(x), η διαδικασία θα επαναληφθεί µε την αναζήτηση του δευτέρου διαιρέτη,
g2(x), ως διαιρέτη του πηλίκου b1(x) στη θέση του f(x). Ο τρίτος διαιρέτης, g3(x), θα αναζητηθεί ως
διαιρέτης του νέου πηλίκου b2(x), κ.ο.κ. ∆ηλαδή
[ ] [ ]
[ ] [ ]
)()()()()(..............................................................................................................................................................................................................................................................................................................
).....(
)()()()()()()()()()()().....(
)()()()()()()()().....()()()()(
21
0,31,32
2,37
7,36
6,3
3213321221
0,21,22
2,25
5,24
4,2
2122111
0,11,12
2,13
3,12
2,1111
xbxgxgxgxf
bxbxbxbxb
xgxgxgxbxgxgxgxbxgxgxfbxbxbxbxb
xgxgxbxgxgxbxgxfbxbxbxbxbxgxbxgxf
kk
nn
nn
nn
nn
nn
nn
⋅⋅⋅⋅⋅⋅⋅=
+++++⋅
⋅⋅⋅=⋅⋅⋅=⋅⋅=
+++++⋅
⋅⋅=⋅⋅=⋅=
+++++⋅=⋅=
−−
−−
−−
−−
−−
−−
(1.5)
όπου 2nk = και 1)( =xbk εάν το n είναι άρτιος, ή, 2)1( −= nk και baxxbk +=)( εάν το n
είναι περιττός. Από τα παραπάνω είναι προφανές ότι όποτε η διακρίνουσα του τριωνύµου της (1.3)
προκύπτει µηδέν ή θετική, τότε θα λαµβάνονται πραγµατικές ρίζες. Ετσι, η ιδέα του να διαιρείται
διαδοχικά το f(x) µε τριώνυµα της µορφής g(x) παρέχει, επί το γενικότερον, τη δυνατότητα απόκτησης
όλων των ριζών, πραγµατικών και µιγαδικών.
3
Η αντικατάσταση των (1.2) στην (1.3), µετά την εκτέλεση των σχετικών πράξεων, δίνει
22
2
, 2, )(
zyqypqpxxxg+=−=
++= (1.6)
Το αρχικό πρόβληµα λοιπόν ανάγεται στην αναζήτηση κατάλληλων συντελεστών pk και qk τέτοιων
ώστε τα τριώνυµα gk(x) να προκύπτουν τέλειοι διαιρέτες του f(x), βάσει των (1.5). Στα επόµενα οι
δείκτες k θα παραλείπονται χάριν εποπτικής απλότητας των σχέσεων.
Προς το σκοπό αυτό, αρχικά υποτίθενται κάποιες αυθαίρετες προσεγγίσεις των p και q, µε στόχο στη
συνέχεια να αναζητηθούν κατάλληλες διορθώσεις τους, ∆p και ∆q, µέσω κάποιας επαναληπτικής
διαδικασίας που θα προκύψει. Οσο τα p και q δεν είναι τα κατάλληλα (µε την έννοια που
αναφέρθηκε) από τη διαίρεση )()( xgxf θα προκύπτει και υπόλοιπο, έστω r(x). Ετσι η (1.4)
ξαναγράφεται, επί το γενικότερον, ως
)().....()(
)()()()(
012
23
32
22 SRxbxbxbxbxbqpxx
xrxbxgxfn
nn
n +++++++⋅++=
=+⋅=−
−−
−
(1.7)
όπου r(x) = Rx + S είναι το πιθανό υπόλοιπο (προφανώς, κατά µέγιστον, ενός βαθµού µικρότερου του
διαιρέτη g(x), άρα πρωτοβάθµιο). Θεωρώντας τώρα ότι οι τιµές των p και q (µέσω της επαναληπτικής
διαδικασίας που θα επακολουθήσει) βελτιώνονται, τείνοντας προς τις σωστές, είναι προφανές ότι η
τιµή του υπολοίπου r(x) θα πρέπει και αυτή να τείνει σταδιακά προς το µηδέν. Προκύπτει δηλαδή η
απαίτηση ικανοποίησης της συνθήκης
εε ≤≤⇒→+= SRSRxxr , 0)( (1.8) όπου ε είναι πολύ µικρός αριθµός (π.χ. 10-7 ή και αρκετά µικρότερος). Η (1.8) µπορεί να
χρησιµοποιηθεί ως «πιθανώς» κατάλληλο κριτήριο τερµατισµού της επαναληπτικής διαδικασίας
υπολογισµού των p και q.
H εκτέλεση των πράξεων στην (1.7) δίνει
)( )( )(
)( ....................................... )(
)(
)(
)(
0
10
2210
3321
3345
2234
123
2
SqbxRqbpbxqbpbb
xqbpbb
xqbpbb
xqbpbb
xpbb
xbxf
nnnn
nnnn
nnn
nn
++++++++++
++++
++++++
++++
+++
+=
−−−−
−−−−
−−−
−
(1.9)
Η εξίσωση των συντελεστών των δυνάµεων του x των (1.1) και (1.9) δίνει
4
0 ,
............................................
..........................................
*1
*
00
101
2120
3231
3435
2324
*1213
**12
00
101
2102
3213
3453
2342
231
2
==
⎪⎪⎪⎪⎪⎪
⎭
⎪⎪⎪⎪⎪⎪
⎬
⎫
⎪⎪⎪⎪⎪⎪
⎩
⎪⎪⎪⎪⎪⎪
⎨
⎧
−=−−=−−=−−=
−−=−−=
−−=
−−=
⇔
⎪⎪⎪⎪⎪⎪
⎭
⎪⎪⎪⎪⎪⎪
⎬
⎫
+=++=
++=++=
++=++=
+==
−
−−−−
−−−−
−−−−
−−
−−−−
−−−−
−−−
−
nn
nnnn
nnnn
nnnn
nnnn
nnnn
nnnn
nnn
nn
bb
qbaSqbpbaRqbpbabqbpbab
qbpbabqbpbabqbpbab
qbpbab
SqbaRqbpba
qbpbbaqbpbba
qbpbbaqbpbba
pbbaba
(1.10)
Οι σχέσεις (1.10) αποτελούν ένα γραµµικό σύστηµα n+1 εξισώσεων µε n+3 αγνώστους τα R, S, p, q
και τους n-1συντελεστές bi του πηλίκου b(x). Mε τη συµπλήρωση των εκφράσεων των bn-2 και bn-3 µε
τους µηδενικούς όρους *nb και *
1−nb , οι πρώτες n-1 σχέσεις περιγράφονται τελικά από την
ακολουθία
0,1,2),.....,3(),2( ,
0
212
1
−−=−−===
+++
−
nnkqbpbabbb
kkkk
nn (1.11)
Οι όροι R και S του υπολοίπου παραµένουν ως έχουν, δηλαδή
00
101
qbaSqbpbaR
−=−−=
(1.12)
Με δεδοµένα p και q, το σύστηµα των (1.10), ή ισοδύναµα των (1.11) και (1.12), µπορεί να επιλυθεί
ως προς τα R, S και bi, αρχίζοντας από k = n – 2 για τα τελευταία. Οσο όµως οι τιµές των p και q δεν
είναι κατάλληλες (υπό την έννοια που έχει προαναφερθεί), οι όροι R και S στη γενική περίπτωση θα
είναι µή µηδενικοί, δηλαδή
0),(0),(
≠=≠=
qpSSqpRR
(1.13)
Προκειµένου να υπάρξει τέλεια ικανοποίηση του κριτηρίου (1.8), µε ε = 0, αναζητούνται κατάλληλες
διορθώσεις ∆p και ∆q, των p και q αντίστοιχα, τέτοιες ώστε
0),(0),(
=∆+∆+==∆+∆+=
qqppSSqqppRR
(1.14)
Η ανάπτυξη των (1.14) σε σειρές Taylor, παραλείποντας τους όρους δευτέρας τάξεως και άνω, οδηγεί
στις προσεγγιστικές σχέσεις
q
qSp
pSqpSqqppS
qqRp
pRqpRqqppR
∆∂∂
+∆∂∂
+≅=∆+∆+
∆∂∂
+∆∂∂
+≅=∆+∆+
),(0),(
),(0),( (1.15)
5
Οι (1.15) αποτελούν ένα γραµµικό σύστηµα ως προς τις διορθώσεις ∆p και ∆q. Ετσι ξαναγράφονται
σε µητρωϊκή µορφή, ως
⇔⎥⎦
⎤⎢⎣
⎡−≅⎥
⎦
⎤⎢⎣
⎡∆∆
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
∂∂
∂∂
∂∂
∂∂
),(),(
qpSqpR
qp
qS
pS
qR
pR
⎥⎦
⎤⎢⎣
⎡⋅−=⎥
⎦
⎤⎢⎣
⎡⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
∂∂
∂∂
∂∂
∂∂
−≅⎥⎦
⎤⎢⎣
⎡∆∆
⇔ −
−
),(),(
][),(),(
1
1
qpSqpR
AqpSqpR
qS
pS
qR
pR
qp (1.16)
Οι τιµές των διορθώσεων ∆p και ∆q που θα προκύψουν από τις (1.16) θα αναπροσαρµόσουν τις
υποτεθείσες τιµές των p και q, λαµβάνοντας έτσι τις επόµενες προσεγγίσεις τους
qqqppp
ii
ii
∆+=∆+=
+
+
1
1 (1.17)
όπου i είναι ο αριθµός της επανάληψης. Η διαδικασία επαναλαµβάνεται µε τις νέες τιµές των p και q.
Είναι προφανές ότι ένα δεύτερο κριτήριο τερµατισµού της διαδικασίας, εκτός αυτού της (1.8), µπορεί
να είναι και το ακόλουθο εε ≤∆≤∆⇒→∆→∆ qpqp , 0 , 0 (1.18) Τελικά, προκειµένου να είναι δυνατή η επίλυση των (1.16), αποµένει ο υπολογισµός των µερικών
παραγώγων
, , , qS
pS
qR
pR
∂∂
∂∂
∂∂
∂∂
Η µερική παραγώγιση των (1.12) ως προς p και q , λαµβάνοντας υπ’ όψη από τις (1.11) ότι
bi = bi(p,q), δίνει
qbqb
qS
pbq
pS
qbq
qbpb
qR
pbq
pbpb
pR
∂∂
−−=∂∂
∂∂
−=∂∂
∂∂
−∂∂
−−=∂∂
∂∂
−∂∂
−−=∂∂
00
0
101
100
,
, (1.19)
Από τις (1.19) φαίνεται ότι προκειµένου να υπολογισθούν οι µερικές παράγωγοι των R και S ως προς
p και q, αρκεί να υπολογισθούν οι τιµές των µερικών παραγώγων των b0 και b1 ως προς p και q. Για το
σκοπό αυτό, η µερική παραγώγιση της (1.11) ως προς p και q δίνει
q
bqq
bpbqb
pbq
pbpb
pb kk
kkkk
kk
∂∂
−∂∂
−−=∂∂
∂∂
−∂∂
−−=∂∂ ++
+++
+21
221
1 , (1.20)
6
όπου 0,1,2),.....,3(),2( −−= nnk . Θέτοντας τώρα pbc ∂∂= και qbd ∂∂= προκύπτουν οι παρα-
κάτω ακολουθίες που δίνουν τις τιµές των µερικών παραγώγων
0,1,2),.....,3(),2( , 212
211
−−=
⎪⎪⎭
⎪⎪⎬
⎫
⎪⎪⎩
⎪⎪⎨
⎧
−−−==∂∂
−−−==∂∂
+++
+++
nnkqdpdbd
qb
qcpcbcpb
kkkkk
kkkkk
(1.21)
Η προσεκτική παρατήρηση των (1.21) προδίδει πιθανή συχέτιση µεταξύ των ακολουθιών ck και dk. Οι
ανωτέρω δύο ακολουθίες ck και dk, µε εξαίρεση τους όρους bk+1 και bk+2, έχουν όρους εκκίνησης
κοινούς σε δείκτες. Προκειµένου να υπολογισθούν οι τιµές αυτών των όρων, υπολογίζονται οι πρώτοι
όροι των ακολουθιών, για k = n – 2:
nnnn
n
nnnnn
qdpdbdq
b
qcpcbcp
b
−−−==∂∂
−−−==∂∂
−−−
−−−−
122
1122
(1.22)
Οµως από τις (1.11) προκύπτει ότι οι προηγούµενοι (προαπαιτούµενοι) όροι cn, cn-1, dn, dn-1 από τους
οποίους εξαρτώνται τα cn-2 και dn-2 είναι µηδενικοί. Πράγµατι, είναι
000 1111
1 ====⇔=∂∂
=∂∂
=∂∂
=∂∂
⇒== −−−−
− nnnnnnnn
nn ddccq
bqb
pb
pbbb (1.23)
Από τις (1.22) λοιπόν, λόγω των (1.11) και (1.23), προκύπτει τελικά ότι
022 == −− nn dc (1.24) Βάσει των (1.21), οι διαδοχικοί όροι ck+1 και dk, των δύο ακολουθιών ck και dk αντίστοιχα, είναι
0,1,2),.....,4(),3( , 212
32211
−−=
⎪⎪⎭
⎪⎪⎬
⎫
⎪⎪⎩
⎪⎪⎨
⎧
−−−==∂∂
−−−==∂∂
+++
+++++
nnkqdpdbd
qb
qcpcbcp
b
kkkkk
kkkkk
(1.25)
Τώρα, οι ακολουθίες ck+1 και dk µε εξαίρεση τον όρο bk+2 διαφέρουν σε δείκτες ως προς τους προαπαι-
τούµενους όρους εκκίνησης ck+2, ck+3, dk+1, dk+2. Οι πρώτοι όροι των ακολουθιών (1.25), για k = n – 3,
προκύπτουν:
1213
3
1122
−−−−−
−−−−
−−−==∂∂
−−−==∂∂
nnnnn
nnnnn
qdpdbdq
b
qcpcbcp
b
(1.26)
7
Λόγω όµως των (1.23) και (1.24) προκύπτει ότι cn-2 = dn-3 και κατ’ επέκταση
0,1,2),.....,4(),3( , 1 −−== + nnkcd kk (1.27) Ετσι οι (1.21), (1.23) και (1.27) ξαναγράφονται στην τελική µορφή
0,1,2),.....,3(),2( ,
0
1
211
11
−−=
⎪⎪⎪
⎭
⎪⎪⎪
⎬
⎫
⎪⎪⎪
⎩
⎪⎪⎪
⎨
⎧
==∂∂
−−−==∂∂
===∂∂
=∂∂
+
+++
−−
nnk
cdqb
qcpcbcpb
ccp
bpb
kkk
kkkkk
nnnn
(1.28)
Βάσει λοιπόν των (1.28), οι σχέσεις (1.19) των µερικών παραγώγων των R και S ως προς p και q
δίνονται στην τελική τους µορφή
100
211100
,
,
qcbqSqc
pS
qcpcbqRqcpcb
pR
−−=∂∂
−=∂∂
−−−=∂∂
−−−=∂∂
(1.29)
Οι όροι c0, c1 και c2 θα υπολογισθούν ως οι τελευταίοι τρείς όροι τής ακολουθίας ck των (28),
αρχίζοντας τους υπολογισµούς από k = n - 2. Ετσι, οι διορθώσεις ∆p και ∆q των p και q αντίστοιχα,
µπορούν πλέον να υπολογισθούν από τις (1.16).
Eίναι προφανές ότι όσο τα αρχικά p και q είναι πιό κοντά στις πραγµατικές τους τιµές (οι οποίες
αντιστοιχούν σε ένα ζεύγος ριζών) τόσο λιγότερες επαναλήψεις απαιτούνται για τον πιό ακριβή
προσδιορισµό τους. Αυτό οδηγεί στο συµπέρασµα ότι εάν υπάρχουν καλές εκτιµήσεις για δύο ρίζες
της (1.1) (π.χ. µέσω µεθόδου Newton-Raphson, η οποία όµως και αυτή απαιτεί ενίοτε καλή αρχική
εκτίµησης της ρίζας) ή είναι όντως γνωστές δύο ρίζες της (1.1), τότε είναι σκόπιµο να «καθοδηγηθεί»
ασφαλέστερα η σύγκλιση της µεθόδου ξεκινώντας µε αρχικές εκτιµήσεις τα p και q που αντιστοιχούν
στις ρίζες αυτές. Ωστόσο, στη γενική περίπτωση όπου αυτό είναι ανέφικτο, τότε υποτίθενται κάποια
αυθαίρετα αρχικά p και q (συνήθως λαµβάνονται ως εκκίνηση οι τιµές p = q = 0).
Iδιαίτερη προσοχή χρήζει το γεγονός ότι ενδέχεται, και µάλιστα µε πιθανότητα όχι ευκαταφρόνητη,
λόγω σφαλµάτων στρογγύλευσης του Η/Υ (round off errors) η µέθοδος να µήν οδηγήσει στις ακριβείς
τιµές των ριζών (τόσο των πραγµατικών όσο και των πιθανών µιγαδικών) αλλά σε κάποιες αρκετά
καλές προσεγγίσεις τους. ∆ηλαδή τουλάχιστον ένα από τα κριτήρια (1.8) ή (1.18), µετά το τέλος ενός
προκαθορισµένου µέγιστου αριθµού επαναλήψεων, να µην ικανοποιούνται. Αυτό οφείλεται στις
πιθανώς κακές αρχικές εκτιµήσεις των p και q αφ’ ενός, και στην αδυναµία λόγω στρογγύλευσης στην
επίλυση του συστήµατος των (1.16), αφ’ ετέρου. Η διάγνωση αυτού του προβλήµατος µπορεί να γίνει
µε αντικατάσταση όλων των ριζών και υπολογισµό της τιµής της f(x) για κάθε µία ξεχωριστά.
8
Προκειµένου να αποφασισθεί εάν η συνολική λύση (εύρεση όλων των ριζών) είναι αποδεκτή, αρκεί
για όλες τις ρίζες να ικανοποιείται το κριτήριο nif i ,.....,3,2,1 , )( =≤ ερ (1.30) όπου ρi είναι ρίζα της (1.1) και ε πολύ µικρός αριθµός. Σε περίπτωση όπου το κριτήριο της (1.30) δεν
ικανοποιείται, τότε είναι σκόπιµη µία δεύτερη επανάληψη του συνολικού αλγορίθµου µε τιµές
εκκίνησης p και q αυτές οι οποίες θα αντιστοιχούν σε δύο ρίζες ρi και ρj οι οποίες ικανοποιούν
καλύτερα το κριτήριο της (1.30). Η περίπτωση µή ικανοποίησης και πάλι του κριτηρίου της (1.30)
είναι εξαιρετικά σπάνια και οφείλεται συνήθως σε µεγάλες διαφορές των τάξεων µεγέθους των
συντελεστών ai της (1.1). Πιθανώς, επόµενοι κύκλοι επανάληψης, ή, αύξηση του αριθµού των
επαναλήψεων για τον υπολογισµό των ∆p και ∆q ίσως λύσει το πρόβληµα.
Θεσπίζεται λοιπόν ως κύκλος υπολογισµού, η επανάληψη της συνολικής διαδικασίας σε περίπτωση
µη ικανοποίησης του κριτηρίου της (1.30) αφού πρώτα έχει εξαντληθεί ο µέγιστος επιτρεπόµενος
αριθµός επαναλήψεων υπολογισµού των ∆p και ∆q, κοινός για όλα τα ζεύγη ριζών.
Είναι επίσης προφανές ότι καθ’ όσον τα R και S είναι συναρτήσεις των p και q, η ικανοποίηση του
κριτηρίου της (1.8) θα υφίσταται µόνο για σχεδόν άριστες τιµές των p και q, οπότε η επαναληπτική
διαδικασία υπολογισµού των διορθώσεων ∆p και ∆q µπορεί να παρακάµπτεται θεωρώντας τα
συγκεκριµένα p και q ως άριστα. Αυτό σηµαίνει ότι το όριο ε του κριτηρίου της (1.8) θα πρέπει να
είναι πολύ µικρό (π.χ. ε ≤ 10-12 ή και µικρότερο). Ανάλογοι συλλογισµοί ισχύουν και για το όριο ε του
κριτηρίου της (1.18). Είναι προφανές, λόγων των (1.14), ότι η ικανοποίηση του κριτηρίου της (1.18)
συνεπάγεται αυτόµατη ικανοποίηση του κριτηρίου της (1.8).
Τέλος, σε επίπεδο υλοποίησης της µεθόδου σε Η/Υ, θεσπίζονται και τα ακόλουθα κριτήρια
προκειµένου να λαµβάνονται υπ’ όψη τα σχετικά σφάλµατα στρογγύλευσης.
1. Κριτήριο αδύνατης επίλυσης των (1.16)
εάν 0]det[ ]det[0 =⇒≤≠ AA ε (1.31) 2. Οριο µηδενικής διακρίνουσας του τριωνύµου της (1.6)
εάν 04 40 22 =−⇒≤−≠ qpqp ε (1.32) 3. Οριο µηδενικού φανταστικού µέρους µιγαδικής ρίζας της µορφής των (1.2)
εάν 0 0 =⇒≤≠ zz ε (1.33) Ακολούθως ανακεφαλαιώνονται τα βήµατα του αλγορίθµου, όπως αυτά υλοποιούνται στην
υπορουτίνα BAIRSTOW (σε FORTRAN 90/95) η οποία ακολουθεί παρακάτω.
9
Βήµατα Αλγορίθµου Μεθόδου Bairstow Βήµα 1: Αρχική επιλογή των p και q.
Βήµα 2: Υπολογισµός των συντελεστών bk του πηλίκου b(x), βάσει των (1.11).
Βήµα 3: Υπολογισµός των συντελεστών R και S του υπολοίπου r(x), βάσει των (1.12).
Βήµα 4: Ελεγχος ικανοποίησης του κριτηρίου της (1.8). Εάν ικανοποιείται, ο υπολογισµός
µεταφέρεται στο Βήµα 11.
Βήµα 5: Υπολογισµός των c0, c1 και c2 βάσει της (1.28).
Βήµα 6: Υπολογισµός των µερικών παραγώγων των R και S ως προς p και q βάσει των (1.29).
Βήµα 7: Υπολογισµός της τιµής της ορίζουσας της (1.16) και έλεγχος του κριτηρίου της (1.31).
Εάν προκύπτει ορίζουσα µηδενική ο υπολογισµός σταµατά µε εκτύπωση σχετικού
µηνύµατος.
Βήµα 8: Υπολογισµός των διορθώσεων ∆p και ∆q βάσει των (1.16).
Βήµα 9: Αναπροσαρµογή των τιµών των p και q βάσει των (1.17).
Βήµα 10: Ελεγχος ικανοποίησης του κριτηρίου της (1.18). Εάν δεν ικανοποιείται, ο υπολογισµός
µεταφέρεται στο Βήµα 2 για τα τρέχοντα p και q του Βήµατος 9.
Βήµα 11: Υπολογισµός της διακρίνουσας του τριωνύµου της (1.6) και έλεγχος του κριτηρίου
(1.32).
Βήµα 12: Υπολογισµός των ριζών του τριωνύµου της (1.6).
Βήµα 13: Ελεγχος του κριτηρίου της (1.33) σε περίπτωση ύπαρξης µιγαδικών ριζών.
Βήµα 14: Εφ’ όσον το προκύπτον πηλίκο b(x) είναι τουλάχιστον 3ου βαθµού, ο υπολογισµός
µεταφέρεται στο Βήµα 2 µε το τρέχον πολυώνυµο-πηλίκο b(x) στη θέση του αρχικού
πολυωνύµου f(x) και µείωση του βαθµού του νέου προβλήµατος (πολυωνύµου-πηλίκου)
κατά 2. Τα p και q θα είναι αυτά του Βήµατος 9. Εάν το πηλίκο προκύψει 2ου ή 1ου
βαθµού βρίσκονται οι ρίζες/ζα του και ο υπολογισµός µεταφέρεται στο Βήµα 15.
Βήµα 15: Ελεγχος του κριτηρίου της (1.30) για κάθε µία ρίζα ξεχωριστά. Σε περίπτωση µη
ικανοποίησης, και εφ’ όσον δεν έχει εξαντληθεί ο µέγιστος επιτρεπόµενος κύκλος
επαναϋπολογισµών, ο αλγόριθµος επαναλαµβάνεται από το Βήµα 1 µε p και q αυτά που
αντιστοιχούν σε δύο ρίζες οι οποίες ικανοποιούν καλύτερα το κριτήριο (1.30). Προφανώς,
επιλέγεται ένα ζεύγος πραγµατικών ή ένα ζεύγος συζυγών µιγαδικών από τις έως τώρα
ευρεθείσες.
Παράδειγµα
Να επιλυθεί η πολυωνυµική εξίσωση
0875103550812417)( 2345 =−+−+−= xxxxxxf
λαµβάνοντας ως αρχική προσέγγιση τις τιµές: p0 = q0 = 0. Για το κριτήριο σύγκλισης της (1.18) να
θεωρηθεί 1414 10 , 10 −− =≤∆=≤∆ εε qp .
10
Για την πρώτη διαίρεση, τα αποτελέσµατα κάθε επανάληψης διαµορφώνονται ως ακολούθως
Επανάληψη Νο. 1 Επανάληψη Νο. 2 Επανάληψη Νο. 3
n a b c b c b c 5 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.000004 -17 0.00000 0.00000 0.00000 0.00000 0.00000 0.000003 124 1.00000 0.00000 1.00000 0.00000 1.00000 0.000002 -508 -17.00000 -1.00000 -15.38304 -1.00000 -14.13201 -1.000001 1035 124.00000 17.00000 97.40375 13.76607 80.16487 11.264020 -875 -508.00000 -124.00000 -324.00534 -73.42208 -231.38640 -44.55511
p1 = -1.61696 q1 = 1.72244
p2 = -2.86799 q2 = 3.30466
p3 = -3.67811 q3 = 4.48732
……………………………………………………………………………………………………………
Επαναλήψεις Νο. 7 & 8
n a b c 5 1 0.00000 0.000004 -17 0.00000 0.000003 124 1.00000 0.000002 -508 -13.00000 -1.000001 1035 67.00000 9.000000 -875 -175.00000 -26.00000
p7,8 = -4.00000 q7,8 = 5.00000
Τα αποτελέσµατα των επαναλήψεων 4, 5 και 6 αφήνονται ως άσκηση στον αναγνώστη.
Aρα από την πρώτη διαίρεση προκύπτει τελικά p = -4 και q = 5. Εποµένως ο πρώτος διαιρέτης g(x)
και οι αντίστοιχες ρίζες του είναι
ixxxqpxxxg ±=⇔=+−=++= 2 054)( 2,122
H διαδικασία επαναλαµβάνεται επί της πολυωνυµικής εξίσωσης του πηλίκου
01756713)( 23 =−+−= xxxxb στη θέση τής αρχικής εξίσωσης f(x). Ως αρχικές προσεγγίσεις των p, q λαµβάνονται οι τελευταίες
προκύπτουσες τιµές από την πρώτη διαίρεση, δηλαδή p = -4 και q = 5.
Για την δεύτερη διαίρεση που ακολουθεί, τα αποτελέσµατα κάθε επανάληψης διαµορφώνονται ως
ακολούθως
11
Επανάληψη Νο. 1 Επανάληψη Νο. 2 Επανάληψη Νο. 3
n a b c b c b c 3 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.000002 -13 0.00000 0.00000 0.00000 0.00000 0.00000 0.000001 67 1.00000 0.00000 1.00000 0.00000 1.00000 0.000000 -175 -9.00000 -1.00000 -6.92000 -1.00000 -7.01500 -1.00000
p1 = -6.08000 q1 = 20.60000
p2 = -5.98500 q2 = 25.00620
p3 = -5.99995 q3 = 24.99983
……………………………………………………………………………………………………………
Επαναλήψεις Νο. 5 & 6
n a b c 3 1 0.00000 0.000002 -13 0.00000 0.000001 67 1.00000 0.000000 -175 -7.00000 -1.00000
p5,6 = -6.00000 q5,6 = 25.00000
Τα αποτελέσµατα της 4ης επανάληψης αφήνονται ως άσκηση στον αναγνώστη.
Ετσι, από τη δεύτερη διαίρεση προκύπτει τελικά p = -6 και q = 25. Eποµένως ο δεύτερος διαιρέτης
g(x) και οι αντίστοιχες ρίζες του θα είναι
ixxxqpxxxg 43 0256)( 4,322 ±=⇔=+−=++=
Το τελικό πηλίκο που αποµένει θα είναι πρώτου βαθµού, µε ρίζα
7 07)( 5 =⇔=−= xxxb
Ετσι, το αρχικό πολυώνυµο µπορεί πλέον να γραφεί στην παραγοντοποιηµένη µορφή 0)43)(43)(2)(2)(7()( =+−−−+−−−−= ixixixixxxf
Υπορουτίνα Μεθόδου Bairstow σε FORTRAN 90/95
Η υπορουτίνα BAIRSTOW είναι γραµµένη σε FORTRAN 90/95. Ολες οι πραγµατικές
µεταβλητές, όπως και ο συντελεστής του φανταστικού µέρους των µιγαδικών ριζών, είναι διπλής
ακρίβειας (8 bytes).
H υπορουτίνα απαιτεί ως δεδοµένες τις τιµές των παρακάτω µεταβλητών:
NDEG : Βαθµός n του πολυωνύµου.
[A]0:NDEG : Μονοδιάστατος πίνακας των συντελεστών a0, a1, a2, ….., an του πολυωνύµου.
Προσοχή: στην υπορουτίνα ισχύει ότι:
Α(0) = a0, Α(1) = a1, Α(2) = a2, ….., A(NDEG) = an.
12
P : Αρχική τιµή του p.
Q : Αρχική τιµή του q.
TOLPQRS : Κοινό όριο ε των κριτηρίων των σχέσεων (1.8) και (1.18).
TOLDETS : Οριο ε του κριτηρίου της σχέσης (1.31).
TOLDETR : Οριο ε του κριτηρίου της σχέσης (1.32).
TOLC : Οριο ε του κριτηρίου της σχέσης (1.33).
TOLFX : Οριο ε του κριτηρίου της σχέσης (1.30).
NITMAX : Μax. αριθµός επαναλήψεων για τον υπολογισµό των ∆p και ∆q.
NCYCMAX : Μax. αριθµός κύκλων επαναϋπολογισµού.
ISORT : Κωδικός ταξινόµησης ριζών:
1 = αύξουσα σειρά, 2 = φθίνουσα σειρά.
IPRINT1 : Κωδικός εκτύπωσης ενδιάµεσων αποτελεσµάτων:
0 = όχι, -1 =περιληπτική εκτύπωση, 1=πλήρης εκτύπωση.
IPRINT2 : Κωδικός εκτύπωσης τελικών αποτελεσµάτων:
0 = όχι, 1 = ναί.
H υπορουτίνα επιστρέφει τις τιµές των παρακάτω µεταβλητών:
NREAL : Συνολικός αριθµός υπολογισθέντων πραγµατικών ριζών.
NCOMPL : Συνολικός αριθµός υπολογισθέντων µιγαδικών ριζών.
Ισχύει ότι: NREAL + NCOMPL = n.
[XR]NDEG : Μονοδιάστατος πίνακας πραγµατικών ριζών ή του πραγµατικού µέρους y των
µιγαδικών ριζών (βάσει της (1.2) ). Οι NREAL πραγµατικές ρίζες περιέχονται στις
NREAL πρώτες θέσεις του πίνακα. Μάλιστα δε παρέχονται κατά αύξουσα ή
φθίνουσα σειρά, αναλόγως της τιµής της µεταβλητής ISORT.
Οι NCOMPL τελευταίες θέσεις του πίνακα περιέχουν το πραγµατικό µέρος y των
µιγαδικών ριζών. Οι µιγαδικές ρίζες παρέχονται κατά αύξουσα ή φθίνουσα σειρά
της ποσότητας y2 + z2, όπου z είναι ο συντελεστής του φανταστικού µέρους, βάσει
των (1.2). Οι ρίζες παρέχονται ταξινοµηµένες µόνο κατά την τελευταία επίλυση.
[XIM]NDEG : Μονοδιάστατος πίνακας πραγµατικού συντελεστή z του φανταστικού µέρους των
µιγαδικών ριζών (βάσει της (1.2) ). Οι NREAL πρώτες θέσεις του πίνακα περιέχουν
την τιµή µηδέν. Οι NCOMPL τελευταίες θέσεις του πίνακα περιέχουν τον
συντελεστή z του φανταστικού µέρους. Για την ταξινόµηση ισχύουν τα αναφερόµε-
να για τη µεταβλητή [XR]NDEG.
[FXR]NDEG : Μονοδιάστατος πίνακας µε την τιµή της f(ρ) στις NREAL πρώτες θέσεις λόγω της
αντικατάστασης πραγµατικών ριζών. Στις NCOMPL τελευταίες θέσεις περιέχονται
οι τιµές του πραγµατικού µέρους της τελικής τιµής της f(ρ) µετά την αντικατάσταση
µιγαδικής ρίζας, για την περίπτωση όπου το f(ρ) πιθανόν να προκύψει µιγαδικός
13
αριθµός.
[FXIM]NDEG : Μονοδιάστατος πίνακας µε την τιµή του συντελεστή του τυχόν προκύπτοντος
φανταστικού µέρους της τιµής της f(ρ) λόγω της αντικατάστασης µιγαδικών ριζών.
Στις NREAL πρώτες θέσεις περιέχεται η τιµή µηδέν.
KSOLVE : Κωδικός ικανοποίησης του κριτηρίου της σχέσης (1.30):
0 = ικανοποιείται, 1 = δεν ικανοποιείται.
Περαιτέρω, η υπορουτίνα BAIRSTOW καλεί τις υπορουτίνες POLYR και POLYC για τον
υπολογισµό της τιµής της f(ρ) λόγω της αντικατάστασης πραγµατικής ή µιγαδικής ρίζας, αντίστοιχα.
Επί πλέον καλεί και τις υπορουτίνες SORTR και SORTC για την ταξινόµηση πραγµατικών ή
µιγαδικών ριζών αντίστοιχα, βάσει των προαναφεροµένων.
Το πρόγραµµα που ακολουθεί, καλεί την εν λόγω υπορουτίνα για τον υπολογισµό των
ριζών του πολυωνύµου του προηγουµένου παραδείγµατος.
PROGRAM TEST ! ! ================================================================== ! | ROOTS OF POLYNOMIALS | ! ================================================================== ! IMPLICIT REAL*8 (A-H,O-Z) DIMENSION A(0:100),XR(100),XIM(100),FXR(100),FXIM(100) ! ! ------------------------------------------------------------------ ! READ FROM FILE DEGREE & COEFFICIENTS OF POLYNOMIAL. ALSO, INITIAL ! GUESSES FOR p & q, tolerances, solution & print parameters ! ------------------------------------------------------------------ ! OPEN (1,FILE='DATA',FORM='FORMATTED') ! READ (1,*) NDEG DO I=NDEG,0,-1 READ (1,*) A(I) END DO READ (1,*) P,Q READ (1,*) TOLPQRS,TOLDETS,TOLDETR,TOLC,TOLFX READ (1,*) NITMAX,NCYCMAX,ISORT,IPRINT1,IPRINT2 ! ! ------------------------------------------------------------------ ! CALL SUBROUTINE BAIRSTOW TO FIND THE ROOTS OF THE POLYNOMIAL ! ------------------------------------------------------------------ ! CALL BAIRSTOW (NDEG,A,P,Q,TOLPQRS,TOLDETS,TOLDETR,TOLC, & & TOLFX,NITMAX,NCYCMAX,ISORT,IPRINT1,IPRINT2, & & NREAL,NCOMPL,XR,XIM,FXR,FXIM,KSOLVE) ! END !
Το σχετικό αρχείο δεδοµένων είναι
DATA 5 1.00 -17.00 124.00 -508.00 1035.00 -875.00 0.00 0.00 1.00D-14 1.00D-80 1.00D-07 1.00D-07 1.00D-07 100 3 1 -1 1
14
Tα αποτελέσµατα της εκτέλεσης έχουν ως ακολούθως
Παρακάτω δίνονται οι λίστες των εντολών των υπορουτινών BAIRSTOW, POLYR,
POLYC, SORTR και SORTC. ! ================================================================== ! | SUBROUTINE TO FIND ALL REAL & COMPLEX ROOTS | ! | OF AN n-th DEGREE POLYNOMIAL EQUATION | ! | | ! | f(X) = anX**n + an-1X**n-1 + ..... + a2X**2 + a1X + ao = 0, | ! | | ! | where: n > 2 | ! | | ! | BAIRSTOW METHOD | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! NDEG : Polynomial Degree, n. ! [A]ndeg : Matrix of polynomial coefficients ao,a1,a2,..,an-1,an ! Note that: ! A(0)=ao, A(1)=a1,..., A(NDEG-1)=an-1, A(NDEG)=an. ! [AA]ndeg : A copy of the original coefficients ao,a1,a2,...,an ! P : Initial estimation for p. ! Q : Initial estimation for q. ! [B]ndeg : Matrix of polynomial coefficients ! bo,b1,b2,..,bn-1,bn. Note that: ! B(0)=Bo, B(1)=B1,..., B(NDEG-1)=Bn-1, B(NDEG)=Bn. ! [C]ndeg : Matrix of sequence ck terms ! co,c1,c2,..,cn-1,cn. Note that: ! C(0)=co, C(1)=c1,..., C(NDEG-1)=cn-1, C(NDEG)=cn. ! TOLPQRS : Tolerance ε to check if |∆p|<= ε & |∆q|<= ε, or, if ! |R|<= ε & |S|<= ε. ! TOLDETS : Tolerance ε to check if system determinant |a| <= ε. ! TOLDETR : Tolerance ε to check if determinant |p**2-4q| <= ε. ! TOLC : Tolerance ε to check for y+zi if |z|<= ε. ! TOLFX : Tolerance to check if |f(ρ)|<= ε. ! NITMAX : Max. permissible no. of iterations within a solytion ! cycle. ! NCYCMAX : Max. permissible no. of solution cycles. ! ISORT : Code for sorting (1=ascending order, 2=descending ! order). ! IPRINT1 : Print code for printing intermidiate results ! (0=No print, -1=partial print, 1=full print). ! IPRINT2 : Print code for printing final results
! (0=No print, 1=print). ! NREAL : Total number of computed real roots. ! NCOMPL : Total number of computed complex roots. ! [XR]ndeg : Matrix of computed real roots. Also, contains the ! real part of complex roots (if any). Note that matrix ! contains the real roots in a specified order ! according to the value of ISORT. The real roots are ! placed in the first NREAL positions of the matrix. ! The real parts of any complex roots (also in an order ! according to the magnitude of y**2+z**2, for y+zi) ! are placed in the last NCOMPL positions of the ! matrix. ! [XIM]ndeg : Matrix of the imaginary part z of complex roots (if ! any). Note that matrix contains the imaginary part of ! the roots in the last NCOMPL positions. ! [FXR]ndeg : Matrix of computed f(ρ) in its first NREAL positions, ! if ρ=real root. Also, in the last NCOMPL positions it ! contains the real part of f(ρ), if f(ρ) is a complex ! number. ! [FXIM]ndeg : Matrix of computed image part of f(ρ), if f(ρ) is a ! complex number. ! KSOLVE : Solution code (0=Not Very Good Solution, 1=Excellent ! Solution) ! ------------------------------------------------------------------ ! SUBROUTINE BAIRSTOW (NDEG,A,P,Q,TOLPQRS,TOLDETS,TOLDETR,TOLC, & & TOLFX,NITMAX,NCYCMAX,ISORT,IPRINT1,IPRINT2, & & NREAL,NCOMPL,XR,XIM,FXR,FXIM,KSOLVE) ! IMPLICIT REAL*8 (A-H,O-Z) ! DIMENSION A(0:NDEG),AA(0:NDEG),B(0:NDEG),C(0:NDEG),XR(NDEG), & & XIM(NDEG),FXR(NDEG),FXIM(NDEG) COMPLEX*16 ZROOT ! ! ------------------------------------------------------------------ ! PRINT A MESSAGE IF ORDER NDEG<=2. THEN RETURN ! ------------------------------------------------------------------ ! IF (NDEG<=2) WRITE (*,"(/'***** Problem is of order n<=2'/)") IF (NDEG<=2) RETURN ! ! ------------------------------------------------------------------ ! PRINT ALL DATA
f(X) = 0.100000E+01 X** 5 + + -.170000E+02 X** 4 + + 0.124000E+03 X** 3 + + -.508000E+03 X** 2 + + 0.103500E+04 X** 1 + + -.875000E+03 Cycle No. 1 - Division No. 1 - Total Iterations 8 Cycle No. 1 - Division No. 2 - Total Iterations 6 ========================================================== Real Roots (Unsorted) ========================================================== Root No. 1 ¨ = 0.700000E+01 f(¨) = -.284217E-11 ========================================================== Complex Roots (Unsorted) ========================================================== Root No. 1 ρ = 0.200000E+01 + f(ρ) = 0.227374E-12 + 0.100000E+01 i -.568434E-13 i Root No. 2 ρ = 0.200000E+01 + f(ρ) = 0.227374E-12 + -.100000E+01 i 0.568434E-13 i Root No. 3 ρ = 0.300000E+01 + f(ρ) = 0.454747E-12 + 0.400000E+01 i 0.852651E-12 i Root No. 4 ρ = 0.300000E+01 + f(ρ) = 0.454747E-12 + -.400000E+01 i -.852651E-12 i ========================================================== Real Roots (Sorted) ========================================================== Root No. 1 ¨ = 0.700000E+01 f(¨) = -.284217E-11 ========================================================== Complex Roots (Sorted) ========================================================== Root No. 1 ρ = 0.200000E+01 + f(ρ) = 0.227374E-12 + 0.100000E+01 i -.568434E-13 i Root No. 2 ρ = 0.200000E+01 + f(ρ) = 0.227374E-12 + -.100000E+01 i 0.568434E-13 i Root No. 3 ρ = 0.300000E+01 + f(ρ) = 0.454747E-12 + -.400000E+01 i -.852651E-12 i Root No. 4 ρ = 0.300000E+01 + f(ρ) = 0.454747E-12 + 0.400000E+01 i 0.852651E-12 i
15
! ------------------------------------------------------------------ ! IF (IPRINT1==0) GO TO 10 ! WRITE (*,"(' f(X) = ',E12.6,' X**',I3,' +')") A(NDEG),NDEG DO I=NDEG-1,1,-1 WRITE (*,"(' + ',E12.6,' X**',I3,' +')") A(I),I END DO WRITE (*,"(' + ',E12.6/)") A(0) ! ! ------------------------------------------------------------------ ! INITIALIZE VARIABLES ! ------------------------------------------------------------------ ! 10 DO I=0,NDEG AA(I) = A(I) END DO ! NCYCLE = 0 3000 NCYCLE = NCYCLE + 1 KSOLVE = 1 ! N = NDEG NREAL = 0 NCOMPL = 0 DO I=1,NDEG FXR(I) = 1.00D+99 ; FXIM(I) = 1.00D+99 END DO ! ! ------------------------------------------------------------------ ! START A DIVISION OF f(x) BY (x**2+px+q) ! ------------------------------------------------------------------ ! NDIV = 0 2000 NDIV = NDIV + 1 ! B(N) = 0.00D+00 ; B(N-1) = 0.00D+00 C(N) = 0.00D+00 ; C(N-1) = 0.00D+00 ! NIT = 0 1000 NIT = NIT + 1 ! IF (IPRINT1==1) WRITE (*, & & "(/52(1H=)/'Cycle No. ',I3,' - Division No. ',I3, & & ' - Iteration No. ',I3/52(1H-)// & & 'Start with: p = ',E12.6,' q = ',E12.6)") & & NCYCLE,NDIV,NIT,P,Q ! ! ------------------------------------------------------------------ ! COMPUTE bo, b1, b2,..., bn-3, bn-2 COEFFICIENTS OF THE QUOTIENT ! POLYNOMIAL b(x). ! ------------------------------------------------------------------ ! DO I=N-2,0,-1 B(I) = A(I+2) - P*B(I+1) - Q*B(I+2) END DO ! ! ------------------------------------------------------------------ ! CHECK IF REMAINDER Rx+S=0 (INITIAL GUESSES FOR p & q CORRECT) ! ------------------------------------------------------------------ ! R = A(1) - P*B(0) - Q*B(1) S = A(0) - Q*B(0) ! IF (DABS(R)<=TOLPQRS.AND.DABS(S)<=TOLPQRS.AND.IPRINT1==1) & & WRITE (*,"(/'R = ',E12.6,' S = ',E12.6// & & 'Remainder Rx+S -> 0')") R,S ! IF (DABS(R)<=TOLPQRS.AND.DABS(S)<=TOLPQRS) GO TO 20 ! ! ------------------------------------------------------------------ ! COMPUTE TERMS ci of ck sequence. ! ------------------------------------------------------------------ ! DO I=N-2,0,-1 C(I) = -B(I+1) - P*C(I+1) - Q*C(I+2) END DO ! IF (IPRINT1==1) WRITE (*, & & "(/'--- ------------ ------------ ------------'/ & & ' n a b c '/ & & '--- ------------ ------------ ------------')") IF (IPRINT1<=0) GO TO 101 ! DO I=N,0,-1 WRITE (*,'(I3,3(2X,E12.6))') I,A(I),B(I),C(I) END DO ! ! ------------------------------------------------------------------ ! COMPUTE PARTIAL DERIVATIVES θR/dp, θR/θq, θS/θp, θS/θq ! ------------------------------------------------------------------ ! 101 DRDP = -B(0) - P*C(0) - Q*C(1) ; A11 = DRDP DRDQ = -B(1) - P*C(1) - Q*C(2) ; A12 = DRDQ DSDP = -Q*C(0) ; A21 = DSDP DSDQ = -B(0) - Q*C(1) ; A22 = DSDQ ! ! ------------------------------------------------------------------ ! SOLVE LINEAR SYSTEM FOR ∆p & ∆q: [∆p ∆q]T = [A]-1[R S]T ! ------------------------------------------------------------------ ! DET = A12*A21 - A11*A22 IF (DABS(DET)<=TOLDETS) DET = 0.00D+00 ! IF (DET==0.00) & & WRITE (*,"(/'***** Error in Subroutine Bairstow *****'/ & & '***** System for ∆p & ∆q: det = 0 *****')") IF (DET==0.00) STOP ! DP = (A22*R - A12*S)/DET DQ = -(A21*R - A11*S)/DET ! ! ------------------------------------------------------------------ ! UPDATE p & q ! ------------------------------------------------------------------ ! P = P + DP Q = Q + DQ ! IF (IPRINT1==1) & & WRITE (*,"(/' End with: p = ',E12.6,' q = ',E12.6)") P,Q ! ! ------------------------------------------------------------------ ! CHECK, FOR THE UPDATED p & q, IF |∆p| <= ε & |∆q| <= ε. ! ALTERNATIVELY, CHECK IF THE REMAINDER TERMS |R| <= ε & |S| <= ε ! (Uncomment the criterion you want to use) ! ------------------------------------------------------------------ ! !+++++ IF (IPRINT1==1) WRITE (*,"(/52(1H=))") IF ((DABS(DP)>TOLPQRS.OR.DABS(DQ)>TOLPQRS).AND.NIT<NITMAX) & & GO TO 1000 !+++++ ! R = A(1) - P*B(0) - Q*B(1) ! S = A(0) - Q*B(0) ! IF (IPRINT1==1) WRITE (*,"(/52(1H=))") ! IF ((DABS(R)>TOLPQRS.OR.DABS(S)>TOLPQRS).AND.NIT<NITMAX) & ! & GO TO 1000 !+++++ ! ! ------------------------------------------------------------------ ! FOR THE LAST UPDATED p & q, CALCULATE THE TWO ROOTS OF ! x**2+px+q = 0. FOR THESE ROOTS COMPUTE THE VALUE OF f(x) ! ------------------------------------------------------------------ ! 20 FXR1 = 0.00D+00 FXR2 = 0.00D+00 FXZR1 = 0.00D+00 FXZR2 = 0.00D+00 FXZIM1 = 0.00D+00 FXZIM2 = 0.00D+00 ! DET = P**2 - 4.00*Q
IF (DABS(DET)<=TOLDETR) DET = 0.00D+00 ! IF (DET) 21,22,22 ! 21 DET = DSQRT(-DET) ! NCOMPL = NCOMPL + 1 XR(NDEG+1-NCOMPL) = -0.50*P XIM(NDEG+1-NCOMPL) = 0.50*DET IF (DABS(XR(NDEG+1-NCOMPL))<=TOLC) XR(NDEG+1-NCOMPL) = 0.00D+00 IF (DABS(XIM(NDEG+1-NCOMPL))<=TOLC) XIM(NDEG+1-NCOMPL) = 0.00D+00 ZROOT = DCMPLX(XR(NDEG+1-NCOMPL),XIM(NDEG+1-NCOMPL)) ! CALL POLYC (AA,NDEG,ZROOT,FXZR1,FXZIM1) FXR(NDEG+1-NCOMPL) = FXZR1 FXIM(NDEG+1-NCOMPL) = FXZIM1 ! NCOMPL = NCOMPL + 1 XR(NDEG+1-NCOMPL) = -0.50*P XIM(NDEG+1-NCOMPL) = -0.50*DET IF (DABS(XR(NDEG+1-NCOMPL))<=TOLC) XR(NDEG+1-NCOMPL) = 0.00D+00 IF (DABS(XIM(NDEG+1-NCOMPL))<=TOLC) XIM(NDEG+1-NCOMPL) = 0.00D+00 ZROOT = DCMPLX(XR(NDEG+1-NCOMPL),XIM(NDEG+1-NCOMPL)) ! CALL POLYC (AA,NDEG,ZROOT,FXZR2,FXZIM2) FXR(NDEG+1-NCOMPL) = FXZR2 FXIM(NDEG+1-NCOMPL) = FXZIM2 GO TO 25 ! 22 NREAL = NREAL + 1 DET = DSQRT(DET) XR(NREAL) = 0.50*(-P+DET) ; ROOT = XR(NREAL) ! CALL POLYR (AA,NDEG,ROOT,FXR1) FXR(NREAL) = FXR1 FXIM(NREAL) = 0.00D+00 ! NREAL = NREAL + 1 XR(NREAL) = 0.50*(-P-DET) ; ROOT = XR(NREAL) ! CALL POLYR (AA,NDEG,ROOT,FXR2) FXR(NREAL) = FXR2 FXIM(NREAL) = 0.00D+00 ! ! ------------------------------------------------------------------ ! CHECK IF THIS PAIR OF ROOTS SATISFIES THE CONDITION f(ρ) <= ε. ! ------------------------------------------------------------------ ! 25 IF (DABS(FXR1)>TOLFX.OR.DABS(FXR2)>TOLFX.OR. & & DABS(FXZR1)>TOLFX.OR.DABS(FXZR2)>TOLFX.OR. & & DABS(FXZIM1)>TOLFX.OR.DABS(FXZIM2)>TOLFX) KSOLVE = 0 ! ! ------------------------------------------------------------------ ! SET THE QUOTIENT POLYNOMIAL OF DEGREE n-2 AS A NEW POLYNOMIAL OF ! DEGREE N = n - 2. ! IF N>=3 REPEAT THE PROCEDURE WITH THIS POLYNOMIAL. ! IF N<=2 CALCULATE ROOTS DIRECTLY. ! ------------------------------------------------------------------ ! FXR1 = 0.00D+00 FXR2 = 0.00D+00 FXZR1 = 0.00D+00 FXZR2 = 0.00D+00 FXZIM1 = 0.00D+00 FXZIM2 = 0.00D+00 ! KOD = 0 N = N - 2 ! IF (IPRINT1==-1) & & WRITE (*,"('Cycle No. ',I3,' - Division No. ',I3, & & ' - Total Iterations ',I3)") NCYCLE,NDIV,NIT ! GO TO (31,32), N ! DO I=N,0,-1 A(I) = B(I) END DO ! GO TO 2000 ! 31 KOD = 1 NREAL = NREAL + 1 XR(NREAL) = -B(0)/B(1) ; ROOT = XR(NREAL) ! CALL POLYR (AA,NDEG,ROOT,FXR1) FXR(NREAL) = FXR1 FXIM(NREAL) = 0.00D+00 GO TO 30 ! 32 DET = B(1)**2 - 4.00*B(2)*B(0) IF (DABS(DET)<=TOLDETR) DET = 0.00D+00 ! IF (DET) 41,42,42 ! 41 DET = DSQRT(-DET) ! NCOMPL = NCOMPL + 1 XR(NDEG+1-NCOMPL) = -0.50*B(1)/B(2) XIM(NDEG+1-NCOMPL) = 0.50*DET/B(2) IF (DABS(XR(NDEG+1-NCOMPL))<=TOLC) XR(NDEG+1-NCOMPL) = 0.00D+00 IF (DABS(XIM(NDEG+1-NCOMPL))<=TOLC) XIM(NDEG+1-NCOMPL) = 0.00D+00 ZROOT = DCMPLX(XR(NDEG+1-NCOMPL),XIM(NDEG+1-NCOMPL)) ! CALL POLYC (AA,NDEG,ZROOT,FXZR1,FXZIM1) FXR(NDEG+1-NCOMPL) = FXZR1 FXIM(NDEG+1-NCOMPL) = FXZIM1 ! NCOMPL = NCOMPL + 1 XR(NDEG+1-NCOMPL) = -0.50*B(1)/B(2) XIM(NDEG+1-NCOMPL) = -0.50*DET/B(2) IF (DABS(XR(NDEG+1-NCOMPL))<=TOLC) XR(NDEG+1-NCOMPL) = 0.00D+00 IF (DABS(XIM(NDEG+1-NCOMPL))<=TOLC) XIM(NDEG+1-NCOMPL) = 0.00D+00 ZROOT = DCMPLX(XR(NDEG+1-NCOMPL),XIM(NDEG+1-NCOMPL)) ! CALL POLYC (AA,NDEG,ZROOT,FXZR2,FXZIM2) FXR(NDEG+1-NCOMPL) = FXZR2 FXIM(NDEG+1-NCOMPL) = FXZIM2 GO TO 30 ! 42 DET = DSQRT(DET) ! NREAL = NREAL + 1 XR(NREAL) = 0.50*(-B(1)+DET)/B(2) ; ROOT = XR(NREAL) ! CALL POLYR (AA,NDEG,ROOT,FXR1) FXR(NREAL) = FXR1 FXIM(NREAL) = 0.00D+00 ! NREAL = NREAL + 1 XR(NREAL) = 0.50*(-B(1)-DET)/B(2) ; ROOT = XR(NREAL) ! CALL POLYR (AA,NDEG,ROOT,FXR2) FXR(NREAL) = FXR2 FXIM(NREAL) = 0.00D+00 ! ! ------------------------------------------------------------------ ! CHECK IF THESE LAST ROOTS SATISFY THE CONDITION f(ρ) <= ε. ! ------------------------------------------------------------------ ! 30 IF (DABS(FXR1)>TOLFX.OR.DABS(FXR2)>TOLFX.OR. & & DABS(FXZR1)>TOLFX.OR.DABS(FXZR2)>TOLFX.OR. & & DABS(FXZIM1)>TOLFX.OR.DABS(FXZIM2)>TOLFX) KSOLVE = 0 ! ! ------------------------------------------------------------------ ! PRINT THIS SET OF ROOTS (UNSORTED) ! ------------------------------------------------------------------ ! IF (IPRINT1==0) GO TO 40 ! WRITE (*,"(/58(1H=)/'Real Roots (Unsorted)'/58(1H=))") DO I=1,NREAL WRITE (*,"('Root No. ',I3,' ρ = ',E12.6,' f(ρ) = ', &
16
& E12.6)") I,XR(I),FXR(I) END DO ! WRITE (*,"(/58(1H=)/'Complex Roots (Unsorted)'/58(1H=))") DO I=NDEG,NREAL+1,-1 WRITE (*,"('Root No. ',I3,' ρ = ',E12.6,' + f(ρ) = ', & & E12.6,' +'/19X,E12.6,' i',11X,E12.6,' i')") & & NDEG+1-I,XR(I),FXR(I),XIM(I),FXIM(I) END DO ! ! ------------------------------------------------------------------ ! TRY A NEXT SOLUTION CYCLE WITH BETTER INITIAL APPROXIMATIONS FOR ! p & q. COMPUTE THESE APPROXIMATIONS USING THE "BEST" TWO REAL ! ROOTS OR COMPLEX CONJUGATE PAIR OF ROOTS, UP TO NOW. ! ------------------------------------------------------------------ ! 40 DO I=0,NDEG A(I) = AA(I) END DO ! INDEXR1 = 0 FXMINR1 = 1.00D+99 DO I=1,NREAL IF (DABS(FXR(I))<=FXMINR1) INDEXR1 = I IF (DABS(FXR(I))<=FXMINR1) FXMINR1 = DABS(FXR(I)) END DO ! INDEXR2 = 0 FXMINR2 = 1.00D+99 DO I=1,NREAL IF (I==INDEXR1) GO TO 45 IF (DABS(FXR(I))<=FXMINR2) INDEXR2 = I IF (DABS(FXR(I))<=FXMINR2) FXMINR2 = DABS(FXR(I)) 45 CONTINUE END DO ! INDEXC = 0 FXMINC = 1.00D+99 DO I=NREAL+1,NDEG FX = 0.50*(DABS(FXR(I)) + DABS(FXIM(I))) IF (FX<=FXMINC) INDEXC = I IF (FX<=FXMINC) FXMINC = FX END DO ! IF ((NREAL>1.AND.(INDEXR1==0.OR.INDEXR2==0)).OR.(NCOMPL>1.AND. & & INDEXC==0)) & & WRITE (*,"(/'***** ERROR: Cannot find a best pair of roots'/)") ! IF ((NREAL>1.AND.(INDEXR1==0.OR.INDEXR2==0)).OR.(NCOMPL>1.AND. & & INDEXC==0)) STOP ! KOD = 1 IF (FXMINC<FXMINR1.AND.FXMINC<FXMINR2) KOD = 2 GO TO (51,52), KOD ! 51 P = -(XR(INDEXR1)+XR(INDEXR2)) Q = XR(INDEXR1)*XR(INDEXR2) GO TO 60 ! 52 P = -2.00*XR(INDEXC) Q = (XR(INDEXC)**2) + (XIM(INDEXC)**2) ! 60 IF (NCYCLE<NCYCMAX.AND.KSOLVE==0) GO TO 3000 ! ! ------------------------------------------------------------------ ! SORT FINAL ROOTS ! ------------------------------------------------------------------ ! IF (NREAL>1) CALL SORTR (XR,FXR,NREAL,ISORT) IF (NCOMPL>1) CALL SORTC (XR(NREAL+1),XIM(NREAL+1),FXR(NREAL+1), & & FXIM(NREAL+1),NCOMPL,ISORT) ! ! ------------------------------------------------------------------ ! PRINT FINAL (SORTED) ROOTS ! ------------------------------------------------------------------ ! IF (IPRINT2==0) GO TO 70 ! WRITE (*,"(/58(1H=)/'Real Roots (Sorted)'/58(1H=))") DO I=1,NREAL WRITE (*,"('Root No. ',I3,' ρ = ',E12.6,' f(ρ) = ', & & E12.6)") I,XR(I),FXR(I) END DO ! WRITE (*,"(/58(1H=)/'Complex Roots (Sorted)'/58(1H=))") DO I=NREAL+1,NDEG WRITE (*,"('Root No. ',I3,' ρ = ',E12.6,' + f(ρ) = ', & & E12.6,' +'/19X,E12.6,' i',11X,E12.6,' i')") & & I-NREAL,XR(I),FXR(I),XIM(I),FXIM(I) END DO ! IF (NCYCLE==NCYCMAX.AND.KSOLVE==0) & & WRITE (*,"(/'***** Not very good solution *****'/)") ! 70 RETURN END ! ! ================================================================== ! | SUBROUTINE TO COMPUTE THE POLYNOMIAL VALUE FOR A | ! | REAL VARIABLE | ! | | ! | f(X) = anX**n + an-1X**n-1 + ..... + a2X**2 + a1X + ao = 0, | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! SUBROUTINE POLYR (A,N,X,FX) ! IMPLICIT REAL*8 (A-H,O-Z) ! DIMENSION A(0:N) ! FX = A(N) DO I=N,1,-1 FX = FX*X + A(I-1) END DO ! RETURN END !
! ================================================================== ! | SUBROUTINE TO COMPUTE THE POLYNOMIAL VALUE FOR A | ! | COMPLEX VARIABLE | ! | | ! | f(X) = anX**n + an-1X**n-1 + ..... + a2X**2 + a1X + ao = 0, | ! | | ! | where: X = Z = a + bi | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! SUBROUTINE POLYC (A,N,Z,FXZR,FXZIM) ! IMPLICIT REAL*8 (A-H,O-Z) ! DIMENSION A(0:N) COMPLEX*16 Z,FZ,TERM ! DUM = 0.00D+00 ! FZ = DCMPLX(A(N),DUM) DO I=N,1,-1 TERM = DCMPLX(A(I-1),DUM) FZ = FZ*Z + TERM END DO ! FXZR = DREAL(FZ) FXZIM = DIMAG(FZ) ! RETURN END ! ! ================================================================== ! | SUBROUTINE TO SORT THE ELEMENTS OF AN ARRAY [X] IN | ! | ASCENDING OR DESCENDING ORDER. | ! | A SECOND ARRAY [FX] (DEPENDED ON [X]) IS ALSO REARRANGED | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! [X]n : Array of dimension n for ordering. ! [FX]n : Array of dimension n for rearrangement. It depends on [X]. ! N : Array dimension. ! KORD : Sort order code: (1=ascending, 2=descending) ! ------------------------------------------------------------------ ! SUBROUTINE SORTR (X,FX,N,KORD) ! IMPLICIT REAL*8 (A-H,O-Z) ! DIMENSION X(N),FX(N) ! DO I=1,N-1 DO J=I+1,N GO TO (1,2), KORD 1 IF (X(I)-X(J)) 20,20,30 2 IF (X(I)-X(J)) 30,20,20 ! 30 TEMPX = X(I) X(I) = X(J) X(J) = TEMPX ! TEMPFX = FX(I) FX(I) = FX(J) FX(J) = TEMPFX ! 20 CONTINUE END DO END DO ! RETURN END ! ! ================================================================== ! | SUBROUTINE TO SORT THE ELEMENTS OF ARRAYS [X1] & [X2] IN | ! | ASCENDING OR DESCENDING ORDER ACCORDING TO THE MODULE | ! | mod = Sqrt[x1**2 + x2**2] | ! | ARRAYs [FX1] & [FX2] (DEPENDED ON [X1] & [X2] RESPECTIVELY) | ! | ARE ALSO REARRANGED | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! [X1]n : Array of dimension n for rearrangement. ! [X2]n : Array of dimension n for rearrangement. ! [FX1]n : Array of dimension n for rearrangement. It depends on ! [X1]. ! [FX2]n : Array of dimension n for rearrangement. It depends on ! [X2]. ! N : Array dimension. ! KORD : Sort order code: (1=ascending, 2=descending) ! ------------------------------------------------------------------ ! SUBROUTINE SORTC (X1,X2,FX1,FX2,N,KORD) ! IMPLICIT REAL*8 (A-H,O-Z) ! DIMENSION X1(N),X2(N),FX1(N),FX2(N) ! DO I=1,N-1 XXI = DSQRT((X1(I)**2)+(X2(I)**2)) DO J=I+1,N XXJ = DSQRT((X1(J)**2)+(X2(J)**2)) GO TO (1,2), KORD 1 IF (XXI-XXJ) 20,20,30 2 IF (XXI-XXJ) 30,20,20 ! 30 TEMPX1 = X1(I) X1(I) = X1(J) X1(J) = TEMPX1 ! TEMPX2 = X2(I) X2(I) = X2(J) X2(J) = TEMPX2 ! TEMPFX1 = FX1(I) FX1(I) = FX1(J) FX1(J) = TEMPFX1 ! TEMPFX2 = FX2(I) FX2(I) = FX2(J) FX2(J) = TEMPFX2 ! 20 CONTINUE END DO END DO ! RETURN END !
17
2.1 Η ΜΕΘΟ∆ΟΣ Crout Τα προβλήµατα της επίλυσης ενός συστήµατος γραµµικών εξισώσεων, της αντιστροφής ενός
τετραγωνικού πίνακα και της εύρεσης της τιµής της ορίζουσάς του, καθίστανται ιδιαιτέρως εύκολα µε
χρήση της µεθοδολογία του Crout βάσει της οποίας ένας τετραγωνικός πίνακας διασπάται σε γινόµενο
δύο ίσων διαστάσεων πινάκων, ενός κάτω (Lower) και ενός άνω (Upper) τριγωνικού (LU-
Decomposition). Η µεθοδολογία αυτή θεωρείται από τις πλέον αξιόπιστες για τους προηγούµενους
σκοπούς. Ο αλγόριθµος της διαδικασίας έχει ως εξής:
Κάθε τετραγωνικός πίνακας [Α]nxn µπορεί να γραφεί στη µορφή
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⇔⋅=
nn
n
n
nnnnnnnn
n
n
nxnnxnnxn
u
uuuuu
lll
lll
aaa
aaaaaa
ULA
...00............
...0
...
...............0...0...0
...............
...
...
][][][ 222
11211
21
2221
11
21
22221
11211
2.1.1)
Mία τέτοια διάσπαση µπορεί να χρησιµοποιηθεί για την επίλυση του γραµµικού συστήµατος
( ) ( ) nnnxnnxnnnxnnxnnnnxn bxULxU LbxA ][][][][][][][][][][ =⋅⋅=⋅⋅⇔=⋅ (2.1.2)
Προς το σκοπό αυτό τίθεται
nnxnn xUy ][][][ ⋅= (2.1.3)
οπότε επιλύεται ως προς τον πίνακα [y]n το σύστηµα
nnnxn byL ][][][ =⋅ (2.1.4)
και στη συνέχεια ως προς τον πίνακα [x]n το σύστηµα
nnnxn yxU ][][][ =⋅ (2.1.5)
Το πλεονέκτηµα της διάσπασης του αρχικού συστήµατος σε δύο τριγωνικά είναι ότι η επίλυση µε
τέτοιους πίνακες συντελεστών είναι εξαιρετικά εύκολη διαδικασία. Ετσι, το σύστηµα των εξισώσεων
(2.1.4) µπορεί να επιλυθεί µε προς τα εµπρός αντικατάσταση βάσει των γνωστών τύπων
niylb
ly
lby
i
jjiji
iii ,...,3,2 , 1 1
1
11
11
=⎥⎦
⎤⎢⎣
⎡−=
=
∑−
=
(2.1.6)
και το σύστηµα των εξισώσεων (2.1.5) µε προς τα πίσω αντικατάσταση βάσει των τύπων
18
1,...,2,1 , 1
1
−−=⎥⎦
⎤⎢⎣
⎡−=
=
∑+=
nnixuyu
x
uyx
n
ijjiji
iii
nn
nn
(2.1.7)
Ο καθορισµός των στοιχείων των πινάκων [L]nxn και [U]nxn προκύπτει από το σύστηµα στο οποίο
καταλήγει η σχέση (2.1.1), µετά τις πράξεις, για κάθε στοιχείο αij του αρχικού πίνακα [Α]nxn. Κάθε
στοιχείο aij προκύπτει από τα αθροίσµατα των γινοµένων των στοιχείων της i-στής γραµµής του [L]nxn
µε αυτά της j-στής στήλης του [U]nxn. Ετσι είναι
njiululula njinjijiij ,.....,3,2,1, , .....2211 =+++= (2.1.8)
Η σχέση (2.1.8) αφορά σύστηµα n2 εξισώσεων µε n2 + n αγνώστους, lij και uij, καθόσον τα στοιχεία
της κύριας διαγωνίου προσµετρώνται δύο φορές λόγω του ότι και οι δύο πίνακες [L]nxn και [U]nxn
έχουν στοιχεία επάνω της. Προκειµένου λοιπόν να επιλυθεί το σύστηµα των εξισώσεων (2.1.8) ως
προς τους αγνώστους lij και uij, θα πρέπει οι τιµές κάποιων n αγνώστων να ορισθούν αυθαίρετα.
Επί του θέµατος αυτού η µεθοδολογία του Crout ορίζει ότι η επίλυση των n2 εξισώσεων θα γίνεται
τµηµατικά, θέτοντας κατ’ αρχήν τους n αγνώστους lii ίσους µε τη µονάδα
nilii ,.....,3,2,1 , 1 == (2.1.9)
(εναλλακτικά, θα µπορούσαν να τεθούν τα uii ίσα µε τη µονάδα, αντί των lii). Ετσι, το αποτέλεσµα της
ανάπτυξης µέρους του συστήµατος των (2.1.8), αναφορικά µε τα στοιχεία a1j της πρώτης γραµµής του
πίνακα [Α]nxn (λαµβάνοντας υπ’ όψη τις (2.1.1) και (2.1.9) ) παίρνει τη µορφή
[ ] [ ]nn uuuuaaaa 11312111131211 .......... = (2.1.10)
∆ηλαδή, τα στοιχεία της πρώτης γραµµής του πίνακα [U]nxn ταυτίζονται µε αυτά της πρώτης γραµµής
του πίνακα [Α]nxn. Aκολούθως αναπτύσσεται το µέρος του συστήµατος των (2.1.8) αναφορικά µε τα
στοιχεία ai1 µε i > 1, δηλαδή της πρώτης στήλης του πίνακα [Α]nxn (εξαιρουµένου του στοιχείου a11 το
οποίο έχει ήδη ληφθεί υπ’ όψη στην (2.1.10) ), οπότε προκύπτει η µορφή
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⋅=
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⇔
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
1
41
31
21
11
1
41
31
21
111
1141
1131
1121
1
41
31
21
.....
1
...............
nnnn a
aaa
u
l
lll
ul
ululul
a
aaa
(2.1.11)
Ετσι λοιπόν, έχουν προσδιορισθεί µέχρι στιγµής τα στοιχεία της πρώτης γραµµής του πίνακα [U]nxn
και αυτά της πρώτης στήλης του πίνακα [L]nxn, λαµβάνοντας αντίστοιχα υπ’ όψη την πρώτη γραµµή
και την πρώτη στήλη του πίνακα [Α]nxn.
19
Η διαδικασία συνεχίζεται λαµβάνοντας υπ’ όψη το µέρος των εξισώσεων (2.1.8) που αναφέρεται στα
στοιχεία a2j µε j > 1, δηλαδή αυτά της δεύτερης γραµµής του πίνακα [Α]nxn (εξαιρουµένου του
στοιχείου a21 το οποίο έχει ήδη ληφθεί υπ’ όψη στην (2.1.11) ), και ακολούθως µε το µέρος των
εξισώσεων (2.1.8) που αναφέρεται στα στοιχεία ai2 µε i > 2, δηλαδή αυτά της δεύτερης στήλης του
πίνακα [Α]nxn (εξαιρουµένου του στοιχείου a22 το οποίο έχει ήδη ληφθεί υπ’ όψη αµέσως
προηγούµενα). Ετσι προκύπτουν τα συστήµατα των σχέσεων
T
nn
T
n
T
nn
T
n ula
ulaula
u
uu
uul
uuluul
a
aa
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−
−−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⇔
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
+
++
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
1212
132123
122122
2
23
22
2121
231321
221221
2
23
22
............................................ (2.1.12)
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−
−−
⋅=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⇔
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
+
++
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
1212
124142
123132
22
2
42
32
222121
22421241
22321231
2
42
32
.................1
..............................ula
ulaula
ul
ll
ulul
ulululul
a
aa
nnnnnn
(2.1.13)
Σχηµατικά λοιπόν, η «σάρωση» των στοιχείων των τριών πινάκων γίνεται κατά περιοχές βάσει της
ιεράρχησης που φαίνεται κατωτέρω.
...000...............
...00
...0
...
,
1..................0...10...010...001
,
..................
...
...
...
333
22322
1131211
321
3231
21
321
3333231
2232221
1131211
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
nn
n
n
n
nnnnnnnn
n
n
n
u
uuuuuuuuu
lll
lll
aaaa
aaaaaaaaaaaa
Συνοψίζοντας, η επίλυση του συστήµατος των n2 σε αριθµό εξισώσεων (2.1.8), ανάγεται στην
επίλυση των συνολικά 2n-1 συστηµάτων που αντιστοιχούν στα πλαίσια του ανωτέρω σχήµατος µε τη
σειρά που αναφέρονται.Ετσι, το σύστηµα των εξισώσεων των πλαισίων 1 δίνει τα uij της πρώτης
γραµµής, των πλαισίων 2 δίνει τα lij της πρώτης στήλης, των πλαισίων 3 τα uij της δεύτερης γραµµής,
κ.ο.κ.
1 3 5 … 2n-1 1 3 5 … 2n-1
2 4 6 2n-2 2 4 6 2n-2
20
Επαληθεύοντας, τα n οριζόντια πλαίσια µε αρίθµηση 1, 3, 5,…, 2n-1 περιέχουν αντίστοιχα n, n-1, n-2,
..., n-(n-1) στοιχεία. Αθροίζοντας, προκύπτουν n2-(1+2+3+…..+n-1) στοιχεία. Tα n-1 κατακόρυφα
πλαίσια µε αρίθµηση 2, 4, 6,...,2n-2 περιέχουν αντίστοιχα n-1, n-2, n-3, …,n-(n-1) στοιχεία.
Αθροίζοντας, προκύπτουν n(n-1)-(1+2+3+…..+n-1). Αρα συνολικά όλα τα πλαίσια περιέχουν
2222
)1(2
2
1
1
)1.....321(2)1( nnnnnnnnnn
nnkn
k
=+−−+=
∑
−++++−−+
−=−
=
4444 34444 21
στοιχεία, όπως και έπρεπε.
Η παραπάνω διαδικασία υπολογισµού των uij και lij γενικεύεται υπολογίζοντας τα στοιχεία urj της r
γραµµής του πίνακα [U]nxn εφαρµόζοντας τον τύπο
∑−
=
+=−=1
1,.....,1, ,
r
kkjrkrjrj nrrjulau (2.1.14)
και αµέσως µετά υπολογίζοντας τα στοιχεία lir της r στήλης του πίνακα [L]nxn εφαρµόζοντας τον τύπο
nrriulau
lr
kkrikir
rrir ,.....,2,1 , 1 1
1++=⎟
⎠
⎞⎜⎝
⎛−= ∑
−
= (2.1.15)
Οι σχέσεις (2.1.14) και (2.1.15) πρέπει να εφαρµόζονται διαδοχικά για κάθε τιµή του r, µε r =
1,2,…..,n. Στiς σχέσεις αυτές όταν r = 1 οι όροι µε τα αθροίσµατα είναι µηδενικοί (γιατί;).
Εύκολα διαφαίνεται ότι οι προαπαιτούµενες τιµές των u και l που υπεισέρχονται στις σχέσεις (2.1.14)
και (2.1.15), προκειµένου να υπολογισθούν επόµενα στοιχεία urj και lir για µία συγκεκριµένη τιµή του
r, έχουν υπολογισθεί σε προηγούµενα στάδια για προηγούµενες τιµές του r.
Προκειµένου να προγραµµατισθεί η ανωτέρω διαδικασία διάσπασης σε Η/Υ, µπορεί να γίνει
εκµετάλευση του γεγονότος ότι κάθε στοιχείο αij χρειάζεται από τις (2.1.14) και (2.1.15) µόνο µία
φορά, οπότε στη θέση του µπορεί να εγγράφεται κατάλληλα το στοιχείο lij ή το uij. Συνεπώς δεν
απαιτείται ορισµός ξεχωριστών πινάκων [L]nxn και [U]nxn στη µνήµη του Η/Υ. Στην υπορουτίνα
LUDCMP που ακολουθεί γίνεται εκµετάλευση αυτού του γεγονότος, οπότε µετά το τέλος της
διαδικασίας διάσπασης ο αρχικός πίνακας [Α]nxn επιστρέφει από την υπορουτίνα µε τη µορφή
⎥⎥⎥⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢⎢⎢⎢
⎣
⎡
=
−
−−−−−−−
−
−
−
−
nnnnnnnn
nnnnnnnn
nn
nn
nn
nn
nxn
ullllluullll
uuullluuuulluuuuuluuuuuu
A
1,4321
,11,14,13,12,11,1
41,444434241
31,334333231
21,224232221
11,114131211
...
........................
...
...
...
...
][ (2.1.16)
21
∆ηλαδή αποτελείται από µία υπέρθεση των πινάκων [L]nxn και [U]nxn, εξαιρουµένων των στοιχείων
lii = 1, i = 1,2,…,n.
Παράδειγµα 2.1.1
Να επιλυθεί το σύστηµα
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−=
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡⋅
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−
−
5147
122321213
3
2
1
xxx
Κατ’ αρχήν διασπάται ο πίνακας των [Α]3x3 των συντελεστών των αγνώστων βάσει της µεθοδολογίας
του Crout. Εφαρµόζονται οι τύποι (14) και (15) µε την παρακάτω ιεράρχηση.
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−
−=
122321213
][ 33xA
⎪⎩
⎪⎨
⎧
=⇒=−=⇒=
=⇒=⇒===⇒=→
2 3123 1
3,2,1 , 0-1)14.1.2(
13
12
11
111
ujujuj
jaaur jjj
( )⎪⎪⎩
⎪⎪⎨
⎧
=⇒=
=⇒=⇒==−=⇒=→
323
312
3,2 , 011)15.1.2(
31
21
11
11
111
li
lii
uaa
ulr i
ii
⎪⎪⎩
⎪⎪⎨
⎧
=⇒⋅−=−=⇒=
=⇒−−=−=⇒=⇒
⇒==−=⇒=→ ∑=−
=
37 2
3133
37)1(
3122
32 , 2)14.1.2(
2313212323
2212212222
112
11212222
uulauj
uulauj
,ju-l aulaurk
jjkjkjj
( ) =−=⇒=⎟⎠
⎞⎜⎝
⎛−=⇒=→ ∑
=−
=123132
2232
112
122
222
13 , 12)15.1.2( ulau
liulau
lrk
kikii
(1) - r = 1
(3) - r = 2
(5) - r = 3
(2) (4) r = 1 r = 2
22
74)1(
322
73 32 −=⇒⎟
⎠⎞
⎜⎝⎛ −−−= l
( ) 137
742
321
3 , 3)14.1.2(
332332133133
2
133
213
13333333
−=⇒⎥⎦
⎤⎢⎣
⎡⋅⎟⎠⎞
⎜⎝⎛−+⋅−−=+−=
=−=⇒=−=⇒=→ ∑∑=
=−
=
uulula
ulaujulaurk
kkk
kjkjj
Αρα είναι
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−
−=
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−=
10037370
213][ ,
174320131001
][ 3333 xx UL
Το γινόµενο [L]3x3[U]3x3 πράγµατι επαληθεύει τη σχέση (2.1.1).
Εν συνεχεία εφαρµόζονται οι σχέσεις (2.1.6) για την επίλυση του συστήµατος (2.1.4).
( )
( )[ ]
⎪⎪⎪⎪
⎩
⎪⎪⎪⎪
⎨
⎧
−=⇒
⇒⎭⎬⎫
⎩⎨⎧
⎥⎦
⎤⎢⎣
⎡⎟⎠⎞
⎜⎝⎛−+⋅−−=+−=⎥
⎦
⎤⎢⎣
⎡−=⇒=
=⇒⎟⎠⎞
⎜⎝⎛ ⋅−=−=⎥
⎦
⎤⎢⎣
⎡−=⇒=
⇒
⇒=⎥⎦
⎤⎢⎣
⎡−=
=⇒==
∑
∑
∑
=−
=
=−
=
−
=
3
335
747
325
11113
3357
3114
11112
,...,3,2 , 1
717
3
232131333
213
133
333
2121222
112
122
222
1
1
111
11
y
ylylbl
ylbl
yi
yylbl
ylbl
yi
niylbl
y
ylby
jjj
jjj
i
jjiji
iii
Τέλος εφαρµόζονται οι σχέσεις (2.1.7) για την επίλυση του συστήµατος (2.1.5).
( )
( )[ ] ( )[ ] ⎪⎪
⎩
⎪⎪
⎨
⎧
=⇒⋅+⋅−−=+−=⎥⎦
⎤⎢⎣
⎡−=⇒=
=⇒⎟⎠⎞
⎜⎝⎛ ⋅−=−=⎥
⎦
⎤⎢⎣
⎡−=⇒=
⇒
⇒=⎥⎦
⎤⎢⎣
⎡−=
=⇒−−
==
∑
∑
∑
=
=+=
=
=+=
=
+=
13221731111
2337
335
73112
1,2 , 1
313
1313212111
3
21111
111
2323222
3
31222
222
3
1
333
33
xxuxuyu
xuyu
xi
xxuyu
xuyu
xi
ixuyu
x
xuyx
n
jjj
n
jjj
n
ijjiji
iii
Ετσι, η τελική λύση του συστήµατος είναι
23
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
321
][
3
2
1
13
xxx
x x
Εύρεση αντιστρόφου πίνακα
Ο αντίστροφος πίνακας ενός τετραγωνικού πίνακα [Α]nxn µπορεί να προκύψει στήλη-στήλη σαν
επίλυση διαδοχικών συστηµάτων του τύπου [Α][x]=[b], θεωρώντας ότι σε κάθε επίλυση οι
συντελεστές [b] θα είναι τα στοιχεία µιάς στήλης του µοναδιαίου πίνακα και οι άγνωστοι [x] θα είναι
τα στοιχεία της αντίστοιχης στήλης του ζητούµενου αντιστρόφου πίνακα. ∆ηλαδή, εάν *ija είναι τα
στοιχεία του ζητουµένου αντιστρόφου πίνακα, αρκεί η επίλυση των n συστηµάτων
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⇒
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⇒
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
−
1...000
......
........................
...........................................................
0...010
......
........................
0...001
......
........................
1...000...............0...1000...0100...001
..................
...
...
...
..................
...
...
...
*
*3
*2
*1
321
3333231
2232221
1131211
*2
*32
*22
*12
321
3333231
2232221
1131211
*1
*31
*21
*11
321
3333231
2232221
1131211
][][
**3
*2
*1
*3
*33
*32
*31
*2
*23
*22
*21
*1
*13
*12
*11
][
321
3333231
2232221
1131211
1
nn
n
n
n
nnnnn
n
n
n
nnnnnn
n
n
n
nnnnnn
n
n
n
IA
nnnnn
n
n
n
A
nnnnn
n
n
n
a
aaa
aaaa
aaaaaaaaaaaa
a
aaa
aaaa
aaaaaaaaaaaa
a
aaa
aaaa
aaaaaaaaaaaa
aaaa
aaaaaaaaaaaa
aaaa
aaaaaaaaaaaa
nxnnxnnxn
444 3444 214444 34444 214444 34444 21
(2.1.17)
24
Παράδειγµα 2.1.2
Να ευρεθεί ο αντίστροφος του πίνακα των συντελεστών των αγνώστων του παραδείγµατος 2.1.1.
Βάσει των σχέσεων (2.1.17) αρκεί η επίλυση των τριών συστηµάτων
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
⋅⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−
−
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
⋅⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−
−
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
⋅⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−
−
100
122321213
, 010
122321213
, 001
122321213
*33
*23
*13
*32
*22
*12
*31
*21
*11
aaa
aaa
aaa
Η επίλυση των τριών συστηµάτων γίνεται µε τη µέθοδο Crout όπως ακριβώς στο παράδειγµα 2.1.1.
Τελικά προκύπτει
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−−
−=−
17/47/611117/57/4
][ 133xA
Οι πράξεις αφήνονται ως άσκηση στον αναγνώστη.
Εύρεση ορίζουσας πίνακα
Εύκολα µπορεί να αποδειχθεί ότι η ορίζουσα ενός διασπασµένου τετραγωνικού πίνακα κατά το
σχήµα L-U δίνεται από τη σχέση
∏=
==n
jjjnxnnxn uAA
1
]det[ (2.1.18)
Παράδειγµα 2.1.3
Η ορίζουσα του πίνακα των συντελεστών των αγνώστων του παραδείγµατος 2.1.1 θα είναι
7)1(373
33−=−⋅⋅=
xA
Υπορουτίνα Μεθόδου Crout σε FORTRAN 90/95 Η υπορουτίνα LUDCMP είναι γραµµένη σε FORTRAN 90/95. Ολες οι πραγµατικές µεταβλητές
είναι διπλής ακρίβειας (8 bytes). Στην υπορουτίνα εισάγεται η µεταβλητή-πίνακας [Α]nxn και
εκτελείται η διάσπασή του βάσει των σχέσεων (2.1.14-16), τροποποιηµένων καθ’ όσον ακολουθείται
διαφορετική σειρά «σάρωσης» γραµµών και στηλών από την προαναφερθείσα. Ο πίνακας εισάγεται
µε τη µορφή της (2.1.1) και επιστρέφει µε τη µορφή της (2.1.16), οπότε οι αρχικές τιµές του θα έχουν
χαθεί.
Στην υπορουτίνα εισάγονται και επιστρέφουν οι παρακάτω µεταβλητές:
[Α]NPxNP : Ο προς διάσπασιν πίνακας [Α] διαστάσεων nxn.
N, NP : Μεταβλητές ίσες µε τη διάσταση n του πίνακα [Α].
25
[INDX]NP : Mονοδιάστατος πίνακας που κρατά την ιστορία των αντιµεταθέσεων των γραµµών,
λόγω της έρευνας για κατάλληλο διαιρέτη της (2.1.15) (τροποποιηµένης).
D : Μεταβλητή που επιστρέφει µε την τιµή ±1 το πρόσηµο της οποίας εξαρτάται από το
αν ο αριθµός των αντιµεταθέσεων των γραµµών είναι άρτιος ή περιττός αντίστοιχα.
Υπορουτίνα για την Προς τα Πίσω Αντικατάσταση σε FORTRAN 90/95 Η υπορουτίνα LUBKSB είναι γραµµένη σε FORTRAN 90/95. Ολες οι πραγµατικές µεταβλητές
είναι διπλής ακρίβειας (8 bytes). Η υπορουτίνα εκτελεί την τελική επίλυση του συστήµατος (2.1.2)
βάσει των σχέσεων (2.1.3)-(2.1.7). Στην υπορουτίνα εισάγεται η µεταβλητή-πίνακας [Α]nxn µε τη
µορφή της (2.1.16) η οποία θα έχει προκύψει από ενωρίτερη κλήση της υπορουτίνας LUDCMP.
Στην υπορουτίνα εισάγονται και επιστρέφουν οι παρακάτω µεταβλητές:
[Α]NPxNP : Ο ήδη διασπασµένος πίνακας [Α] διαστάσεων nxn.
N, NP : Οπως στην υπορουτίνα LUDCMP.
[INDX]NP : Οπως στην υπορουτίνα LUDCMP.
[B]NP : Μονοδιάστατος πίνακας όπου αρχικά περιέχει τους συντελεστές bi του συστήµατος
(2.1.2). Μετά την εκτέλεση της υπορουτίνας, ο πίνακας [Β]NP επιστρέφει µε τις
τιµές των αγνώστων [x]n, οπότε οι αρχικές τιµές του bi θα έχουν χαθεί.
Συνοψίζοντας, το σετ των δύο αυτών υπορουτινών µπορεί να χρησιµοποιηθεί για τους παρακάτω
σκοπούς µε τους τρόπους που αναφέρονται:
• Επίλυση συστήµατος γραµµικών εξισώσεων: [Α]nxn[x]n = [b]n
Aρκεί η κλήση των δύο υπορουτινών: ............................. CALL LUDCMP (A,N,NP,INDX,D) CALL LUBKSB (A,N,NP,INDX,B) .............................
Για µετέπειτα επίλυση του ιδίου συστήµατος αλλά µε διαφορετικούς συντελεστές bi αρκεί να
καλείται µόνον η LUBKSB µε τους συντελεστές αυτούς στη θέση του πίνακα [Β]n.
• Εύρεση αντιστρόφου πίνακα: [Α]-1nxn
Το ακόλουθο σέτ εντολών υλοποιεί τη διαδικασία επίλυσης των συστηµάτων (2.1.17).
...................................... DIMENSION A(NP,NP),A1(NP,NP),INDX(NP) ...................................... N = NP DO I=1,N DO J=1,N A1(I,J) = 0.00 END DO A1(I,I) = 1.00
END DO
26
CALL LUDCMP (A,N,NP,INDX,D) DO 30 J=1,N CALL LUBKSB (A,N,NP,INDX,A1(1,J))
END DO ................................
Η µεταβλητή-πίνακας [Α1]nxn αναφέρεται στον ζητούµενο αντίστροφο πίνακα και εισάγεται στην
υπορουτίνα LUBKSB τµηµατικά κατά στήλες.
• Εύρεση ορίζουσας πίνακα [Α]nxn
Το ακόλουθο σέτ αντολών υλοποιεί τη διαδικασία της σχέσης (2.1.18). ............................... CALL LUDCMP (A,N,NP,INDX,D) DET = 1.00D+00 DO J=1,N DET = DET*A(J,J)
END DO ...............................
Η τιµή της ορίζουσας εµπεριέχεται στη µεταβλητή DET.
Ακολουθούν οι λίστες των εντολών των δύο υπορουτινών LUDCMP και LUBKSB.
! ================================================================== ! | SUBROUTINE TO PERFORM THE L-U DECOMPOSITION ON A REAL MATRIX | ! | | ! | CROUT METHOD | ! | | ! | Original routine from the book: | ! | Numerical Recipes, The Art of Scientific Computing (FORTRAN | ! | Version). By: W.H. Press, et al, 1992 ed. | ! | | ! | FORTRAN 90/95 modification by: M. G. Sfakianakis | ! | M.G. Sfakianakis, University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! [A]NPxNP : Matrix to be decomposed. ! NP, N : Physical matrix dimension, n. ! [INDX]NP : Records the row permutation effected by the partial ! pivoting. ! D : Output as +1 or –1 depending on whether the number of ! row interchanges is even or odd, respectively. ! ------------------------------------------------------------------ ! SUBROUTINE LUDCMP (A,N,NP,INDX,D) ! IMPLICIT REAL*8 (A-H,O-Z) ! PARAMETER (NMAX=10000,TINY=1.00D-20) ! DIMENSION A(NP,NP),INDX(NP),VV(NMAX) ! D = 1.00D+00 ! DO 12 I=1,N AAMAX = 0.00D+00 ! DO 11 J=1,N IF (DABS(A(I,J))>AAMAX) AAMAX = DABS(A(I,J)) 11 CONTINUE ! IF (AAMAX==0.00D+00) WRITE (*,"(/2(/A)/A,I5)") & & ' *************** ERROR ***************', & & ' SUBROUTINE LUDCMP : Singular Matrix', & & ' ROW No. : ',I ! IF (AAMAX==0.00) STOP ! VV(I)=1.00/AAMAX 12 CONTINUE ! DO 19 J=1,N ! DO 14 I=1,J-1 SUM = A(I,J) ! DO 13 K=1,I-1 SUM = SUM - A(I,K)*A(K,J) 13 CONTINUE ! A(I,J) = SUM 14 CONTINUE ! AAMAX = 0.00D+00 ! DO 16 I=J,N SUM = A(I,J) ! DO 15 K=1,J-1 SUM = SUM - A(I,K)*A(K,J) 15 CONTINUE ! A(I,J) = SUM DUM = VV(I)*DABS(SUM) IF (DUM>=AAMAX) THEN IMAX = I AAMAX = DUM ENDIF ! 16 CONTINUE ! IF (J/=IMAX) THEN !
DO 17 K=1,N DUM = A(IMAX,K) A(IMAX,K) = A(J,K) A(J,K) = DUM 17 CONTINUE ! D = -D VV(IMAX) = VV(J) ENDIF ! INDX(J) = IMAX IF (A(J,J)==0.00) A(J,J) = TINY IF (J/=N) THEN DUM = 1.00/A(J,J) ! DO 18 I=J+1,N A(I,J) = A(I,J)*DUM 18 CONTINUE ! ENDIF ! 19 CONTINUE ! RETURN END !
27
! ================================================================== ! | SUBROUTINE TO SOLVE A SET OF N LINEAR EQUATIONS [A][X]=[B] | ! | WHERE [A] IS IN DECOMPOSED FORM OF THE TYPE L-U | ! | | ! | CROUT METHOD (continued for system solution) | ! | | ! | Original routine from the book: | ! | Numerical Recipes, The Art of Scientific Computing (FORTRAN | ! | Version). By: W.H. Press, et al, 1992 ed. | ! | | ! | FORTRAN 90/95 modification by: M. G. Sfakianakis | ! | M.G. Sfakianakis, University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! [A]NPxNP : Decomposed matrix [A]. ! NP, N : Physical matrix dimension, n. ! [INDX]NP : Records the row permutation effected by the partial ! pivoting. ! [B]NP : Input as the right-hand side vector [B] and returns ! with the solution [X]. ! ------------------------------------------------------------------ ! SUBROUTINE LUBKSB (A,N,NP,INDX,B) ! IMPLICIT REAL*8 (A-H,O-Z) ! DIMENSION A(NP,NP),INDX(NP),B(NP) !
II = 0 ! DO 12 I=1,N LL = INDX(I) SUM = B(LL) B(LL) = B(I) IF (II/=0) THEN ! DO 11 J=II,I-1 SUM = SUM - A(I,J)*B(J) 11 CONTINUE ! ELSE IF (SUM/=0.00) THEN II = I ENDIF B(I) = SUM 12 CONTINUE ! DO 14 I=N,1,-1 SUM = B(I) ! DO 13 J=I+1,N SUM = SUM - A(I,J)*B(J) 13 CONTINUE ! B(I) = SUM/A(I,I) 14 CONTINUE ! RETURN END !
2.2 Η ΜΕΘΟ∆ΟΣ Cholesky H µέθοδος Cholesky αναφέρεται στην εύρεση του αντιστρόφου ενός πίνακα [Α]nxn θεωρώντας ότι
αυτός είναι συµµετρικός και θετικά ορισµένος. Υπενθυµίζεται ότι ένας πίνακας θεωρείται θετικά
ορισµένος εάν ισχύει η συνθήκη
0][][][ >⋅⋅ nnxnTnxn XAX (2.2.1)
για κάθε µη µηδενικό διάνυσµα [Χ]n.
Γραµµικά συστήµατα της µορφής
nnxnnnnnxn bAxbxA ][][][][][][ 1 ⋅=⇔=⋅ − (2.2.2)
όπου ο πίνακας [Α]nxn των συντελεστών των αγνώστων πληρεί τις παραπάνω ιδιότητες απαντώνται µε
ιδιαίτερη συχνότητα σε προβλήµατα Μηχανικής.
Ο αλγόριθµος βασίζεται στην ιδιότητα βάσει της οποίας ένας συµµετρικός πίνακας µπορεί να
διασπασθεί κατά το σχήµα
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⇔⋅=
nn
n
n
nnnnnnnn
n
n
Tnxnnxnnxn
l
lllll
lll
lll
aaa
aaaaaa
LLA
...00............
...0
...
...............0...0...0
...............
...
...
][][][ 222
12111
21
2221
11
21
22221
11211
(2.2.3)
Προκειµένου να υπολογισθούν οι όροι lij του πίνακα [L]nxn, εκτελούνται οι πράξεις της (2.2.3) οπότε
προκύπτει το ακόλουθο σύστηµα προσδιορισµού των όρων αυτών
28
( )
⎪⎪⎪⎪⎪⎪⎪⎪
⎩
⎪⎪⎪⎪⎪⎪⎪⎪
⎨
⎧
−=
−=
−=
=
=
=
⇔
⎪⎪⎪⎪⎪⎪
⎭
⎪⎪⎪⎪⎪⎪
⎬
⎫
=+++
=+
=+
=
==
∑−
=
1
1
2
2212122
2212222
1111
111221
1111
222
21
2222121
22222
221
1111
122111
112
11
.................................
............................
.....................
...........................................
......................................
......................................
n
jnjnnnn
nnn
nn
nnnnnn
nnn
nn
lal
lllal
lal
lal
lalal
alll
allll
all
all
allal
(2.2.4)
Εύκολα προκύπτει ότι οι σχέσεις (2.2.4) µπορούν να γενικευθούν στις σχέσεις
1,.....,2,1 ,
1
1 −=−
=∑−
= kil
llal
ii
i
jkjijki
ki (2.2.5α)
∑−
=
−=1
1
2k
jkjkkkk lal (2.2.5β)
Οι σχέσεις (2.2.5) εκτελούνται για k=1,2,…..,n. Για µία συγκεκριµένη γραµµή k >1 εκτελείται πρώτα
η (2.2.5α) και µετά η (2.2.5β). Ειδικά για την πρώτη γραµµή, k =1, η (2.2.5α) παραλείπεται. Βάσει
λοιπόν αυτής της ιεράρχησης, τα στοιχεία του πίνακα [L]nxn υπολογίζονται κατά γραµµές.
Είναι προφανές ότι η υπόριζος ποσότητα της (2.2.5β) θα πρέπει να προκύπτει θετική. Η απαίτηση
αυτή ικανοποιείται από την ιδιότητα του θετικά ορισµένου πίνακα.
Εν συνεχεία, από τη σχέση (2.2.3) προκύπτει ότι για την εύρεση του αντιστρόφου του πίνακα [Α]nxn
ισχύει
( ) ( ) ( ) 111111 ][][][][][][][][][][ −−−−−− ⋅=⋅=⋅=⇔⋅= nxnT
nxnnxnTnxn
Tnxnnxnnxn
Tnxnnxnnxn LLLLLLALLA (2.2.6)
Εποµένως για την εύρεση του αντιστρόφου του πίνακα [Α]nxn απαιτείται η εύρεση του αντιστρόφου
του πίνακα [L]nxn ο οποίος θα είναι επίσης κάτω τριγωνικός (γιατί;). Eάν λοιπόν [Χ]nxn είναι ο
αντίστροφος του [L]nxn τότε είναι
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⇔=⋅
1...00............0...100...01
...............0...0...0
...............0...0...0
][][][
21
2221
11
21
2221
11
nnnnnnnn
nxnnxnnxn
xxx
xxx
lll
lll
IXL (2.2.7)
29
Για την επίλυση του συστήµατος (2.2.7) υιοθετείται η λογική της κατά στήλες επίλυσης των
αγνώστων του πίνακα [Χ]nxn, κατ’ αναλογίαν µε το σύστηµα (2.1.17). Ετσι προκύπτουν n γραµµικά
συστήµατα της µορφής (2.1.4), η συνολική λύση των οποίων περιγράφεται από τις σχέσεις
⎩⎨⎧
=≠
=
=⎥⎦
⎤⎢⎣
⎡−=
=
∑−
=
kiki
b
nixlbl
x
lb
x
ik
i
jjkijik
iiik
kk
, 1 , 0
,...,3,2 , 1 1
1
11
11
(2.2.8)
Οι σχέσεις (2.2.8) έχουν προκύψει από γενίκευση-προσαρµογή των σχέσεων (2.1.6) στο εν λόγω
σύστηµα (2.2.7) και εφαρµόζονται για k =1,2,…..,n. Oι µηδενικοί όροι των στηλών του πίνακα [Χ]nxn
µπορούν να προκύπτουν από την εφαρµογή των (2.2.8). Ωστόσο, ο υπολογισµός των µηδενικών όρων
µπορεί να αποφεύγεται εάν η δεύτερη σχέση των (2.2.8) εφαρµόζεται για i=k,k+1,…..,n. Οι τελευταίοι
συλλογισµοί µπορούν να ενσωµατωθούν στις σχέσεις (2.2.8) οπότε προκύπτει η τελική µορφή
επίλυσης του συστήµατος (2.2.7) ως
⎪⎪⎪⎪
⎩
⎪⎪⎪⎪
⎨
⎧
++=⎥⎦
⎤⎢⎣
⎡−
=⎥⎦
⎤⎢⎣
⎡−
−=
=
⎩⎨⎧
==
=
∑
∑−
=
−
=
nkkixll
kixll
ki
x
nkkl
x
i
jjkij
ii
i
jjkij
iiik
k
,...,2,1 , 1
, 11
1,...,3,2 , 0
,.....,3,2 , 01 , 1
1
1
1
1
111
(2.2.9)
Παράδειγµα 2.2.1
Να επιλυθεί µε τη µέθοδο Cholesky το σύστηµα
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
1452906340
30
246126434126109363
43362924321
4
3
2
1
xxxx
Κατ’ αρχήν εφαρµόζονται οι σχέσεις (2.2.5) για την εύρεση του πίνακα [L]4x4.
(2.2.5β) 111 111111 =⇒==⇒=→ lalk
30
(2.2.5α) 2121 , 2 21
11
2121
22 =⇒==⇒==⇒=→ l
la
lila
lkii
ii
(2.2.5β) 52292 2222
212222 =⇒−=−=⇒=→ llalk
(2.2.5α)
⎪⎪⎩
⎪⎪⎨
⎧
=⇒⋅−
=−
=
=⇒==⇒=
−=⇒=→
∑−
=
65
3236
313
2,1 , 3
3222
31213232
3111
3131
1
133
3
ll
llal
lla
li
l
llalk
ii
i
jjiji
i
(2.2.5β) 8631093 33222
3223133
2
1
233333 =⇒−−=−−=−=⇒=→ ∑
=
lllalalkj
j
⎪⎪⎪⎪⎪
⎩
⎪⎪⎪⎪⎪
⎨
⎧
=⇒⋅−⋅−
=−−
=−
=
=⇒⋅−
=−
=
=⇒==
⇒
⇒=−
=⇒=→
∑
∑
=
−
=
98
7643126
75
4243
414
3,2,1 , 4)α5.2.2(
4333
4232413143
33
2
14343
43
4222
41214242
4111
4141
1
144
4
ll
llllal
llal
ll
llal
lla
l
il
llalk
jjj
ii
i
jjiji
i
10
9742464)β5.2.2(
44
222243
242
24144
3
1
244444
=⇒
⇒−−−=−−−=−=⇒=→ ∑=
l
lllalalkj
j
Τελικά είναι
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
10974086300520001
][ 44xL
Εν συνεχεία εφαρµόζονται οι σχέσεις (2.2.9) για την εύρεση του αντιστρόφου του πίνακα [L]4x4.
11111 11
1111 =⇒==⇒= x
lxk
31
( )
( )
⎪⎪⎪⎪⎪⎪⎪
⎩
⎪⎪⎪⎪⎪⎪⎪
⎨
⎧
−=⇒⎥⎦
⎤⎢⎣
⎡⎟⎠⎞
⎜⎝⎛−⋅+⎟
⎠⎞
⎜⎝⎛−⋅+⋅−=
=++−=−=⇒==+=
−=⇒⎥⎦
⎤⎢⎣
⎡⎟⎠⎞
⎜⎝⎛−⋅+⋅−=
=+−=−=⇒=+=
−=⇒⋅⋅−=−=⇒=+=
⇒=
∑
∑
=
=
40021
4039
52714
101
1143
403
52613
81
1132
5212
51121
1
41
3
1314321421141
4414
4441
31
2132113133
2
113
3331
21112122
21
x
xlxlxll
xll
xnki
x
xlxll
xll
xki
xxll
xki
k
jjj
jjj
02 12 =⇒= xk
[ ] ( )
( )
( )
⎪⎪⎪⎪⎪⎪⎪
⎩
⎪⎪⎪⎪⎪⎪⎪
⎨
⎧
−=⇒⎥⎦
⎤⎢⎣
⎡⎟⎠⎞
⎜⎝⎛−⋅+⋅+⋅−=
=++−=−=⇒==+=
−=⇒
⇒⎟⎠⎞
⎜⎝⎛ ⋅+⋅−=+−=−=⇒=+=
=⇒⋅−=−=⇒==
⇒=
∑
∑
=
=
2001
2039
51704
101
1142
203
51603
811131
51021
51112
2
42
32432242124144
3
124
4442
32
2232123133
2
123
3332
22122122
22
x
xlxlxll
xll
xnki
x
xlxll
xll
xki
xxll
xki
k
jjj
jjj
03 13 =⇒= xk
( ) ( )
( )
⎪⎪⎪⎪⎪⎪⎪
⎩
⎪⎪⎪⎪⎪⎪⎪
⎨
⎧
−=⇒⎟⎠⎞
⎜⎝⎛ ⋅+⋅+⋅−=
=++−=⎥⎦
⎤⎢⎣
⎡−=⇒==+=
=⇒
⇒⋅−⋅−=−−=⎥⎦
⎤⎢⎣
⎡−=⇒==
=⇒=
⇒=
∑
∑
=
=
809
8190704
101
1141
81
060318111113
02
3
43
33432342134144
3
134
4443
33
2332133133
2
133
3333
23
x
xlxlxll
xll
xnki
x
xlxll
xll
xki
xi
k
jjj
jjj
04 14 =⇒= xk
32
( )
( )⎪⎪⎪⎪
⎩
⎪⎪⎪⎪
⎨
⎧
=⇒⋅−⋅−⋅−=
=−−−=⎥⎦
⎤⎢⎣
⎡−=⇒==
=⇒==⇒=
⇒= ∑=
1010907041
101
11114
0302
4
44
34432442144144
3
144
4444
34
24
x
xlxlxll
xll
xki
xixi
kj
jj
Τελικά δηλαδή είναι
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−−−−
−==−
1018092001400210812034030051520001
][][ 441
44 xx XL
Οπότε βάσει της (2.2.9) ο αντίστροφος του [Α]4x4 θα είναι
( )
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−−−−−−−−
−−−
=⇒
⇒
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−−−−
−
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−−
−−−
=⋅=
−
−−−
0101080902001040021800964001811600029132000111
200011600029140000250180000547940002132000111800005479160000186941
][
1018092001400210812034030051520001
.
1010008098100
200120351040021403521
][][][
144
144
144
144
x
xT
xx
A
LLA
Τελικά η λύση του ζητουµένου συστήµατος προκύπτει
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⇒
⇒
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−−−−−−−−
−−−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−
4321
1452906340
30
0101080902001040021800964001811600029132000111
200011600029140000250180000547940002132000111800005479160000186941
1452906340
30
][
4
3
2
1
144
4
3
2
1
xxxx
A
xxxx
x
33
2.3 Η ΜΕΘΟ∆ΟΣ krylov
Στην παράγραφο αυτή, οι όροι µε την «περισπωµένη» θα συµβολίζουν πίνακες, π.χ.: ][~ AA =
H µέθοδος Krylov αναφέρεται στην εύρεση των συντελεστών του χαρακτηριστικού πολυωνύµου
καθώς και στην εύρεση όλων των ιδιοδιανυσµάτων ενός πίνακα [Α]nxn, των σχετικών µε το θεµελιώδες
πρόβληµα ιδιοτιµών
( ) 0
..................................................
...
...
...
~~0 0~~~~~~
321
3333231
2232221
1131211
=
−
−−
−
=−⇒⎭⎬⎫
≠=⋅−⇒=⋅
λ
λλ
λ
λλλ
nnnnn
n
n
n
aaaa
aaaaaaaaaaaa
IAXXIAXXA
(2.3.1)
Εύρεση Συντελεστών Χαρακτηριστικού Πολυωνύµου µε τη µέθοδο Krylov Η ανάπτυξη της ορίζουσας (2.3.1) οδηγεί στο χαρακτηριστικό πολυώνυµο-εξίσωση ως προς τις
ιδιοτιµές λ που έχει τη µορφή
1 , 0.....)( 012
22
21
1 ==++++++= −−
−− n
nn
nn
nn pppppppP λλλλλλ (2.3.2)
Οι συντελεστές pi του χαρακτηριστικού πολυωνύµου είναι συναρτήσεις των όρων aij του πίνακα [A]nxn
και µπορούν, εναλλακτικά, να προσδιορισθούν και µε τη µέθοδο Leverrier.
Bάσει του θεωρήµατος των Cayley-Hamilton κάθε τετραγωνικός πίνακας, άρα και ο A~ , είναι
ρίζα του χαρακτηριστικού πολυωνύµου. ∆ηλαδή ισχύει η σχέση
0~~.....~~~)~( 012
22
21
1 =++++++= −−
−− pApApApApAAP n
nn
nn (2.3.3)
Εστω τώρα ένα αυθαίρετο αλλά µη µηδενικό διάνυσµα )0(~Y µε συνιστώσες
0.....
~
)0(
)0(2
)0(1
)0( ≠
⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢
⎣
⎡
=
ny
yy
Y (2.3.4)
Ο πολλαπλασιασµός της (2.3.3) µε το διάνυσµα )0(~Y δίνει
0~~~~~.....~~~~~~ )0(0
)0(1
)0(22
)0(22
)0(11
)0( =+⋅+⋅++⋅+⋅+⋅ −−
−− YpYApYApYApYApYA n
nn
nn (2.3.5)
Ακολούθως, ορίζεται η ακολουθία διανυσµάτων )(~ kY ως
34
nkYAY kk ,.....,2,1 , ~~~ )0()( =⋅= (2.3.6)
∆ηλαδή, κάθε διάνυσµα )(~ kY προκύπτει από το διάνυσµα )0(~Y πολλαπλασιασµένο επί τον πίνακα A~
υψωµένο εις την k-στή δύναµη.
Λόγω λοιπόν της (2.3.6) η (2.3.5) καθίσταται
)()0(
0)1(
1)2(
2)2(
2)1(
1
)0(0
)1(1
)2(2
)2(2
)1(1
)(
~~~~.....~~
0~~~.....~~~
nnn
nn
nn
nn
n
YYpYpYpYpYp
YpYpYpYpYpY
−=+++++⇔
⇔=++++++
−−
−−
−−
−−
(2.3.7)
Η ανάπτυξη της (2.3.7) ως προς τις συνιστώσες των διανυσµάτων )(~ mY , m=0,1,2,…..,n καταλήγει
στο σύστηµα
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
−=
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
−
−
−
−−−
−−−
−−−
−−−
)(
)(3
)(2
)(1
0
3
2
1
)0()3()2()1(
)0(3
)3(3
)2(3
)1(3
)0(2
)3(2
)2(2
)1(2
)0(1
)3(1
)2(1
)1(1
.............
..........................................
nn
n
n
n
n
n
n
nn
nn
nn
n
nnn
nnn
nnn
y
yyy
p
ppp
yyyy
yyyyyyyyyyyy
(2.3.8)
από το οποίο µπορούν να υπολογισθούν οι συντελεστές pm , m=0,1,2,…..,n-1 του χαρακτηριστικού
πολυωνύµου (2.3.2). Το µόνο που απαιτείται πριν την επίλυση του συστήµατος (2.3.8) είναι ο
υπολογισµός των διανυσµάτων )(~ kY βάσει της (2.3.6). Ο υπολογισµός αυτός εµπεριέχει την ύψωση
του πίνακα A~ σε δυνάµεις, διαδικασία πoυ υπολογιστικά (προγραµµατιστικά) είναι απλή. Περαιτέρω,
προκειµένου η επίλυση του συστήµατος (2.3.8) να είναι εφικτή, αρκεί η ορίζουσα των συντελεστών
των αγνώστων pm να είναι µη µηδενική. Εις περίπτωσιν όπου προκύψει µηδενική, αρκεί η εκλογή ενός
διαφορετικού-καταλληλότερου αρχικού-αυθαιρέτου διανύσµατος )0(~Y .
Συµπερασµατικά, θα πρέπει να σηµειωθεί ότι για τον προσδιορισµό των συντελεστών του
χαρακτηριστικού πολυωνύµου η µέθοδος Krylov εµπεριέχει υπολογιστικό φόρτο εν πολλοίς παρόµοιο
µε αυτόν της µεθόδου Leverrier.
Εύρεση του Συνόλου τών Ιδιοδιανυσµάτων µε τη µέθοδο Krylov Για την εύρεση του συνόλου των ιδιοδιανυσµάτων µε τη µέθοδο Krylov θα απαιτηθούν οι
ακόλουθες σχέσεις (2.3.9) και (2.3.10).
Η ανάπτυξη της ακολουθίας (2.3.6) για διάφορες τιµές του k οδηγεί στις σχέσεις
( )( ) )2()0()0(3)3(
)1()0()0(2)2(
)0()1(
~~ ~~~~~~~ 3
~~ ~~~~~~ 2
~~ ~ 1
YAYAAAYAYk
YAYAAYAYk
YAYk
⋅=⋅⋅⋅=⋅=→=
⋅=⋅⋅=⋅=→=
⋅=→=
(2.3.9)
35
)1()0(
1
)0()( ~~~~~~~~~~
...................................................................................................
−
−
⋅=⎟⎟⎠
⎞⎜⎜⎝
⎛⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅=⋅=→= k
k
kk YAYAAAAYAYkk 4434421 (2.3.9)
Από το θεµελιώδες πρόβληµα ιδιοτιµών (2.3.1) για κάθε ιδιοτιµή λi και αντίστοιχο ιδιοδιάνυσµα )(~ iX µε i=1,2,…..,n, προκύπτει η ακολουθία
( )( )
( ) )()(1)(1)(
)(3)(2)(2)(3
)(2)()()(2
)()(
~~~~~~..................................................................
~ ~~~~~
~ ~~~~~
~ ~~
iki
ii
ki
iki
ik
ii
iii
ii
i
ii
iii
ii
i
ii
i
XXXAXA
XXXAXA
XXXAXA
XXA
λλλλ
λλλλ
λλλλ
λ
==⋅=⋅
==⋅=⋅
==⋅=⋅
=⋅
−−
(2.3.10)
Εάν )(~ mX , m=1,2,…..,n είναι τα n ζητούµενα ιδιοδιανύσµατα του θεµελιώδους προβλήµατος
ιδιοτιµών (2.3.1), τότε κάθε διάνυσµα, άρα και το εκλεγέν αυθαίρετο )0(~Y της µεθόδου Krylov,
µπορεί να εκφρασθεί ως γραµµικός συνδυασµός των ιδιοδιανυσµάτων αυτών. Προκειµένου λοιπόν
για το )0(~Y θα είναι
)()1(1
)2(2
)1(1
)0( ~~.....~~~ nn
nn XcXcXcXcY ++++= −− (2.3.11α)
όπου τα ci, i=1,2,…..,n είναι πραγµατικοί συντελεστές και θα πρέπει να έχουν κατάλληλες
αριθµητικές τιµές προκειµένου να ισχύει η (2.3.11α).
Πολλαπλασιάζοντας τώρα την (2.3.11α) µε τον πίνακα A~ προκύπτει
)()1(1
)2(2
)1(1
)0( ~~~~.....~~~~~~ nn
nn XAcXAcXAcXAcYA ⋅+⋅++⋅+⋅=⋅ −− (2.3.12)
Λαµβάνοντας υπ’ όψιν τις (2.3.9) και (2.3.10) η (2.3.12) καθίσταται
)()1(11
)2(22
)1(11
)1( ~~.....~~~ nnn
nnn XcXcXcXcY λλλλ ++++= −−− (2.3.11β)
Καθ’ όµοιον τρόπο, πολλαπλασιάζεται τώρα η (2.3.11β) µε τον πίνακα A~ και λαµβάνοντας υπ’ όψιν
τις (2.3.9) και (2.3.10) προκύπτει
⇒⋅+⋅++⋅+⋅=⋅ −−−
)()1(11
)2(22
)1(11
)1( ~~~~.....~~~~~~ nnn
nnn XAcXAcXAcXAcYA λλλλ
)(2)1(211
)2(222
)1(211
)2( ~~.....~~~ nnn
nnn XcXcXcXcY λλλλ ++++=⇒ −−− (2.3.11γ)
Η διαδικασία των πολλαπλασιασµών του κάθε προκύπτοντος διανύσµατος )(~ mY , µε m < n-1, µε τον
πίνακα A~ , συνεχίζεται έως και n-1 φορές οπότε τελικά προκύπτει
36
)(1)1(111
)2(122
)1(111
)1( ~~.....~~~ nnnn
nnnn
nnn XcXcXcXcY −−−−−
−−− ++++= λλλλ (2.3.11δ)
Εστω τώρα το ακόλουθο αυθαίρετο σέτ πολυωνύµων
nnnn
nnn
nnn
n
nn
nn
n
nn
nn
n
qqqqq
qqqqq
qqqqq
,0,12
,23
,32
,21
2,02,12
2,23
2,32
2,21
2
1,01,12
1,23
1,32
1,21
1
.....)(....................................................................................................
.....)(
..... )(
++++++=
++++++=
++++++=
−−
−−
−
−−
−−
−
−−
−−
−
λλλλλλφ
λλλλλλφ
λλλλλλφ
(2.3.13α)
µε γενικό τύπο
niqqqqq iiin
inn
inn
i ,.....,2,1 , .....)( ,0,12
,23
,32
,21 =++++++= −
−−
−− λλλλλλφ (2.3.13β)
Ορίζεται ως L~ ο γραµµικός συνδυασµός των διανυσµάτων )(~ mY µε τους συντελεστές imq , των
πολυωνύµων της (2.3.13β) για m=n-1,n-2,…..,2,1,0 και λαµβάνοντας υπ’ όψιν ότι 1,1 =− inq
)0(,0
)1(,1
)2(,2
)3(,3
)2(,2
)1( ~~~.....~~~~ YqYqYqYqYqYL iiin
inn
inn ++++++= −
−−
−− (2.3.14)
Ακολούθως, αντικαθίστανται στην (2.3.14) οι εκφράσεις των διανυσµάτων )(~ mY , για
m=n-1,n-2,…..,2,1,0, από τις (2.3.11) και µετά την εκτέλεση των πράξεων προκύπτει ότι
)()1(
11)2(
22)1(
11
)0(,0
)1(,1
)2(,2
)3(,3
)2(,2
)1(
~)(~)(.....~)(~)(
~~~.....~~~~
nnin
nninii
iiin
inn
inn
XcXcXcXc
YqYqYqYqYqYL
λφλφλφλφ ++++=
=++++++=−
−−
−−
−−
−
(2.3.15)
Εάν τώρα τα αυθαίρετα πολυώνυµα )(λφ i επιλεγούν ως
niP
ii ,.....,2,1 , )()( =
−=
λλλλφ (2.3.16α)
όπου P(λ) είναι το χαρακτηριστικό πολυώνυµο της (2.3.2), τότε προφανώς θα ισχύει ότι
ijji ≠= , 0)(λφ (2.3.16β)
Επίσης, θα ισχύει ότι
⇒′−+=′⇒
⇒′−+=′−′+=′⇒
⇒−=−=
)()()()(
)()()()()()()(
)()()()()(
λφλλλφλ
λφλλλφλφλλφλλφλ
λφλλλφλφλλλ
iiiiii
iiiiiii
iiiii
P
P
P
)()( iii P λλφ ′=⇒ (2.3.16γ)
37
Λόγω λοιπόν των (2.3.16β,γ) η (2.3.15) δίνει
⇒=++++++= −−
−−
− )()0(,0
)1(,1
)2(,2
)3(,3
)2(,2
)1( ~)(~~~.....~~~~ iiiiiii
nin
nin
n XcYqYqYqYqYqYL λφ
[ ]ni
YqYqYqYqYqYP
Xc iiin
inn
inn
i
ii
,.....,2,1
~~~.....~~~)(
1~ )0(,0
)1(,1
)2(,2
)3(,3
)2(,2
)1()(
=
++++++′
=⇒ −−
−−
−
λ (2.3.17)
Εποµένως, κάθε ζητούµενο ιδιοδιάνυσµα )(~ iX που αντιστοιχεί στην ιδιοτιµή λi θα προκύπτει από τη
σχέση (2.3.17) πολλαπλασιασµένο µε ένα συντελεστή ci. Ο συντελεστής αυτός θα απαλοιφθεί στη
συνέχεια µετά από κανονικοποίηση των τιµών των συνιστωσών των ιδιοδιανυσµάτων. Τα
διανύσµατα )(~ mY , m=n-1,n-2,…,2,1,0, προκύπτουν από τις σχέσεις (2.3.6) ή ευκολότερα και
ταχύτερα από τις (2.3.9), ενώ η παράγωγος )( iP λ′ προκύπτει µετά από παραγώγιση της σχέσης
(2.3.2) ως προς λ=λi.
Αποµένει ο προσδιορισµός των συντελεστών qm,i µε m=n-2,n-3,…,2,1,0 και i=1,2,…,n. Η σχέση
(2.3.16α) σε συνδυασµό µε τις (2.3.2) και (2.3.13β) δίνει
( )
⇒
⎪⎪⎪⎪
⎩
⎪⎪⎪⎪
⎨
⎧
⎪⎪⎪
⎭
⎪⎪⎪
⎬
⎫
⎪⎪⎪
⎩
⎪⎪⎪
⎨
⎧
=+=
+=
+=
+=
⇒
⎪⎪⎪
⎭
⎪⎪⎪
⎬
⎫
−=
−=
−=
−=
−=
⇒
⇒−−+
+−++−+−+=
==
=++++++−=
=++++++⇒−=
−−−−
−−−
−−
−−−
−−−
−−
−−
−−
−
−−
−−
−−
1 ,
....................................................
.................................
)(
)(.....)()( ..................................................................................................
.....)(
.....)()()(
,11,1,2
2,2,3
2,2,1
1,1,0
,21
,2,32
,2,12
,1,01
,00
,0,1,0
2,2,1
2,2,3
1,2
,0,12
,23
,32
,21
012
22
21
1
01
221
inniniin
niniin
iii
iii
iinn
iniinn
iii
iii
ii
p
ii
p
iii
p
iiin
p
iniinn
p
iinn
iiin
inn
inn
i
nn
nn
nii
qpqqpqq
pqqpqq
qpqqp
qqpqqp
qp
qqq
qqqqq
qqqqq
pppppP
nn
λ
λ
λ
λ
λ
λ
λ
λ
λ
λλλ
λλλλλλλ
λλλλλλλ
λλλλλλφλλλ
32143421
4342144 344 2143421
⎪⎩
⎪⎨
⎧
=−−=
+=
⇒
−
++
10,1,2),.....,3(),2(
,1
1,1,
in
kikiik
qnnk
pqq λ (2.3.18)
Ετσι, η προσδιορισµός των συντελεστών qm,i , m=n-2,n-3,…,2,1,0 θα γίνεται από την ακολουθία
(2.3.18) για κάθε ιδιοτιµή λi, i=1,2,…..,n.
38
Κανονικοποίηση των Ιδιοδιανυσµάτων
Οι τιµές των συνιστωσών κάθε ιδιοδιανύσµατος )(~ ii Xc που προκύπτει από τη σχέση (2.3.17)
είθισται να παρουσιάζονται κανονικοποιηµένες µε δύο τρόπους.
1. ∆ιαιρούνται µε την τιµή του µέτρου του ιδιοδιανύσµατος η οποία ορίζεται ως
( ) ( ) ( ) ( )( ) ( ) ( ) ( )2)(2)(
12)(
22)(
1
2)(2)(1
2)(2
2)(1
)(
.....
.....~
in
in
iii
ini
ini
ii
ii
ii
xxxxc
xcxcxcxcXc
++++=
=++++=
−
− (2.3.19)
Εποµένως
⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢
⎣
⎡
⋅=⋅=
⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢
⎣
⎡
=
)(
)(2
)(1
)()(
)(
)(
)(2
)(1
)(
.......~1~
~1
.....~
ini
ii
ii
ii
iii
ii
n
i
i
i
xc
xcxc
XcXc
Xcx
xx
X (2.3.20)
2. ∆ιαιρούνται µε τη µέγιστη, κατ’ απόλυτη τιµή, συνιστώσα έτσι ώστε η µέγιστη συνιστώσα του
προκύπτοντος κανονικοποιηµένου ιδιοδιανύσµατος να προκύπτει ίση µε +1.
[ ][ ] ⎪⎩
⎪⎨⎧
≤
≥=⇒
⎪⎭
⎪⎬⎫
=
=
−
−
)(min
)(max
)(min
)(min
)(max
)(max)(
max,)()(1
)(2
)(1
)(min
)()(1
)(2
)(1
)(max
,
,
,,.....,,min
,,.....,,maxiii
iii
iabsi
ni
niii
in
in
iii
xxx
xxxx
xxxxx
xxxxx (2.3.21)
Οπότε
⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢
⎣
⎡
⋅=⋅=
⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢
⎣
⎡
=
)(
)(2
)(1
)(max,
)()(
max,)(
)(2
)(1
)(
.......1~1
.....~
ini
ii
ii
iabs
iii
absi
n
i
i
i
xc
xcxc
xXc
xx
xx
X (2.3.22)
Από τις (2.3.20) και (2.3.22) είναι φανερό ότι και στις δύο αυτές περιπτώσεις κανονικοποίησης ο
πολλαπλασιαστικός συντελεστής ci του κάθε ιδιοδιανύσµατος )(~ ii Xc , όπως αυτό προκύπτει από τη
σχέση (2.3.17), τελικώς απαλοίφεται.
Συνθήκη Ορθογωνικότητας των Ιδιοδιανυσµάτων
Στην ειδική περίπτωση όπου ο πίνακας nxnA~ είναι συµµετρικός, τότε για οποιοδήποτε ζεύγος ιδιο-
διανυσµάτων [ ])()( ~,~ mk XX , µε k ≠ m και 1 ≤ (k,m) ≤ n, από τα τα n προκύπτοντα ιδιοδιανύσµατα, θα
ισχύει η σχέση
( ) nmnkmkXX mTk ≤≤≤≤≠=⋅ 1 , 1 , , 0~~ )()( (2.3.23)
39
Η σχέση αυτή αποτελεί τη λεγόµενη ιδιότητα ορθογωνικότητας µεταξύ δύο ιδιοδιανυσµάτων και
ισχύει για όλα τα δυνατά ζεύγη (m,n). Είναι προφανές ότι η σχέση (2.3.23) µπορεί να εφαρµοσθεί και
στη µή κανονικοποιηµένη µορφή των ιδιοδιανυσµάτων όπως αυτά προκύπτουν απ’ ευθείας από τη
σχέση (2.3.17).
Παράδειγµα 2.3.1
Να εφαρµοσθεί η µέθοδος Krylov για να ευρεθούν οι συντελεστές του χαρακτηριστικού
πολυωνύµου καθώς και όλα τα ιδιοδιανύσµατα του παρακάτω πίνακα 44~
xA αναφορικά µε το
θεµελιώδες πρόβληµα ιδιοτιµών που περιγράφεται από τη σχέση (2.3.1).
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
1234212332124321
~44xA
Βάσει της (2.3.4) επιλέγεται το αυθαίρετο διάνυσµα
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
0001
~ )0(Y
Η εφαρµογή των (2.3.9) δίνει
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=⋅=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=⋅=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=⋅=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=⋅=
1992165617042108
242192178208
1234212332124321
~~~ ,
242192178208
20182230
1234212332124321
~~~
20182230
4321
1234212332124321
~~~ ,
4321
0001
1234212332124321
~~~
)3()4()2()3(
)1()2()0()1(
YAYYAY
YAYYAY
Σχηµατίζεται το σύστηµα (2.3.8)
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
1992165617042108
0420242031819202221781130208
0
1
2
3
pppp
40
η επίλυση του οποίου δίνει:
20 , 56 , 40 , 4 0123 −=−=−=−= pppp
Εποµένως, το χαρακτηριστικό πολυώνυµο-εξίσωση της (2.3.2) θα είναι
02056404)( 234 =−−−−= λλλλλP
Η επίλυση ως προς λ της πολυωνυµικής αυτής εξίσωσης (π.χ. µε τη µέθοδο Bairstow) δίνει τις
τέσσερις ρίζες-ιδιοτιµές
414213.3 , 099019.1 , 585786.0 , 099019.9 4321 −=−=−== λλλλ
Στη συνέχεια εφαρµόζεται η σχέση (2.3.18) για τον προσδιορισµό των συντελεστών q. Για i=1,
δηλαδή για την πρώτη ιδιοτιµή λ1, θα είναι
138039.2)56(396078.6099019.9 0 44 4396078.6)40(09902.5099019.9 1 34 3
099019.5)4(1099019.9 22421 3 14 1
11,111,0
21,211,1
31,311,2
1,3
=−+⋅=+=→=−=−=
=−+⋅=+=→=−=−=
=−+⋅=+=→=−=−=
=→=−=−=
pqqnkpqqnkpqqnk
qnk
λλλ
Η παράγωγος ως προς λ του χαρακτηριστικού πολυωνύµου είναι
881984.1235)099019.9(5680124)( 123 ==′⇒−−−=′ λλλλλ PP
Αρα το πρώτο ιδιοδιάνυσµα )1(1
~Xc µπορεί πλέον να υπολογισθεί από την (2.3.17) και προκύπτει ίσο
µε
[ ]
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎪⎪⎭
⎪⎪⎬
⎫
⎪⎪⎩
⎪⎪⎨
⎧
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅+
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅+
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅+
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⋅=
=+++′
=
299029.0245145.0245145.0299029.0
0001
138039.2
4321
396078.6
20182230
099019.5
242192178208
881984.12351
~~~~)(
1~ )0(1,0
)1(1,1
)2(1,2
)3(
1
)1(1 YqYqYqY
PXc
λ
Η ανωτέρω διαδικασία για i=1 επαναλαµβάνεται καθ’ όµοιο τρόπο και για i=2,3,4 οπότε λαµβάνονται
και τα λοιπά ιδιοδιανύσµατα
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−
−=
426777.0176777.0176777.0426777.0
~ ,
200971.0245145.0245145.0200971.0
~ ,
073223.0176777.0176777.0073223.0
~ )4(4
)3(3
)2(2 XcXcXc
41
Η κανονικοποίηση των τεσσάρων ιδιοδιανυσµάτων )(~ ii Xc ως προς το µέτρο τους, βάσει των
σχέσεων (2.3.19) και (2.3.10) δίνει
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−
−=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
653281.0270598.0270598.0653281.0
~ ,
448298.0546835.0546835.0448298.0
~ ,
270598.0653281.0653281.0270598.0
~ ,
546835.0448298.0448298.0546835.0
~ )4()3()2()1( XXXX
ενώ η κανονικοποίηση ως προς την µονάδα, βάσει των (2.3.21) και (2.3.22) δίνει
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−
−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−
−
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
1414214.0414214.0
1~ ,
819804.011
819804.0~ ,
414214.011
414214.0~ ,
1819804.0819804.0
1~ )4()3()2()1( XXXX
Περαιτέρω, καθ’ όσον ο πίνακας 44~
xA είναι συµµετρικός θα ισχύει η συνθήκη ορθογωνικότητας
(2.3.23) για οποιοδήποτε τυχαίο ζεύγος ιδιοδιανυσµάτων. Π.χ., λαµβάνοντας τα )2(~X και )4(~X προκύπτει
( ) [ ] 0
1414214.0414214.0
1
414214.011414214.0~~ )4()2( =
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−
⋅−−=⋅ XXT
Η επαλήθευση των ανωτέρω αριθµητικών αποτελεσµάτων, οι πράξεις και οι απαιτούµενοι έλεγχοι
αφήνονται ως άσκηση στον αναγνώστη.
Υπορουτίνες Προβληµάτων Ιδιοτιµών σε FORTRAN 90/95
Περιγράφεται µία σειρά υπορουτινών γραµµένων σε FORTRAN 90/95 για τη συνολική
αντιµετώπιση του θεµελιώδους προβλήµατος ιδιοτιµών της σχέσης (2.3.1). Ολες οι πραγµατικές
µεταβλητές των παρακάτω αναφερόµενων υπορουτινών είναι διπλής ακρίβειας (8 bytes).
Υπορουτίνα EIGENR Η υπορουτίνα αυτή εκτελεί τα ακόλουθα µε τη σειρά που αναφέρονται:
(α) υπολογίζει µε τη µέθοδο Leverrier τους συντελεστές του χαρακτηριστικού πολυωνύµου. Για το
σκοπό αυτό καλεί την υπορουτίνα LEVERRIER (βλ. παρακάτω),
(β) υπολογίζει µε τη µέθοδο Bairstow όλες τις ρίζες-ιδιοτιµές του χαρακτηριστικού πολυωνύµου. Για
το σκοπό αυτό καλεί την υπορουτίνα BAIRSTOW. Eάν οι ρίζες προκύψουν από την υπορουτίνα
BAIRSTOW µε σειρά |λ1|< |λ2|< .....< |λn|, τότε καλεί εν συνεχεία την υπορουτίνα SORTR
προκειµένου να αναστραφεί η σειρά, και
42
(γ) υπολογίζει όλα τα ιδιοδιανύσµατα µε τη µέθοδο Krylov. Για το σκοπό αυτό καλεί την υπορουτίνα
KRYLOV (βλ. παρακάτω). Η υπορουτίνα EIGENR καθώς και η KRYLOV δεν υπολογίζουν τους
συντελεστές του χαρακτηριστικού πολυωνύµου µε τη µέθοδο Krylov.
Στην υπορουτίνα εισάγονται και επιστρέφουν οι παρακάτω µεταβλητές:
N : Η διάσταση n του πίνακα nxnA~ .
[Α]NxΝ : Ο πίνακας nxnA~ της σχέσης (2.3.1).
[L]N : Πίνακας διάστασης n που επιστρέφει µε τις ιδιοτιµές λ1, λ2, ..., λn.
[Υ0]N : Το αρχικό-αυθαίρετο διάνυσµα )0(~Y της µεθόδου Krylov.
[Χ]NxΝ : Πίνακας διαστάσεων nxn όπου επιστρέφει µε τα ιδιοδιανύσµατα )(~ iX . Κάθε στήλη
του πίνακα είναι και ένα ιδιοδιάνυσµα. Η πρώτη στήλη αντιστοιχεί στο πρώτο
ιδιοδιάνυσµα, η δεύτερη στο δεύτερο, κ.ο.κ.
TOLLX : Οριο ε<< για έλεγχο αποδεκτής λύσης: ( ) ελ <⋅− XIA ~~~
KSOLVEL : Επιστρέφει µε τις τιµές 0 και 1 για θεώρηση όχι πολύ καλής ή άριστης επίλυσης
αντίστοιχα, αναφορικά µε την εύρεση των ιδιοτιµών λ.
KSOLVEΧ : Επιστρέφει µε τις τιµές 0 και 1 για θεώρηση όχι πολύ καλής ή άριστης επίλυσης
αντίστοιχα, αναφορικά µε την εύρεση των ιδιοδιανυσµάτων )(~ iX .
KODLX : Κωδικός απαιτούµενων υπολογισµών, ως εξής:
1= υπολογισµός µόνο ιδιοτιµών
2= υπολογισµός ιδιοτιµών και µή κανονικοποιηµένων ιδιοδιανυσµάτων )(~ ii Xc
3= υπολογισµός ιδιοτιµών και κανονικοποιηµένων ιδιοδιανυσµάτων )(~ iX βάσει του
µέτρου τους.
4= υπολογισµός ιδιοτιµών και κανονικοποιηµένων ιδιοδιανυσµάτων )(~ iX βάσει της
µονάδος.
IPRINTLX : Kωδικός εκτυπώσεων αποτελεσµάτων, ως εξής:
0= καµµία εκτύπωση
1= εκτύπωση µόνο ιδιοτιµών
2= εκτύπωση ιδιοτιµών και µή κανονικοποιηµένων ιδιοδιανυσµάτων )(~ ii Xc
3= εκτύπωση ιδιοτιµών και κανονικοποιηµένων ιδιοδιανυσµάτων )(~ iX βάσει του
µέτρου τους.
4= εκτύπωση ιδιοτιµών και κανονικοποιηµένων ιδιοδιανυσµάτων )(~ iX βάσει της
µονάδος.
43
Οι λοιπές µεταβλητές P, Q, TOLPQRS, TOLDETS, TOLDETR, TOLC, TOLFX, NITMAX,
NCYCMAX, ISORT, IPRINT1, IPRINT2 είναι αυτές της υπορουτίνας BAIRSTOW.
Ακολουθεί η λίστα των εντολών της υπορουτίνας EIGENR.
! ================================================================== ! | SUBROUTINE TO FIND ALL REAL EIGENVALUES & EIGENVECTORS | ! | OF A REAL MATRIX [A]nxn | ! | | ! | 1. Characteristic Polynomial by the Leverrier Method | ! | 2. Eigenvalues (roots) of the Characteristic Polynomial by the | ! | Bairstow Method | ! | 3. Eigenvectors by the Krylov Method | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! N : Matrix [A] dimension, n. ! [A]nxn : Matrix [A]nxn ! [L]n : Eigenvalues ¢1,¢2,.....,¢n. ! [Y0]n : Inital guess of vector y0 of Krylov's Method. ! [X]nxn : Eigenvectors. 1st column is the eigenvector of ¢1, ! 2nd column is the eigenvector of ¢2, etc. ! TOLLX : Tolerance to check if [A-¢I][X]<=œ. Same as TOLFX. ! KSOLVEL : Solution code for Eigenvalues ! (0=Not Very Good Solution, 1=Excellent Solution) ! Same as KSOLVE ! KSOLVEX : Solution code for Eigenvectors ! (0=Not Very Good Solution, 1=Excellent Solution) ! KODLX : Computation code ! (1=only eigenvalues, ! 2=eigenvalues & non-normalized eigenvectors ! 3=eigenvalues & normalized eigenvectors by length ! 4=eigenvalues & normalized eigenvectors by unity) ! IPRINTLX : Print out code ! (0=no print at all, ! 1=only eigenvalues, ! 2=eigenvalues & non-normalized eigenvectors ! 3=eigenvalues & normalized eigenvectors by length ! 4=eigenvalues & normalized eigenvectors by unity) ! ! ............................................................ ! All the following variables are those of the Bairstow Method ! ............................................................ ! ! P : Initial estimation for p. ! Q : Initial estimation for q. ! TOLPQRS : Tolerance œ to check if |ƒp|<= œ & |ƒq|<= œ, or, if ! |R|<= œ & |S|<= œ. ! TOLDETS : Tolerance œ to check if system determinant |a| <= œ. ! TOLDETR : Tolerance œ to check if determinant |p**2-4q| <= œ. ! TOLC : Tolerance œ to check for y+zi if |z|<= œ. ! TOLFX : Tolerance to check if |f(¨)|<= œ. ! NITMAX : Max. permissible no. of iterations within a solytion ! cycle. ! NCYCMAX : Max. permissible no. of solution cycles. ! ISORT : Code for sorting (1=ascending order, 2=descending ! order).
! IPRINT1 : Print code for printing intermidiate results ! (0=No print, -1=partial print, 1=full print). ! IPRINT2 : Print code for printing final results ! (0=No print, 1=print). ! ------------------------------------------------------------------ ! SUBROUTINE EIGENR (N,A,L,Y0,X,KSOLVEL,KSOLVEX,KODLX,IPRINTLX, & & P,Q,TOLPQRS,TOLDETS,TOLDETR,TOLC,TOLFX, & & NITMAX,NCYCMAX,ISORT,IPRINT1,IPRINT2) ! IMPLICIT REAL*8 (A-H,O-Z) REAL*8 A(N,N),L(N),X(N,N),Y0(N),INDX(N),XIM(N),FL(N),FXIM(N) REAL*8, ALLOCATABLE :: CPOL(:) ! ! ------------------------------------------------------------------ ! 1. COMPUTE THE CHARACTERISTIC POLYNOMIAL COEFFICIENTS BY THE ! LEVERRIER METHOD ! ------------------------------------------------------------------ ! ALLOCATE (CPOL(0:N)) ! CALL LEVERRIER (N,A,CPOL) ! ! ------------------------------------------------------------------ ! 2. COMPUTE EIGENVALUES ¢ AS ROOTS OF THE CHARACTERISTIC POLYNOMIAL ! BY THE BAIRSTOW METHOD. PRINT EIGENVALUES, IF REQUIRED. ! ------------------------------------------------------------------ ! CALL BAIRSTOW (N,CPOL,P,Q,TOLPQRS,TOLDETS,TOLDETR,TOLC, & & TOLFX,NITMAX,NCYCMAX,ISORT,IPRINT1,IPRINT2, & & NREAL,NCOMPL,L,XIM,FL,FXIM,KSOLVE) ! IF (DABS(L(1))<=DABS(L(N))) CALL SORTR (L,FL,N,1) ! KSOLVEL = KSOLVE ! IF (KSOLVEL==0) WRITE (*,"(/ & & '***** Not very good Eigenvalues *****'/)") ! IF (IPRINTLX>0) CALL EIGOUT (N,L,X,1) ! IF (KODLX==1) RETURN ! ! ------------------------------------------------------------------ ! 3. COMPUTE EIGENVECTORS BY THE KRYLOV METHOD ! ------------------------------------------------------------------ ! TOLLX = TOLFX ! CALL KRYLOV (N,A,L,CPOL,Y0,X,TOLLX,KSOLVEX,KODLX,IPRINTLX) ! DEALLOCATE (CPOL) ! RETURN END !
Υπορουτίνα LEVERRIER Η υπορουτίνα αυτή καλείται από την υπορουτίνα EIGENR και υπολογίζει τους συντελεστές του
χαρακτηριστικού πολυωνύµου βάσει της µεθόδου Leverrier. Οσον αφορά την επίλυση του σχετικού
γραµµικού συστήµατος της µεθόδου, καλεί τις υπορουτίνες LUDCMP και LUBKSB για την επίλυσή
του.
Στην υπορουτίνα εισάγονται και επιστρέφουν οι παρακάτω µεταβλητές:
N : Η διάσταση n του πίνακα nxnA~ .
[Α]NxΝ : Ο πίνακας nxnA~ της σχέσης (2.3.1).
[CPOL]0:N : Πίνακας διάστασης n που επιστρέφει µε τις τιµές p0, p1, p2, …, pn των συντελεστών
του χαρακτηριστικού πολυωνύµου. Ακολουθεί η λίστα των εντολών της υπορουτίνας LEVERRIER.
44
! ================================================================== ! | SUBROUTINE TO COMPUTE CHARACTERISTIC POLYNOMIAL COEFFICIENTS | ! | OF A REAL MATRIX [A]nxn | ! | | ! | Leverrier Method | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! N : Matrix [A] dimension, n. ! [A]nxn : Matrix [A]nxn ! [CPOL]0:n : Polynomial coefficients c0,c1,c2,...,cn-1,cn. ! SUBROUTINE LEVERRIER (N,A,CPOL) ! IMPLICIT REAL*8 (A-H,O-Z) REAL*8 A(N,N),INDX(N),CPOL(0:N) REAL*8, ALLOCATABLE :: S(:),APREV(:,:),ANEW(:,:),S2(:,:) ! ! ------------------------------------------------------------------ ! COMPUTE k=1,2,...,n-1 POWERS OF [A] & STORE Tr[A]**k ! ------------------------------------------------------------------ ! ALLOCATE (S(N),ANEW(N,N),APREV(N,N)) ! DO I=1,N DO J=1,N ANEW(I,J) = A(I,J) END DO END DO ! DO M=1,N ! IF (M==1) GO TO 10 DO I=1,N DO J=1,N ANEW(I,J) = 0.00D+00 DO K=1,N ANEW(I,J) = ANEW(I,J) + APREV(I,K)*A(K,J) END DO END DO END DO ! 10 S(M) = 0.00D+00 DO I=1,N S(M) = S(M) + ANEW(I,I) END DO !
DO I=1,N DO J=1,N APREV(I,J) = ANEW(I,J) END DO END DO ! END DO ! ! ------------------------------------------------------------------ ! FORM LEVERRIER'S SYSTEM ! ------------------------------------------------------------------ ! DEALLOCATE (ANEW,APREV) ALLOCATE (S2(N,N)) ! DO I=1,N DO J=1,N S2(I,J) = 0.00D+00 IF (I==J) S2(I,J) = I END DO END DO ! DO J=1,N-1 DO I=J+1,N S2(I,J) = S(I-J) END DO END DO ! DO I=1,N S(I) = -S(I) END DO ! ! ------------------------------------------------------------------ ! SOLVE LEVERRIER'S SYSTEM ! ------------------------------------------------------------------ ! NP = N ! CALL LUDCMP (S2,N,NP,INDX,DET) CALL LUBKSB (S2,N,NP,INDX,S) ! DEALLOCATE (S2) ! DO I=N,0,-1 IF (I==N) CPOL(I) = 1.00D+00 IF (I<N) CPOL(I) = S(N-I) END DO ! DEALLOCATE (S) ! RETURN END !
Υπορουτίνες KRYLOV και EIGOUT
Η υπορουτίνα KRYLOV καλείται από την υπορουτίνα EIGENR και υπολογίζει το σύνολο των
ιδιοδιανυσµάτων ενός πίνακα nxnA~ βάσει της µεθόδου Krylov. Σε ότι αφορά το θέµα εκτυπώσεων
αποτελεσµάτων, καλεί την υπορουτίνα EIGOUT στην οποία µεταβιβάζει τις µεταβλητές-πίνακες L
και Χ για εκτύπωση.
Στην υπορουτίνα εισάγονται και επιστρέφουν οι µεταβλητές: N, A, L, CPOL, Y0, X, TOLLX,
KSOLVEX, KODLX, IPRINTLX οι οποίες είναι αυτές των υπορουτινών EIGENR και
LEVERRIER.
Ακολουθούν οι λίστες των εντολών των υπορουτινών KRYLOV και EIGOUT.
45
! ================================================================== ! | SUBROUTINE TO FIND ALL REAL EIGENVECTORS OF A REAL MATRIX | ! | [A]nxn | ! | | ! | Eigenvectors by the Krylov Method | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! N : Matrix [A] dimension, n. ! [A]nxn : Matrix [A]nxn ! [L]n : Eigenvalues λ1,λ2,.....,λn. ! [CPOL]n : Characteristic Polynomial coefficients ! p0,p1,p2,...,pn-1,pn. ! [Y0]n : Inital guess of vector y0 of Krylov's Method. ! [X]nxn : Eigenvectors. 1st column is the eigenvector of ¢1, ! 2nd column is the eigenvector of λ2, etc. ! TOLLX : Tolerance to check if [A-λI][X]<=ε. ! KSOLVEX : Solution code (0=Not Very Good Solution, 1=Excellent ! Solution) ! KODLX : Computation code ! (2=non-normalized eigenvectors ! 3=normalized eigenvectors by length ! 4=normalized eigenvectors by unity) ! IPRINTLX : Print out code ! (0=no print at all, ! 1=only eigenvalues, ! 2=eigenvalues & non-normalized eigenvectors ! 3=eigenvalues & normalized eigenvectors by length ! 4=eigenvalues & normalized eigenvectors by unity) ! ------------------------------------------------------------------ ! SUBROUTINE KRYLOV (N,A,L,CPOL,Y0,X,TOLLX,KSOLVEX,KODLX,IPRINTLX) ! IMPLICIT REAL*8 (A-H,O-Z) REAL*8 A(N,N),L(N),X(N,N),Y0(N),CPOL(0:N),LENGTH REAL*8, ALLOCATABLE :: Y(:,:),APREV(:,:),ANEW(:,:),QPOL(:) CHARACTER*50, ALLOCATABLE :: COMM(:) CHARACTER*50 TEMP ! ! ------------------------------------------------------------------ ! COMPUTE k=1,2,...,n-1 POWERS OF [A]**k & VECTORS Υ(k) OF KRYLOV'S ! METHOD ! ------------------------------------------------------------------ ! ALLOCATE (ANEW(N,N),APREV(N,N),Y(N,0:N-1)) ! DO I=1,N DO J=1,N ANEW(I,J) = A(I,J) END DO Y(I,0) = Y0(I) END DO ! DO M=1,N-1 ! IF (M==1) GO TO 100 DO I=1,N DO J=1,N ANEW(I,J) = 0.00D+00 DO K=1,N ANEW(I,J) = ANEW(I,J) + APREV(I,K)*A(K,J) END DO END DO END DO ! 100 DO I=1,N Y(I,M) = 0.00D+00 DO J=1,N Y(I,M) = Y(I,M) + ANEW(I,J)*Y0(J) END DO END DO ! DO I=1,N DO J=1,N APREV(I,J) = ANEW(I,J) END DO END DO ! END DO ! DEALLOCATE (ANEW,APREV) ! ! ------------------------------------------------------------------ ! START COMPUTING EIGENVECTORS X(i) ! ------------------------------------------------------------------ ! ALLOCATE (QPOL(0:N-1)) ! DO I=1,N ! ! ------------------------------------------------------------------ ! 1. COMPUTE Φi(λi) = P'(λi) ! ------------------------------------------------------------------ ! FI = 0.00D+00 DO J=N,2,-1 FI = FI + J*CPOL(J)*(L(I)**(J-1)) END DO FI = FI + CPOL(1) ! ! ------------------------------------------------------------------ ! 2. COMPUTE COEFFICIENTS qi OF POLYNOMIAL Φi(λ) ! ------------------------------------------------------------------ ! QPOL(N-1) = 1.00D+00 DO J=N-2,0,-1 QPOL(J) = L(I)*QPOL(J+1) + CPOL(J+1) END DO
! ! ------------------------------------------------------------------ ! 3. COMPUTE EIGENVECTORS ciΧ(i) ! ------------------------------------------------------------------ ! DO J=1,N X(J,I) = 0.00D+00 DO K=N-1,0,-1 X(J,I) = X(J,I) + QPOL(K)*Y(J,K) END DO X(J,I) = X(J,I)/FI IF (DABS(X(J,I))<=1.00D-10) X(J,I) = 0.00D+00 END DO ! ! ------------------------------------------------------------------ ! PROCEED TO COMPUTATION OF THE NEXT EIGENVECTOR X(i) ! ------------------------------------------------------------------ ! END DO ! DEALLOCATE (QPOL,Y) ! ! ------------------------------------------------------------------ ! NORMALIZE EIGENVECTORS ! ------------------------------------------------------------------ ! GO TO (10,20,30), KODLX-1 ! 20 DO J=1,N LENGTH = 0.00D+00 DO I=1,N LENGTH = LENGTH + (X(I,J)**2) END DO LENGTH = DSQRT(LENGTH) DO I=1,N IF (LENGTH/=0.00) X(I,J) = X(I,J)/LENGTH END DO END DO GO TO 10 ! 30 DO J=1,N AMAX = -1.00D+99 DO I=1,N AMAX = DMAX1(AMAX,DABS(X(I,J))) IF (AMAX==DABS(X(I,J))) INDEX = I END DO AMAX = X(INDEX,J) DO I=1,N IF (AMAX/=0.00) X(I,J) = X(I,J)/AMAX END DO END DO ! ! ------------------------------------------------------------------ ! PRINT EIGENVECTORS ci[Xi] OR [Xi] ! ------------------------------------------------------------------ ! 10 CALL EIGOUT (N,L,X,IPRINTLX) ! ! ------------------------------------------------------------------ ! CHECK IF [Xi] /= 0.00D+00 ! ------------------------------------------------------------------ ! WRITE (*,*) ! IVEC = 1 DO J=1,N SUM = 0.00D+00 DO I=1,N SUM = SUM + DABS(X(I,J)) END DO IF (DABS(SUM)<=1.00D-08) IVEC = 0 IF (DABS(SUM)<=1.00D-08) & & WRITE (*,"('***** WARNING: Eigenvector No.: ',I10, & & ' has almost zero components')") J END DO ! IF (IVEC==0) & & WRITE (*,"(/'***** Try another initial vector y(0)')") ! ! ------------------------------------------------------------------ ! CHECK SOLUTION [A-λiI][Xi] <= ε ! ------------------------------------------------------------------ ! WRITE (*,*) ! IERR = 0 DO K=1,N KSOLVEX = 1 DO I=1,N SUM = 0.00D+00 DO J=1,N SUM = SUM + A(I,J)*X(J,K) END DO DIF = SUM - L(K)*X(I,K) IF (DABS(DIF)>TOLLX) KSOLVEX = 0 END DO IF (KSOLVEX==0) IERR = IERR + 1 IF (KSOLVEX==0) & & WRITE (*,"('***** ERROR: Wrong Eigenvector No.: ',I10)") K END DO ! KSOLVEX = 1 IF (IERR/=0) KSOLVEX = 0 ! IF (KSOLVEX==0) WRITE (*,"(/ & & '***** Not very good Eigenvectors *****'/)") ! RETURN END !
46
! ================================================================== ! | SUBROUTINE TO PRINT ALL REAL EIGENVALUES & EIGENVECTORS OF | ! | A REAL MATRIX [A]nxn | ! | | ! | Called by Subroutines: EIGENR & KRYLOV | ! | | ! | Developed by M. G. Sfakianakis | ! | University of Patras, 2001 | ! | | ! ================================================================== ! ! ------------------------------------------------------------------ ! Variable Description ! -------------------- ! ! N : Matrix [A] dimension, n. ! [A]nxn : Matrix [A]nxn ! [L]n : Eigenvalues λ1,λ2,.....,λn. ! [X]nxn : Eigenvectors. 1st column is the eigenvector of λ1, ! 2nd column is the eigenvector of λ2, etc. ! ------------------------------------------------------------------ ! SUBROUTINE EIGOUT (N,L,X,IPRINTLX) ! IMPLICIT REAL*8 (A-H,O-Z) REAL*8 L(N),X(N,N) CHARACTER*50, ALLOCATABLE :: COMM(:) CHARACTER*50 TEMP ! IF (IPRINTLX==0) RETURN IF (IPRINTLX>1) GO TO 10 ! ! ------------------------------------------------------------------ ! PRINT OUT EIGENVALUES ! ------------------------------------------------------------------ ! WRITE (*,"(/76(1H=)/'EIGENVALUES'/76(1H=) & & //'EIGENVALUE No. λ '/ & & '-------------- ------------')") DO I=1,N WRITE (*,'(I8,9X,E12.6)') I,L(I) END DO ! IF (IPRINTLX==1) RETURN ! ! ------------------------------------------------------------------ ! PRINT OUT EIGENVECTORS ! ------------------------------------------------------------------ ! 10 ALLOCATE (COMM(N)) ! IF (IPRINTLX==2) & WRITE (*,"(/76(1H=)/'NON-NORMALIZED EIGENVECTORS c[X]'/ & & 76(1H=))") IF (IPRINTLX==3) & WRITE (*,"(/76(1H=)/'NORMALIZED EIGENVECTORS [X] BY LENGTH'/ & & 76(1H=))") IF (IPRINTLX==4) & WRITE (*,"(/76(1H=)/'NORMALIZED EIGENVECTORS [X] BY UNITY'/ & & 76(1H=))") !
N5 = 1.00*N/5.00 NREST = N - 5*N5 K5 = 0 ! DO I=1,N5 ! K5 = K5 + 5 ! DO J=K5-5+1,K5 IF (IPRINTLX==2) & & WRITE (TEMP,'(A1,I10,A2,I10,A1)') 'c',J,'[X',J,']' IF (IPRINTLX>=3) & & WRITE (TEMP,'(A2,I10,A1)') '[X',J,']' NCHAR = LEN_TRIM(TEMP) NCHR = 0 DO K=1,NCHAR IF (TEMP(K:K)/=' ') NCHR = NCHR + 1 IF (TEMP(K:K)/=' ') COMM(J)(NCHR:NCHR) = TEMP(K:K) END DO COMM(J)(NCHR+1:NCHAR) = ' ' END DO ! WRITE (*,"(/' n',3X,5(A12,2X))") (COMM(J),J=K5-5+1,K5) WRITE (*,"('-----',3X,5(A12,2X))") ('------------',J=K5-5+1,K5) ! DO J=1,N WRITE (*,'(I5,3X,5(E12.6,2X))') J,(X(J,K),K=K5-5+1,K5) END DO ! END DO ! DO J=5*N5+1,N IF (IPRINTLX==2) & & WRITE (TEMP,'(A1,I10,A2,I10,A1)') 'c',J,'[X',J,']' IF (IPRINTLX>=3) & & WRITE (TEMP,'(A2,I10,A1)') '[X',J,']' NCHAR = LEN_TRIM(TEMP) NCHR = 0 DO K=1,NCHAR IF (TEMP(K:K)/=' ') NCHR = NCHR + 1 IF (TEMP(K:K)/=' ') COMM(J)(NCHR:NCHR) = TEMP(K:K) END DO COMM(J)(NCHR+1:NCHAR) = ' ' END DO ! WRITE (*,"(/' n',3X,5(A12,2X))") (COMM(J),J=5*N5+1,N) WRITE (*,"('-----',3X,5(A12,2X))") ('------------',J=5*N5+1,N) ! DO J=1,N WRITE (*,'(I5,3X,5(E12.6,2X))') J,(X(J,K),K=5*N5+1,N) END DO ! DEALLOCATE (COMM) ! RETURN END !
47
3. Ολοκλήρωση κατά Gauss
Πίνακας Σηµείων Ολοκλήρωσης & Αντιστοίχων Βαρών
+x-x +1 -1
f(x)
+xi -xi
Αρ. Σηµείων Ολοκλήρωσης
n
∆ιαστήµατα xi
Βάρη wi
xi2 ±0.577350269189626 1.000000000000000
3 0.000000000000000 ±0.774596669241483
0.888888888888889 0.555555555555556
4 ±0.339981043584856 ±0.861136311594053
0.652145154862546 0.347854845137454
5 0.000000000000000
±0.538469310105683 ±0.906179845938664
0.568888888888889 0.478628670499366 0.236926885056189
6 ±0.238619186083197 ±0.661209386466265 ±0.932469514203152
0.467913934572691 0.360761573048139 0.171324492379170
7
0.000000000000000 ±0.405845151377397 ±0.741531185599394 ±0.949107912342759
0.417959183673469 0.381830050505119 0.279705391489277 0.129484966168870
8
±0.183434642495650 ±0.525532409916329 ±0.796666477413627 ±0.960289856497536
0.362683788378362 0.313706645877887 0.222381034453374 0.101228536290376
9
0.000000000000000 ±0.324253423403809 ±0.613371432700590 ±0.836031107326636 ±0.968160239507626
0.330239355001260 0.312347077040003 0.260610696402935 0.180648160694857 0.081274388361574
10
±0.148874338981631 ±0.433395394129247 ±0.679409568299024 ±0.865063366688985 ±0.973906528517172
0.295524224714753 0.269266719309996 0.219086362515982 0.149451349150581 0.066671344308688
∫ ∑+
−
=
=
≅=1
11
)()(ni
iii xfwdxxfI
48
Παράδειγµα:
∫ ⎟⎟⎠
⎞⎜⎜⎝
⎛−=
−10
01 dte
cgmI
tmc
για g = 9.8 , c = 12.5 , m = 68.1
Ακριβής Τιµή 289.4351n = 2 290.0145n = 3 289.4393n = 4 289.4352n = 5 289.4351n = 6 289.4351