Σάββατο, 7 Νοεμβρίου 2015

Αριθμητική παραγώγιση

Η χρήση των υπολογιστών στα μαθηματικά, μας έχει βοηθήσει να λύσουμε δύσκολα ολοκληρώματα καθώς και άλλα αναλυτικά προβλήματα. Μία ακόμη χρήση των υπολογιστών στα μαθηματικά είναι η εύρεση των τιμών της παραγώγου μίας συνάρτησης. Όπως είναι προφανές, η διαδικασία με την οποία επιτυγχάνεται αυτό ονομάζεται αριθμητική παραγώγιση. Παρακάτω θα δούμε την απλή λογική της αριθμητικής παραγώγισης, τα μειονεκτήματα της και τον αλγόριθμο που την υλοποιεί.

Ας ξεκινήσουμε από κάποιες μαθηματικές έννοιες. Αρχικά η παράγωγος μίας συνάρτησης f(x) είναι και αυτή μία συνάρτηση του x. Υπολογίζοντας την τιμή της παραγώγου για x=x0, υπολογίζουμε την κλίση της καμπύλης f(x) στο x=x0. Έπειτα, η τιμή της παραγώγου στο σημείο x0 ορίζεται με τον τύπο

Πρέπει να δούμε, λοιπόν, πως θα αξιοποιήσουμε τον τύπο (1) ώστε να παραγωγίσουμε αριθμητικά μία συνάρτηση. Έστω πως έχουμε τρία σημεία που ανήκουν στην γραφική παράσταση της συνάρτησης f (εικόνα 1). Τα σημεία αυτά είναι τα εξής: Α(x0-Δ,f(x0-Δ)), Β(x0,f(x0)) και C(x0+Δ,f(x0+Δ)). Αν το Δ είναι μικρό, δεν θα ήταν λάθος να υποθέσουμε πως η καμπύλη ΑΒC είναι τμήμα κύκλου.

εικόνα 1, η κόκκινη καμπύλη είναι μέρος της γραφικής παράστασης της f.
Από την γεωμετρία γνωρίζουμε πως η ευθεία AC είναι παράλληλη με την ευθεία που εφάπτεται στο σημείο Β με το τμήμα κύκλου. Όμως η κλίση της ευθείας στο σημείο Β είναι η τιμή της παραγώγου της συνάρτησης f για x=x0. Επίσης, η κλίση του ευθύγραμμου τμήματος AC ισούται με τον λόγο
Έτσι, σύμφωνα με την παραπάνω ανάλυση, μπορούμε να γράψουμε


Η σχέση (2) είναι η βασική σχέση που θα χρησιμοποιηθεί στον αλγόριθμο μας. Συγκεκριμένα, ο αλγόριθμος μας θα παραγωγίζει μία συνάρτηση f σε ένα υποσύνολο [a,b] του πεδίου ορισμού της. Για να υπολογίσει την παράγωγο στο σημείο x=x0 αρκεί να γνωρίζει τις τιμές της συνάρτησης για x0-Δ και x0+Δ. Έτσι γράφουμε τον παρακάτω αλγόριθμο:

Private Sub Command1_Click()

Dim x_up As Double, x_down As Double, a As Double
Dim b As Double, delta As Double

a = Text1.Text
b = Text2.Text
delta = Text3.Text

x_down = a
x_up = a + 2 * delta

Open "results.txt" For Output As #1

While x_up <= b

der = (f(x_up) - f(x_down)) / (2 * delta)

Print #1, (x_down + delta), der

x_down = x_down + delta
x_up = x_up + delta

Wend

Close

End Sub

Function f(x As Double) As Double
f = Sin(x) + Cos(x)
End Function

Με τον συγκεκριμένο κώδικα υπολογίζουμε τις τιμές της παραγώγου της συνάρτησης f(x)=sin(x)+cos(x). Αν μας ενδιαφέρει το διάστημα [0,10] τότε στην φόρμα που φαίνεται στην εικόνα 2 εισάγουμε όπου a το 0 και όπου b το 10. Για Δ πρέπει να εισάγουμε μία μικρή τιμή ώστε να έχουμε μία καλή προσέγγιση της παραγώγου. Έτσι για Δ εισάγουμε το 0.2 (θα δούμε παρακάτω την σημασία του Δ).

εικόνα 2, η φόρμα του κώδικα.

Έπειτα, τρέχοντας τον κώδικα προκύπτει ένα αρχείο txt. Το αρχείο αυτό περιέχει δύο στήλες. Η πρώτη στήλη είναι τα x και η δεύτερη είναι οι τιμές της παραγώγου για τα αντίστοιχα x (εικόνα 3).

εικόνα 3, η πρώτη στήλη είναι τα x και η δεύτερη είναι οι τιμές της παραγώγου.
Χρησιμοποιούμε το excel για να πλοτάρουμε κάθε σημείο του αρχείου results.txt. Έτσι προκύπτει το γράφημα της εικόνας 4.

εικόνα 4, φαίνεται γραφικά το αποτέλεσμα του κώδικα.

Η παράγωγος της συνάρτησης f(x)=sin(x)+cos(x) είναι η συνάρτηση g(x)=cos(x)-sin(x). Η γραφική παράσταση της συνάρτησης g(x) φαίνεται στην εικόνα 5.

εικόνα 5, η γραφική παράσταση της παραγώγου της f.

Παρατηρούμε πως οι γραφικές παραστάσεις των εικόνων 4 και 5 είναι σχεδόν ίδιες. Για μία πιο λεπτομερή σύγκριση του κώδικα και της πραγματικής παραγώγου (της συνάρτησης g) κάνουμε το γράφημα της εικόνας 6 όπου έχουμε πλοτάρει τις διαφορές των τιμών του κώδικα και της συνάρτησης g.

εικόνα 6, τα σφάλματα του κώδικα για κάθε σημείο.
Ουσιαστικά στην εικόνα 6 φαίνεται το σφάλμα που κάνει ο κώδικας. Εντυπωσιακό είναι το γεγονός πως η κατανομή των σφαλμάτων είναι αρμονική συνάρτηση όπως οι f και g.

Τέλος, ας δούμε την κατανομή των σφαλμάτων για διάφορες τιμές του Δ (εικόνα 7).

εικόνα 7, οι κατανομές σφαλμάτων για διάφορα Δ.
Όπως είναι λογικό όσο μειώνεται το βήμα τόσο μειώνονται τα σφάλματα που παράγει ο κώδικας. Όμως πρέπει να προσέξουμε το εξής: Σύμφωνα να με την εξίσωση (2), όσο μειώνεται το Δ τόσο αυξάνεται η τιμή της παραγώγου. Αυτό μπορεί να δημιουργήσει αστάθεια στον κώδικα μας καθώς είναι δυνατόν να προκύψουν διαιρέσεις με μηδέν ή απροσδιοριστίες του τύπου μηδέν δια μηδέν. Επομένως, σε αντίθεση με την αριθμητική ολοκλήρωση, η αριθμητική παραγώγιση είναι μία ασταθής διαδικασία. 

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου