next up previous contents
Next: Ιστορικές Σημειώσεις και Περαιτέρω Up: Μαθηματικό Λογισμικό Previous: Περιβάλλον Επιστημονικών Υπολογισμών   Contents

Πρακτικές Συμβουλές για το Λογισμικό

Η παρούσα ενότητα περιέχει μερικές πρακτικές συμβουλές για την απόκτηση και τη χρήση του λογισμικού που αναφέρεται στο βιβλίο, συγκεκριμένα για σκοπούς προγραμματιστικών εργασιών βασισμένους σε προβλήματα με υπολογιστή στο τέλος κάθε κεφαλαίου. Τα προβλήματα με υπολογιστή δεν εξαρτώνται από κάποιο συγκεκριμένο λογισμικό ή γλώσσα προγραμματισμού, γι' αυτό το λόγο είναι διαθέσιμες πολλές επιλογές. Η καλύτερη επιλογή σε μια δοσμένη περίπτωση θα εξαρτηθεί από την εμπειρία του χρήστη, τους πόρους, και τους αντικειμενικούς σκοπούς. Το λογισμικό που αναφέρθηκε, προέρχεται από ποικιλία πηγών, που συμπεριλαμβάνουν μεγάλες εμπορικές βιβλιοθήκες, όπως 321#321 και 302#302, δημόσιες αποθήκες ελεύθερου λογισμικού, όπως 138#138, και περιβάλλονντα επιστημονικων υπολογισμών όπως το 162#162. Πολλά ακαδημαϊκά και βιομηχανικά υπολογιστικά κέντρα και εργαστήρια workstations θα έχουν ένα αντιπροσωπευτικό δείγμα από τέτοιο λογισμικό ήδη εγκαταστημένο και διαθέσιμο για χρήση. Σε κάθε περίπτωση, επαρκές λογισμικό είναι διαθέσιμο δωρεάν διαμέσου του 322#322 ή σε ονομαστικό κόστος από άλλες πηγές (π.χ. συνοδεύοντας κάποια εγχειρίδια) για όλα τα προβλήματα με υπολογιστή του παρόντος βιβλίου. Η διαδικασία να εντοπίσετε, να κατεβάσετε, και να εγκαταστήσετε το κατάλληλο λογισμικό είναι χρήσιμη εμπειρία για τον πραγματικό κόσμο, και η εμπειρία αυτή είναι σημαντικό πρακτικό συμπλήρωμα στις υπόλοιπες γνώσεις που διδάσκονται σ' αυτό το βιβλίο. Η πιο σημαντική ίσως επιλογή είναι αυτή της γλώσσας προγραμματισμού. Η 233#233 είναι η παραδοσιακή γλώσσα επιστημονικών υπολογισμών, και η μεγάλη πλειοψηφία σε υπάρχουσες βιβλιοθήκες λογισμικού και σε κώδικες εφαρμογών είναι η 233#233, αν και η 250#250 πλησιάζει με γοργούς ρυθμούς σε σχέση με τις διαθέσιμες πηγές χρηματοδότησης. Εργαζόμενος μ' αυτό το βιβλίο, ο χρήστης της 233#233 θα ωφεληθεί από τη μεγάλη ποικιλία διαθέσιμου λογισμικού και από τη συμβατότητα και την υπεροχή των ήδη υπαρχόντων κωδίκων εφαρμογών. Επί πλέον, επειδή η 233#233 είναι σχετικά περιοριστική γλώσσα και οι μεταγλωττιστές γι' αυτήν είχαν τα ηνία για πολλά χρόνια, η 233#233 παράγει κάπως πιο αποτελεσματικό εκτελέσιμο κώδικα για ορισμένα υπολογιστικά συστήματα. Η 250#250 είναι πιο πολυποίκιλη και εκφραστική γλώσσα από τη 233#233, και τώρα η 250#250 είναι πιθανότατα η γλώσσα που συνήθως διδάσκεται σε αρχικά μαθήματα γλωσσών προγραμματισμού. Η 250#250 έχει επίσης το πλεονέκτημα ότι διατίθεται δωρεάν (ή με ονομαστικό κόστος) σε σχεδόν κάθε υπολογιστικό σύστημα, ενώ η 233#233 μπορεί μην είναι διαθέσιμη ή να είναι αξιοσημείωτα πιο ακριβή σε μερικές περιπτώσεις. Η 250#250 χρησιμοποιείται από καιρό ως βασική γλώσσα προγραμματισμού για προγραματιστικά συστήματα, αλλά τελευταία γίνεται όλο και περισσότερο δημοφιλής και για επιστημονικό προγραμματισμό. Εάν επιθυμείτε να χρησιμοποιήσετε τη 250#250 μ' αυτό το βιβλίο μπορείτε να βρείτε αρκετό διαθέσιμο λογισμικό. Για παράδειγμα, οι δύο κυριότερες εμπορικές βιβλιοθήκες 321#321 και 302#302, έχουν ουσιώδη υποσύνολα διαθέσιμα σε 250#250, και οι βιβλιοθήκες 323#323 και 324#324 είναι διαθέσιμες επίσης σε 250#250 με ονομαστικό κόστος (δείτε Κεφάλαιο 1.4.1). Επί πλέον, σε πολλά υπολογιστικά συστήματα είναι δυνατή η άμεση κλήση ρουτινών της 233#233 από τη 250#250. Οι κύριες διαφορές που πρέπει να προσεχτούν είναι τα ονόματα των ρουτινών που μπορεί να είναι ελαφρώς τροποποιημένα (συχνά ένα 325#325 πριν ή/και μετά το συνηθισμένο όνομα), όλα τα ορίσματα των ρουτινών της 233#233 πρέπει να δοθούν διαμέσου των διευθύνσεων (δηλαδή, σα δείκτες στη 250#250), και η 250#250 και η 233#233 έχουν αντίθετους κανόνες αποθήκευσης πινάκων (η 250#250 τους αποθηκεύει σε σειρές, ενώ η 233#233 σε στήλες). Τελικά κάποιος μπορεί αυτόματα να μετατρέψει κώδικα 233#233 κατευθείαν σε κώδικα 250#250 χρησιμοποιώντας τον μετατροπέα 326#326 που είναι διαθέσιμος από την 288#288 ή το 138#138, ώστε οι ρουτίνες της 233#233 που αποκτούνται από το διαδίκτυο, για παράδειγμα, να μπορούν εύκολα να χρησιμοποιηθούν σε προγράμματα της 250#250. Μία τρίτη επιλογή στη γλώσσα προγραμματισμού που θα έπρεπε να ληφθεί σοβαρά υπόψη είναι ένα αλληλεπιδρών περιβάλλον επιστημονικών υπολογισμών ( 327#327), όπως το 162#162. Ο χρήστης ενός τέτοιου περιβάλλοντος θα έχει πολλά πλεονεκτήματα. Τα προγράμματα του χρήστη θα είναι πολύ πιο μικρά, εξαιτίας της απαλοιφής των δηλώσεων, της διαχείρισης αποθήκευσης και πολλούς αναλυτικά δοσμένους βρόχους (328#328). Επί πλέον, αυτά τα περιβάλλοντα συχνά έχουν ενσωματωμένες συναρτήσεις για πολλά από τα προβλήματα που θα αντιμετωπίσουμε, το οποίο απλουστεύει αρκετά τη διασύνδεση με αυτές τις ρουτίνες, επειδή μεγάλο τμήμα από την απαραίτητη πληροφορία (μεγέθη πινάκων, κ.λπ.) περνούν ασυζητητί από το περιβάλλον. Ενα ακόμη πλεονέκτημα είναι τα ενσωματωμένα γραφικά, που αποφεύγουν τη δημιουργία αυτών ξεχωριστά σε καποια μετεπεργαστική φάση. Ακόμη και αν προτίθεστε να χρησιμοποιήσετε μελλοντικά μία καθιερωμένη γλώσσα προγραμματισμού όπως η 250#250 ή η 233#233, μπορεί να το βρείτε ωφέλιμο να μάθετε ένα πακέτο όπως το 162#162 για τη χρησιμότητά του ως ένα ταχύ περιβάλλον δημιουργίας πρωτοτύπων στο οποίο νέοι αλγόριθμοι μπορούν να δοκιμαστούν αμέσως και αργότερα να γραφτούν ξανά σε μια καθιερωμένη γλώσσα, αν είναι απαραίτητο, για μεγαλύτερη αποδοτικότητα η συμβατότητα. Αν επιθυμείτε να μάθετε 162#162, πέρα από την υπέροχη διδακτική και τις αναφορές που το συνοδεύουν, μπορείτε να βρείτε χρήσιμο ένα από τα πολλά βιβλία του 162#162 (δείτε [18, 71, 120, 200, 204, 206, 229]). Μερικά από τα προβλήματα με υπολογιστή του βιβλίου χρειάζονται γραφική απεικόνιση. Ανάλογα με το υπολογιστικό περιβάλλον σας, αρκετές επιλογές είναι διαθέσιμες για τη δημιουργία των απαιτούμενων σχεδίων. Σε περιβάλλον 329#329, απλά σχέδια μπορούν να γίνουν χρησιμοποιώντας τις εντολές 330#330 και 331#331 (δείτε τις αντίστοιχες σελίδες του 332#332). Σε 333#333, απλά σχέδια μπορούν να γίνουν στην οθόνη με το εργαλείο xgraph, και τότε μπορεί να τυπωθεί με τις εντολές 334#334 και 335#335, ή τις ισοδύναμές τους. Κάπως πιο εξειδικευμένα γραφικά μπορούν να γίνουν χρησιμοποιώντας ελεύθερα πακέτα όπως το 336#336 (διαθέσιμο με 271#271 από το 337#337) ή το 338#338 (διαθέσιμο με 271#271 από το 339#339), που είναι διαθέσιμα για το 329#329 και διάφορα άλλα υπολογιστικά συστήματα. Ακόμη πιο πολύπλοκα και δυναμικά συστήματα επιστημονικών απεικονίσεων είναι επίσης διαθέσιμα, αλλά οι δυνατότητές τους ξεφεύγουν από τα απλά σχεδιαγράμματα που χρειάζονται για τα προβλήματα αυτού του βιβλίου. Αν χρησιμοποιείτε ένα 340#340 ή 341#341 δεκάδες προγράμματα γραφικών είναι διαθέσιμα, πάρα πολλά ώστε να αναφερθούν ξεχωριστά. Σημειώστε πάλι ότι το 162#162 και άλλα παρόμοια περιβάλλοντα έχουν ενσωματωμένα γραφικά, που αποτελεί μια πολύ μεγάλη ευκολία. Eνας ακόμη σπουδαίος προγραμματιστικός λόγος που πρέπει να θεωρείται είναι η επίδοση. Η επίδοση των σημερινών υπολογιστικών συστημάτων που βασίζονται σε μικροεπεξεργαστή συχνά εξαρτάται την καλή εκμετάλλευση της ιεραρχίας της μνήμης (καταχωρητές, 342#342, 343#343 μνήμη, δίσκο, κ.λπ.) από το χρήστη και τη βελτιστοποίηση του 344#344. Γι' αυτό το λόγο, είναι σημαντικό όχι μόνο να επιλεγεί ο σωστός αλγόριθμος, αλλά και να υλοποιηθεί αυτός προσεκτικά ώστε να μεγιστοποιεί την επαναχρησιμοποίηση των δεδομένων όσο αυτά βρίσκονται στο τμήμα της μνήμης που έχει μεγαλύτερη ταχύτητα προσπέλασης. Ευτυχώς οι λεπτομέρειες τέτοιου προγραμματισμού είναι συνήθως κρυμμένες από τον χρήστη μέσα στις προτεινόμενες στο κείμενο βιβλιοθήκες. Αυτό το χαρακτηριστικό είναι ένα μόνο από τα πλεονεκτήματα της χρήσης υπαρκτού, από ειδικούς γραμμένου λογισμικού για επιστημονικούς υπολογισμούς, όποτε είναι δυνατόν. Αν χρησιμοποιείτε ένα περιβάλλον για επιστημονικούς υπολογισμούς όπως το 162#162, θα πρέπει να έχετε υπόψη σας ότι μπορεί να υπάρχουν σημαντικές διαφορές στην επίδοση μεταξύ των ενσωματωμένων λειτουργιών, οι οποίες είναι γενικά πολύ ταχείες και εκείνων που γράφτηκαν από το χρήστη, οι οποίες τείνουν να είναι πολύ αργές, εξαιτίας του μεταφραστικού τρόπου ( 345#345) λειτουργίας και του 346#346. Γι' αυτό το λόγο πρέπει να είστε πολύ προσεκτικοί κάνοντας συγκρίσεις κάτω από τέτοιες προϋποθέσεις. Για παράδειγμα, ένας αλγόριθμος μπορεί να είναι καταρχήν κατώτερος από έναν άλλον, αλλά να έχει καλύτερη επίδοση εξαιτίας της πιο αποδοτικής εκμετάλλευσης των ενσωματωμένων λειτουργιών. Για γενικές συμβουλές σε πρακτικές απόψεις χρήσης των 347#347, 329#329, 333#333, γραφικών, και άλλων πακέτων που ενδιαφέρουν στους επιστημονικούς υπολογισμούς, καθώς επίσης και στη θεώρηση επιδόσεων στον προγραμματισμό, δείτε [67, 85, 158].

Manolis Vavalis 2000-03-24