Top Banner
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ - ΤΟΜΕΑΣ ΚΑΤΑΣΚΕΥΩΝ ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ Μανόλης Γ. Σφακιανάκης Επίκουρος Καθηγητής Σημειώσεις ΠΑΤΡΑ 2007
49

SHMEIWSEIS

Oct 24, 2014

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SHMEIWSEIS

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ - ΤΟΜΕΑΣ ΚΑΤΑΣΚΕΥΩΝ

ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ Μανόλης Γ. Σφακιανάκης Επίκουρος Καθηγητής

Σημειώσεις

ΠΑΤΡΑ 2007

Page 2: SHMEIWSEIS

1

ΑΝΤΙ ΠΡΟΛΟΓΟΥ

Οι σημειώσεις που περιέχονται στο τεύχος αυτό αποτελούν συνέχεια της ύλης του 1ου και 2ου

Κεφαλαίου του βιβλίου Αριθμητικές Μέθοδοι του Καθηγητή του Γενικού Τμήματος του Παν/μίου

Πατρών, κ. Β. Β. Μάρκελλου.

Περιγράφονται αναλυτικά τα ακόλουθα:

η μέθοδος Bairstow, για την εύρεση όλων των ριζών (πραγματικών και μιγαδικών)

κανονικών πολυωνύμων n-στού βαθμού,

οι μέθοδοι Crout και Cholesky, για την επίλυση συστήματος γραμμικών εξισώσεων, και

η μέθοδος Krylov, για την εύρεση των συντελεστών του χαρακτηριστικού πολυωνύμου

καθώς καί του συνόλου των ιδιοδιανυσμάτων ενός τετραγωνικού πίνακα αναφορικά με το

θεμελιώδες πρόβλημα ιδιοτιμών.

Παρατίθεται πίνακας σημείων ολοκλήρωσης & αντίστοιχων βαρών για ολοκλήρωση κατά

Gauss.

Ολα τα παραπάνω συνοδεύονται από αντίστοιχες υπορουτίνες σε FORTRAN 90/95.

Μανόλης Γ. Σφακιανάκης

Επίκουρος Καθηγητής

Πάτρα 2007

Page 3: SHMEIWSEIS

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) παρέχει, επί το γενικότερον, τη δυνατότητα απόκτησης

όλων των ριζών, πραγματικών και μιγαδικών.

Page 4: SHMEIWSEIS

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) δίνει

Page 5: SHMEIWSEIS

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)

Page 6: SHMEIWSEIS

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)

Page 7: SHMEIWSEIS

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:

nnnnn

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)

Page 8: SHMEIWSEIS

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) για κάθε μία ξεχωριστά.

Page 9: SHMEIWSEIS

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) η οποία ακολουθεί παρακάτω.

Page 10: SHMEIWSEIS

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 .

Page 11: SHMEIWSEIS

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.

Για την δεύτερη διαίρεση που ακολουθεί, τα αποτελέσματα κάθε επανάληψης διαμορφώνονται ως

ακολούθως

Page 12: SHMEIWSEIS

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.

Page 13: SHMEIWSEIS

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(ρ) πιθανόν να προκύψει μιγαδικός

Page 14: SHMEIWSEIS

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 !

Το σχετικό αρχείο δεδομένων είναι

DATA5 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

Page 15: SHMEIWSEIS

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

Page 16: SHMEIWSEIS

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(ρ) = ', &

Page 17: SHMEIWSEIS

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 !

Page 18: SHMEIWSEIS

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) με προς τα πίσω αντικατάσταση βάσει των τύπων

Page 19: SHMEIWSEIS

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.

Page 20: SHMEIWSEIS

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

Page 21: SHMEIWSEIS

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)

Page 22: SHMEIWSEIS

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

Page 23: SHMEIWSEIS

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

Ετσι, η τελική λύση του συστήματος είναι

Page 24: SHMEIWSEIS

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)

Page 25: SHMEIWSEIS

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 του πίνακα [Α].

Page 26: SHMEIWSEIS

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

Page 27: SHMEIWSEIS

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 !

Page 28: SHMEIWSEIS

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) οπότε

προκύπτει το ακόλουθο σύστημα προσδιορισμού των όρων αυτών

Page 29: SHMEIWSEIS

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)

Page 30: SHMEIWSEIS

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 το σύστημα

⎥⎥⎥⎥

⎢⎢⎢⎢

=

⎥⎥⎥⎥

⎢⎢⎢⎢

⎥⎥⎥⎥

⎢⎢⎢⎢

145290634030

246126434126109363

43362924321

4

3

2

1

xxxx

Κατ’ αρχήν εφαρμόζονται οι σχέσεις (2.2.5) για την εύρεση του πίνακα [L]4x4.

(2.2.5β) 111 111111 =⇒==⇒=→ lalk

Page 31: SHMEIWSEIS

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

Page 32: SHMEIWSEIS

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

Page 33: SHMEIWSEIS

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

145290634030

0101080902001040021800964001811600029132000111

200011600029140000250180000547940002132000111800005479160000186941

145290634030

][

4

3

2

1

144

4

3

2

1

xxxx

A

xxxx

x

Page 34: SHMEIWSEIS

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 ως

Page 35: SHMEIWSEIS

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)

Page 36: SHMEIWSEIS

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 φορές οπότε τελικά προκύπτει

Page 37: SHMEIWSEIS

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γ)

Page 38: SHMEIWSEIS

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.

Page 39: SHMEIWSEIS

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)

Page 40: SHMEIWSEIS

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

Page 41: SHMEIWSEIS

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

Page 42: SHMEIWSEIS

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

προκειμένου να αναστραφεί η σειρά, και

Page 43: SHMEIWSEIS

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 βάσει της

μονάδος.

Page 44: SHMEIWSEIS

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.

Page 45: SHMEIWSEIS

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.

Page 46: SHMEIWSEIS

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 !

Page 47: SHMEIWSEIS

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 !

Page 48: SHMEIWSEIS

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

Page 49: SHMEIWSEIS

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