Εργαστήρια Αριθμητικής Ανάλυσης Ι 9 ο Εργαστήριο Απαλοιφή Gauss με μερική οδήγηση - Παρεμβολη 2018
Απαλοιφή Gauss Με Μερική Οδήγηση Για την εύρεση του οδηγού στοιχείου στο k ο βήμα, αναζητούμε το μέγιστο κατά απόλυτη τιμή στοιχείο στις γραμμές k εώς n της k στήλης του πίνακα. Ή με όρους Matlab ψάχνουμε το max(abs(a(k:n,k)). Σε αυτό το σημείο να σημειώσουμε ότι πρακτικά το ποια είναι αυτή η τιμή δεν μας ενδιαφέρει. Αυτό που χρειαζόμαστε είναι η θέση στην οποία βρίσκεται. Γιατί το επόμενο μας βήμα είναι να κάνουμε εναλλαγή της γραμμής k με την γραμμή που βρήκαμε αυτή την τιμή και να προχωρήσουμε κανονικά στην συνέχεια στις ίδιες ακριβώς κινήσεις που θα κάναμε στην απλή απαλοιφή Gauss χωρίς οδήγηση. Η συνάρτηση max στο Matlab όπως έχουμε ήδη δει σε προηγούμενο εργαστήριο έχει την δυνατότητα εκτός από το να μας επιστρέφει τη μέγιστη τιμή ενός διανύσματος, αλλά μας δίνει και την θέση η μέγιστη τιμή εμφανίζεται για πρώτη φορά στο διάνυσμα. Αν θέλουμε να πάρουμε μόνο την θέση πρέπει να καλέσουμε την max με τον ακόλουθο τρόπο. [~,pos]=max(v) Έτσι στην μεταβλητή pos θα αποθηκευτεί η θέση που εμφανίζεται η μέγιστη τιμή του διανύσματος v, χωρίς να κρατήσουμε σε κάποια μεταβλητή ποια είναι αυτή η τιμή. Αν μας ενδιαφέρουν και οι 2 τιμές απλά καλούμε την max με τον κλασσικό τρόπο [M,pos]=max(v). Όπως λοιπόν είναι προφανές, στη περίπτωσή μας για να βρούμε την γραμμή που εμφανίζεται το οδηγό στοιχείο, στο k βήμα της μεθόδου μας. Θα πρέπει σε κατάλληλο σημείο του κώδικά μας να έχουμε την ακόλουθη γραμμή. [~,pos]=max(abs(a(k:n,k)); Αυτό που πρέπει όμως να έχουμε στο μυαλό μας είναι ότι το pos δεν ανταποκρίνεται στην πραγματική θέση του οδηγού στοιχείου στον πίνακα Α, αλλά στην θέση του στο διάνυσμα Α(k:n,k) το οποίο δεν έχει n στοιχεία. Επομένως όταν θα πρέπει να προχωρήσουμε στην εναλλαγή των αντίστοιχων γραμμών στον πίνακα Α δεν πρέπει να γράψουμε : A([k,pos],:) = A([pos,k],:); αλλά A([k, row],:) = A([row, k],:); Θα πρέπει όμως να έχουμε βρει και γράψει στον κώδικά μας τον τρόπο που εξαρτάται το row από το pos.
Επίλυση του Αx=b Με Μερική Οδήγηση Όταν κάνουμε απαλοιφή Gauss με μερική οδήγηση, δεν μας αρκεί να βρούμε μόνο τους πίνακες L και U αλλά χρειαζόμαστε και τον πίνακα P των μεταθέσεων που κάναμε, έτσι ώστε να πάρουμε την ισότητα: PP AA = LL UU Επομένως καταλήγουμε στο να λύσουμε το ισοδύναμο σύστημα: AA xx = bb PP AA xx = PP bb LL UU xx = PP bb Παρεμβολή Lagrange Δεδομένων k+1 σημείων : (xx 0, yy 0 ),, xx jj, yy jj,, (xx kk, yy kk ) όπου xx jj xx ii ii jj με ii, jj {0,, kk} Το πολυώνυμο παρεμβολής της μορφής Lagrange παίρνει στην θέση x τη τιμή: Παράδειγμα kk LL(xx) = yy jj xx xx mm xx jj xx 0 mm kk mm jj=0 mm jj Έστω ότι θέλουμε να παρεμβάλουμε την ff(xx) = xx 3 και έχουμε τα σημεία (1,1), (2,8) και (3,27) τότε το πολυώνυμο παρεμβολής είναι το : LL(xx) = 1 xx 2 1 2 xx 3 1 3 + 8 xx 1 2 1 xx 3 xx 1 + 27 2 3 3 1 xx 2 3 2 = 6xx2 11xx + 6 x=linspace(1,3); f=@(x) x.^3; L=@(x) 6*x.^2-11*x+6; plot(x,f(x),x,l(x),'r--'), legend('x^3','lagrange Interpolation')
Κυβικές Splines Στο Matlab υπάρχει έτοιμη συνάρτηση για τον υπολογισμό των τιμών κυβικών splines για δεδομένα σημεία παρεμβολής. H συνάρτηση είναι η spline και έχει 2 τρόπους σύνταξης. Εμείς στα πλαίσια του εργαστηρίου θα δούμε τον έναν από αυτούς. Παράδειγμα x = [0 1 2.5 3.6 5 7 8.1 10]; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy) Η συνάρτηση υπολογίζει τα κυβικά πολυώνυμα ανάμεσα στα διαστήματα των σημείων παρεμβολής. Παρατηρήσεις για την 2 η Εργασία Ζητάμε να μετατρέψετε το script file gauss.m που θα βρείτε στην eclass σε function που θα επιστρέφει την λύση x του συστήματος Ax=b με εισόδους τον πίνακα Α και το διάνυσμα b. Ελέγχουμε τι μπορούμε να κάνουμε έτσι ώστε να πάρουμε τις απαραίτητες πληροφορίες που χρειαζόμαστε ώστε να υπολογίσουμε την διακρίνουσα. Στο αρχείο κειμένου εξηγούμε τι κάναμε και που βασιστήκαμε για να απαντήσουμε στο ερώτημα αυτό.
Εισάγουμε με «έξυπνο» τρόπο τα C και d και καλούμε την συνάρτηση που φτιάξαμε. Κατασκευάζουμε μια νέα συνάρτηση που βασίζεται σε αυτή που χρησιμοποιήσαμε ήδη, αλλά φροντίζουμε να εκμεταλλευτούμε την ειδική μορφή του πίνακα C (τριδιαγώνιος) ώστε να πετύχουμε την επίλυση του συστήματος με λιγότερα βήματα. Εξηγούμε τι κάναμε και για πιο λόγο. Και πόσο πιο γρήγορη έγινε η μέθοδος μας. Δημιουργούμε function για την απαλοιφή με την μερική οδήγηση. Στην Άσκηση 3 που χρειάζεται παρεμβολή κατασκευάζουμε συνάρτηση που θα υπολογίζει τις τιμές του πολυωνύμου Lagrange για τιμές του χ. Και στην συνέχεια script που περιέχει το κομμάτι κώδικα που δίνεται στην εκφώνηση και καλεί αυτή την συνάρτηση και την συνάρτηση spline.στο script βάζουμε και εντολές έτσι ώστε να σχεδιάσουμε τις παραστάσεις που μας ζητάνε. Γράφουμε τα συμπεράσματα μας στο αρχείο κειμένου.