ΤΙΤΛΟΣ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ : ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΣΕΡΡΩΝ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΙΤΛΟΣ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ : Χρήση του προγράμματος EXCEL για την αριθμητική επίλυση προβλημάτων Σπουδάστρια : Παρασκευοπούλου Ιωάννα Επιβλέπων καθηγητής : Αρπατζάνης Νικόλαος
ΕΙΣΑΓΩΓΙΚΑ Περιγραφή του Solver (περιβάλλον, πλεονεκτήματα, μειονεκτήματα) Εισαγωγή του Solver και του Solver.xla Επίλυση αριθμητικών μεθόδων παραγώγισης (προς τα μπρος διαφορές, προς τα πίσω διαφορές, τριών σημείων, πέντε σημείων) Επίλυση αριθμητικών μεθόδων ολοκλήρωσης (τραπεζίου, simpson) Επίλυση μη γραμμικών μεθόδων (διχοτόμησης, newton-raphson, τέμνουσας) Εφαρμογή του Solver στο παράδειγμα ανάλυσης θορύβου (noise analysis)
ΣΚΟΠΟΣ Σκοπός της πτυχιακής εργασίας είναι: Η χρήση του πρόσθετου (Add-In) Solver του Excel, για την κατασκευή μοντέλου αριθμητικής επίλυσης προβλημάτων Ανάπτυξη προγραμμάτων προσαρμογής θεωρητικών μοντέλων σε πειραματικά αποτελέσματα και η παραμετροποίηση τους με τη μέθοδο ελαχιστοποίησης του αθροίσματος των τετραγώνων
ΕΡΓΑΛΕΙΑ ΥΛΟΠΟΙΗΣΗΣ Microsoft Excel 2003 Visual Basic (VBA)
Αριθμητικές μέθοδοι Διακριτοποίηση Αριθμητική ανάλυση Θεωρητικό μέρος : κατασκευή αριθμητικών μεθόδων μελέτη ακρίβειας και ευστάθειας – ανάλυση σφαλμάτων Πρακτικό μέρος : υλοποίηση αλγορίθμου με οικονομικό τρόπο σε ταχύτητα και μνήμη
SOLVER-ΕΠΙΛΥΣΗ Ο Solver (Επίλυση) είναι ένα χρήσιμο εργαλείο του Excel το οποίο μας βοηθάει στην κατασκευή μοντέλων αριθμητικής επίλυσης προβλημάτων για την εύρεση την καλύτερης λύσης. Με τον Solver επιλύουμε εξισώσεις, αλλά και προβλήματα βελτιστοποίησης.
Πλεονεκτήματα και μειονεκτήματα του Solver Συνδυάζει λειτουργίες γραφικού περιβάλλοντος για το χρήστη (GUI) Μετά από κάθε σημαντική επανάληψη επιδεικνύει την τρέχουσα «δοκιμαστική λύση» Εισαγωγή περιορισμών Μειονέκτημα : Μετά από κάθε αλλαγή πρέπει να τον ξανατρέξεις για να βρεις τη νέα λύση
Εργαλεία(Tools)->Πρόσθετα (Add-In) Εισαγωγή του SOLVER Από το μενού επιλογών του Excel: Εργαλεία(Tools)->Πρόσθετα (Add-In) Επιλέγουμε τον Solver (Επίλυση) και OK Εισάγουμε σε κάποια κελιά αρχικές τιμές και σε κάποια άλλα τους κατάλληλους τύπους SOLVER Πρόσθετα
Εισαγωγή του SOLVER.xla Στο Excel Alt+F11 Από το μενού Tools SOLVER.xla
Το παράθυρο διαλόγου «Παράμετροι επίλυσης» Παράγει το αποτέλεσμα Τύπος Μεταβαλλόμενα κελιά Για πρόβλημα μεγιστοποίησης Για πρόβλημα ελαχιστοποίησης Για συγκεκριμένη τιμή Συνθήκες που θα ικανοποιούνται
Πατώντας το κουμπί Προσθήκη Περιορισμοί Πατώντας το κουμπί Προσθήκη
Το παράθυρο διαλόγου «Επιλογές επίλυσης» Διάρκεια επίλυσης Αριθμός επαναλήψεων Ακρίβεια λύσης Επιτρεπτό σφάλμα Για μη γραμμικά προβλήματα Επιταχύνει τη διαδικασία επίλυσης Για μεγάλες διαφορές μεγέθους Κατώτερο όριο το 0 Η επίλυση σταματά Μέθοδοι υπολογισμού βασικών μεταβλητών Αλγόριθμος κάθε επανάληψης Μέθοδοι διαφορικού λογισμού Πατώντας το κουμπί επιλογές
Αποτελέσματα επίλυσης Όταν ο Solver σταματά Πατώντας Επίλυση
Μέθοδοι αριθμητικής παραγώγισης (1/4) Προς τα μπρος διαφορές Range("K2").Formula = "=D$11" Range(Cells(3, 11), Cells(NumPoints + 2, 11)).Formula = "=K2+(E$11-D$11)/F$11" Range(Cells(2, 12), Cells(NumPoints + 2, 12)).Formula = "=" & Range("E5").Text Range(Cells(2, 13), Cells(NumPoints, 13)).Formula = "=(L3-L2)/($E$3)" Range(Cells(NumPoints + 1, 13), Cells(NumPoints + 2, 13)).Formula = "=(RC[-1]-R[-1]C[-1])/((RC[-2]-R[-1]C[-2]))" Range(Cells(3, 15), Cells(NumPoints + 2, 15)) = "=((RC[-1]-RC[1]))^2" Range(Cells(3, 16), Cells(NumPoints + 2, 16)) = "=$H$3*K3^$H$4+$H$5*K3^$H$6+$H$7*K3^$H$8+$H$9*K3^$H$10+$H$11*K3^$H$12+$H$13" f(x0+h) f(x0) x0 x0+h
Μέθοδοι αριθμητικής παραγώγισης (2/4) Προς τα πίσω διαφορές Range("K2").Formula = "=D$11" Range(Cells(3, 11), Cells(NumPoints + 2, 11)).Formula = "=K2+(E$11-D$11)/F$11" Range(Cells(2, 12), Cells(NumPoints + 2, 12)).Formula = "=" & Range("E5").Text Range(Cells(2, 13), Cells(3, 13)).Formula = "=(L3-L2)/($E$3)" Range(Cells(4, 13), Cells(NumPoints + 2, 13)).Formula = "=(L4-L3)/($E$3)" Range(Cells(3, 15), Cells(NumPoints + 2, 15)) = "=((RC[-1]-RC[1]))^2" Range(Cells(3, 16), Cells(NumPoints + 2, 16)) = "=$H$3*K3^$H$4+$H$5*K3^$H$6+$H$7*K3^$H$8+$H$9*K3^$H$10+$H$11*K3^$H$12+$H$13" f(x0) f(x0-h) X0-h x0
Μέθοδοι αριθμητικής παραγώγισης (3/4) Μέθοδος τριών σημείων Range("K2").Formula = "=D$11" Range(Cells(3, 11), Cells(NumPoints + 2, 11)).Formula = "=K2+(E$11-D$11)/F$11" Range(Cells(2, 12), Cells(NumPoints + 2, 12)).Formula = "=" & Range("E5").Text Range(Cells(2, 13), Cells(3, 13)).Formula = "=(-3*L2+4*L3-L4)/(2*$E$3)" Range(Cells(4, 13), Cells(NumPoints, 13)).Formula = "=(L5-L3)/(2*$E$3)" Range(Cells(NumPoints + 1, 13), Cells(NumPoints + 2, 13)).Formula = "=(3*RC[-1]-4*R[-1]C[-1]+R[-2]C[-1])/(2*(RC[-2]-R[-1]C[-2]))" Range(Cells(3, 15), Cells(NumPoints + 2, 15)) = "=((RC[-1]-RC[1]))^2" Range(Cells(3, 16), Cells(NumPoints + 2, 16)) = "=$H$3*K3^$H$4+$H$5*K3^$H$6+$H$7*K3^$H$8+$H$9*K3^$H$10+$H$11*K3^$H$12+$H$13" Όπου ξ0=ξ(x0) f(x0+2h) f(x0+h) f(x0) x0 x0+h x0+2h
Μέθοδοι αριθμητικής παραγώγισης (4/4) Μέθοδος πέντε σημείων Range("K2").Formula = "=D$11" Range(Cells(3, 11), Cells(NumPoints + 2, 11)).Formula = "=K2+(E$11-D$11)/F$11" Range(Cells(2, 12), Cells(NumPoints + 2, 12)).Formula = "=" & Range("E5").Text Range(Cells(2, 13), Cells(3, 13)).Formula = "=(-25*L2+48*L3-36*L4+16*L5-3*L6)/(12*$E$3)" Range(Cells(4, 13), Cells(NumPoints, 13)).Formula = "=(L2-8*L3+8*L5-L6)/(12*$E$3)" Range(Cells(NumPoints + 1, 13), Cells(NumPoints + 2, 13)).Formula = "=(25*RC[-1]-48*R[-1]C[-1]+36*R[-2]C[-1]-16*R[-3]C[-1]+3*R[-4]C[-1])/(12*(RC[-2]-R[-1]C[-2]))" Range(Cells(3, 15), Cells(NumPoints + 2, 15)) = "=((RC[-1]-RC[1]))^2" Range(Cells(3, 16), Cells(NumPoints + 2, 16)) = "=$H$3*K3^$H$4+$H$5*K3^$H$6+$H$7*K3^$H$8+$H$9*K3^$H$10+$H$11*K3^$H$12+$H$13" X0-2h X0-h x0 x0+h x0+2h
Μέθοδοι αριθμητικής ολοκλήρωσης (1/2) Τραπεζίου Range("K2").Formula = "=D$11" Range(Cells(3, 11), Cells(NumPoints + 2, 11)).Formula = "=K2+(E$11-D$11)/F$11" Range(Cells(2, 12), Cells(NumPoints + 2, 12)).Formula = "=" & Range("E5").Text Range(Cells(3, 13), Cells(NumPoints + 2, 13)) = "=R[-1]C+(RC[-2]-R[-1]C[-2])*(R[-1]C[-1]+RC[-1])/2" Range(Cells(3, 15), Cells(NumPoints + 2, 15)) = "=((RC[-1]-RC[1]))^2" Range(Cells(3, 16), Cells(NumPoints + 2, 16)) = "=$H$3*K3^$H$4+$H$5*K3^$H$6+$H$7*K3^$H$8+$H$9*K3^$H$10+$H$11*K3^$H$12+$H$13" f(x1) f(x0) x0 x1
Μέθοδοι αριθμητικής ολοκλήρωσης (2/2) Simpson Range("K2").Formula = "=D$11" Range(Cells(3, 15), Cells(NumPoints + 2, 15)).Formula = "=(R[-1]C[-4]+RC[-4])/2" Range(Cells(3, 13), Cells(NumPoints + 1, 13)).Formula = "=M2+($E$3)*(L2+4*O3+L4)/3" Range(Cells(NumPoints + 2, 13), Cells(NumPoints + 2, 13)).Formula = "=R[-1]C+(RC[-2]-R[-1]C[-2])*(RC[-1]+R[-1]C[-1])/3" Range(Cells(3, 16), Cells(NumPoints + 2, 16)) = "=((RC[-2]-RC[1]))^2" Range(Cells(3, 17), Cells(NumPoints + 2, 17)) = "=$H$3*K3^$H$4+$H$5*K3^$H$6+$H$7*K3^$H$8+$H$9*K3^$H$10+$H$11*K3^$H$12+$H$13" f(x2) f(x1) f(x0) x0 x1 x2
Μη γραμμικές μέθοδοι (1/3) a = Range("b4") b = Range("c4") Range("d4").Value = f00(a) Range("e4").Value = f00(b) Μέθοδος διχοτόμησης c = 0.5 * (a + b) Cells(3 + k, 6).Value = c Cells(3 + k, 7).Value = f00(c) Cells(3 + k, 8).Value = f00(b) * f00(c) If f00(b) * f00(c) > 0 Then b = c Cells(4 + k, 3).Font.Bold = True Else a = c Cells(4 + k, 2).Font.Bold = True End If Cells(4 + k, 2) = a Cells(4 + k, 4) = f00(a) Cells(4 + k, 3) = b Cells(4 + k, 5) = f00(b) epsilon = Range("L16") Nmax = Range("L17") a = Range("b4") b = Range("c4") Range("d4").Value = f00(a) Range("e4").Value = f00(b) If f00(a) * f00(b) > 0 Then MsgBox ("For a = " & Str(a) & " and b = " & Str(b) & ", f(a)*f(b)>0." _ & " Try new values of a and b.") Exit Sub End If c = 0.5 * (a + b) k = 0 Do While Abs(f00(c)) > epsilon And k < Nmax Call cmdStep_Click Loop For i = 1 To 100 For j = 2 To 8 Cells(3 + i, j).Value = "" Cells(3 + i, j).Font.Bold = False Next j Next i Range("b4").Value = 0 Range("c4").Value = 1
Μη γραμμικές μέθοδοι (2/3) Μέθοδος Newton-Raphson x = Range("b5") MsgBox ("Use button [Next Step] to iterate solution") k = 0 Dim Dx As Single k = k + 1 Cells(4 + k, 3).Value = f00(x) Cells(4 + k, 4).Value = fP00(x) Dx = f00(x) / fP00(x) x = x - Dx Cells(4 + k, 5).Value = Dx Cells(5 + k, 2).Value = x
Μη γραμμικές μέθοδοι (3/3) Μέθοδος τέμνουσας x0 = Range("b4") x1 = Range("c4") Range("d4").Value = f00(x0) Range("e4").Value = f00(x1) If x0 = x1 Then Else x2 = x1 - f00(x1) * (x1 - x0) / (f00(x1) - f00(x0)) Range("h4").Value = f00(x2) End If k = 0 Dim Dx As Single k = k + 1 Cells(3 + k, 4).Value = f00(x0) Cells(3 + k, 5).Value = f00(x1) If Abs(f00(x1) - f00(x0)) < 0.0000001 Then MsgBox ("Values of x are not changing any more.") Exit Sub End If Dx = f00(x1) * (x1 - x0) / (f00(x1) - f00(x0)) Cells(3 + k, 6).Value = Dx x2 = x1 - Dx Cells(3 + k, 7).Value = x2 Cells(3 + k, 8).Value = f00(x2) x0 = x1 x1 = x2 Cells(4 + k, 2).Value = x0 Cells(4 + k, 3).Value = x1 ΤΟΜΗ (x0,x1) F(x0)*f(x1)<0 Ευθεία (x0,f(x0)) kai (x1,f(x1)) (Χ0,Χ1) -> (Χ1,Χ1’)->(Χ1’,Χ1’’)…
Υλοποίηση σε Visual Basic Εργαλειοθήκη στοιχείων ελέγχου Πλαίσιο κειμένου Κατάσταση σχεδίασης Προβολή κώδικα Ιδιότητες Κουμπί εντολής
FILL CLEAR SOLVER RESET Range("H3").Select ActiveCell.FormulaR1C1 = "1" Selection.AutoFill Destination:=Range("H3:H13"), Type:=xlFillDefault Range("H3:H13").Select Range("H14").Select SolverReset SolverOk SetCell:="$H$15", MaxMinVal:=2, ValueOf:="0", ByChange:="$H$3:$H$13" solversolve userfinish:=False If Range("E5").Value <> "" Then theText$ = Range("E5").Text theText$ = fixString(theText$) theText$ = ReplaceSubstring(theText$, "x", "RC[-1]") Range(Cells(2, 12), Cells(NumPoints + 2, 12)).Formula = "=" & theText$ Else Range(Cells(2, 12), Cells(NumPoints + 2, 12)).Formula = "" End If Dim i As Integer, j As Integer NumPoints = Range("F11") For i = 1 To 1000 For j = 11 To 16 Cells(2 + i, j).Value = "" Next j Next i Range("K2") = "" Range("L2") = "" Range("M2") = "=H38" Range("N2") = "" Range("O2") = "" Range("P2") = ""
Κουμπιά εντολής FILL CLEAR SOLVER RESET Range("E5").Text Όνομα-τύπος Range("E5").Text FILL Τιμή Range("AA1").Value Range("K2").Formula Τύπος CLEAR Cells(2 + i, j).Value = "" SOLVER SolverReset RESET Range("H3").Select
Ακολουθεί η παρουσίαση του προγράμματος