Υπολογιστική Φυσική - Μία Πρακτική Εισαγωγή στην Υπολογιστική Φυσική και τον Επιστημονικό Προγραμματισμό

Πρόλογος

English Version

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

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

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

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

Ένας άλλος βασικός στόχος του βιβλίου είναι να βοηθήσει τον αναγνώστη να αποκτήσει εμπειρία και στερεό υπόβαθρο, προκειμένου, αν θέλει, να προχωρήσει σε αριθμητικούς υπολογισμούς υψηλής απόδοσης. Για τον λόγο αυτό, ως γλώσσα προγραμματισμού των βασικών προγραμμάτων που υλοποιούν έναν αλγόριθμο υψηλών αριθμητικών απαιτήσεων έχει επιλεγεί η Fortran. Η γλώσσα αυτή είναι δημοφιλής σε ομάδες που προγραμματίζουν επιστημονικά προγράμματα στους σημερινούς υπερυπολογιστές. Είναι δομημένη με σκοπό να κάνει εύκολο τον προγραμματισμό αριθμητικών αλγόριθμων υψηλών απαιτήσεων, έχει τους πιο αποδοτικούς μεταγλωττιστές στη βελτιστοποίηση εκτέλεσης προγραμμάτων και ένα μεγάλο μέρος αριθμητικών βιβλιοθηκών έχουν προγραμματιστεί στη γλώσσα αυτή. Από παιδαγωγικής άποψης είναι μια πολύ απλή γλώσσα, που επιτρέπει στον μη έμπειρο προγραμματιστή να αρχίσει να προγραμματίζει άμεσα ένα αριθμητικό πρόβλημα, χωρίς να χρειάζεται να καθορίσει δευτερεύουσας σημασίας παραμέτρους του υπολογιστικού περιβάλλοντος. Η εκτέλεση των προγραμμάτων και η ανάλυση των αποτελεσμάτων γίνεται σε ένα λειτουργικό σύστημα της οικογένειας του Unix (όπως είναι λ.χ. το Linux), εμπλουτισμένο από την πλούσια και πανίσχυρη εργαλειοθήκη GNU. Η τελευταία παρέχεται ελεύθερα από την FSF (Free Software Foundation), και είναι απαραίτητη για τον πολύπλοκο χειρισμό δεδομένων που απαιτούνται σε ένα ερευνητικό πρόγραμμα. Η Fortran δεν είναι η καλύτερη επιλογή για τον προγραμματισμό λειτουργιών στις οποίες είναι απαραίτητος ο χειρισμός πολύπλοκων αντικειμένων ή η σε βάθος αλληλεπίδραση με το λειτουργικό σύστημα. Η φιλοσοφία είναι να αφήσει κάποιος τη Fortran να κάνει αυτό για το οποίο έχει φτιαχτεί να κάνει καλύτερα (αριθμητικούς υπολογισμούς) και να αναθέσει τον χειρισμό των δεδομένων και τη διαχείριση του συστήματος σε άλλα, εξωτερικά, εργαλεία. Εργαλεία όπως η awk, ο προγραμματισμός του φλοιού, το gnuplot, η Perl και άλλα, είναι πολύ ισχυρά και ευέλικτα, και συμπληρώνουν τις αδυναμίες της Fortran. Το πρόγραμμα που χρησιμοποιείται στην απεικόνιση των δεδομένων είναι το gnuplot, το οποίο παρέχει πανίσχυρα εργαλεία χειρισμού των δεδομένων και δημιουργίας μεγάλου αριθμού από πολύπλοκες γραφικές παραστάσεις. Όλα τα εργαλεία που χρησιμοποιούνται στο βιβλίο δίνονται με άδεια ανοιχτού λογισμικού και είναι προσβάσιμα χωρίς χρέωση. Μπορούν να χρησιμοποιηθούν σε περιβάλλον Linux, Windows και Mac OS.

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

Το βιβλίο δίνεται μαζί με συνοδευτικό υλικό που μπορεί να βρεθεί και στην ιστοθέση του http://www.physics.ntua.gr/~konstant/YpologistikhFysikh/. Το συνοδευτικό λογισμικό περιέχει όλα τα προγράμματα που παρουσιάζονται στο βιβλίο, μαζί με χρήσιμα εργαλεία και λύσεις μερικών από τα προβλήματα. Κάθε κεφάλαιο συμπληρώνεται από ασκήσεις που ο αναγνώστης πρέπει να λύσει για να αποκτήσει ``hands on'' εμπειρία στον επιστημονικό προγραμματισμό. Ελπίζω πως έχω ήδη τονίσει αρκετά, πως είναι απαραίτητο ο αναγνώστης να εκτελεί τις εντολές που παρουσιάζονται στο βιβλίο κατά τη διάρκεια της μελέτης του.

Σας εύχομαι μια δημιουργική εμπειρία επιστημονικού προγραμματισμού!

Αθήνα 2015.

Creative Commons License (CC BY-NC-ND 3.0 GR)