Πρώτο commit
Αυτό το commit περιλαμβάνεται σε:
commit
8ec8e9bee2
451 αρχεία άλλαξαν με 46736 προσθήκες και 0 διαγραφές
325
content/articles/30/03_yacas.md
Κανονικό αρχείο
325
content/articles/30/03_yacas.md
Κανονικό αρχείο
|
@ -0,0 +1,325 @@
|
|||
+++
|
||||
title = 'YACAS (Yet Another Computer Algebra System)'
|
||||
date = '2001-09-01T00:00:00Z'
|
||||
description = ''
|
||||
author = 'Πίπιλας Κων/νος(mailto:pilotos@hellug.gr)'
|
||||
issue = ['Magaz 30']
|
||||
issue_weight = 3
|
||||
+++
|
||||
|
||||
**1. ΕΙΣΑΓΩΓΗ**
|
||||
---------------------------------------
|
||||
|
||||
**2. ΕΓΚΑΤΑΣΤΑΣΗ**
|
||||
------------------------------------------
|
||||
|
||||
**3. ΧΡΗΣΗ**
|
||||
------------------------------------
|
||||
|
||||
**4. ΕΠΙΠΛΕΟΝ ΣΤΟΙΧΕΙΑ**
|
||||
------------------------------------------------
|
||||
|
||||
**5. Yacas vs Others**
|
||||
----------------------------------------------
|
||||
|
||||
|
||||
### [1. ΕΙΣΑΓΩΓΗ]{#s1}
|
||||
|
||||
Πρόκειται για ένα πολύ ισχυρό και επεκτάσιμο πρόγραμμα, που για να εκμεταλευτείτε όλη του τη δύναμη \"θα πρέπει να του μιλήσετε στη δική του γλώσσα\". Δεν είναι
|
||||
και τίποτα ιδιαίτερο, ιδίως αν έχετε μια βασική γνώση προγραμματισμού. Αλλά και εντελώς αρχάριοι να είστε, νομίζω ότι είναι απλά θέμα εξοικείωσης και λίγων
|
||||
λεπτών για να μπορέσετε να κάνετε τις βασικές εργασίες.
|
||||
|
||||
Αν λοιπόν θέλετε να εκτελείτε σε δευτερόλεπτα διάφορα προβλήματα όπως υπολογισμός παραγώγου, ολοκληρωμάτων, ορίων, πολλαπλασιασμός πινάκων, επίλυση γραμμικών
|
||||
εξισώσεων, απλοποίηση παραστάσεων, υπολογισμός σειρών Taylor κτλ., που απαιτούν ένα σωρό πράξεις σίγουρα το Yacas θα το αγαπήσετε.
|
||||
|
||||
|
||||
### [2. ΕΓΚΑΤΑΣΤΑΣΗ]{#s2}
|
||||
|
||||
Το Yacas μπορείτε να το κατεβάσετε από το επίσημο site:\
|
||||
url name=\"http://www.xs4all.nl/ apinkus/\" url=\"http://www.xs4all.nl/ apinkus/\"\>\
|
||||
ή από κάποιο κοντινό mirror\
|
||||
(http://linuxberg.ntua.gr στο Ε.Μ.Π. στην κατηγορία X11/Scientific/Math/).\
|
||||
Το μέγεθος του είναι περίπου 450ΚΒ.
|
||||
|
||||
Είναι συμβατό με όλες τις Unixοειδή πλατφόρμες (αφού η είσοδος και η έξοδος του Yast είναι σε μορφή text) οπως τα **Linux**, **FreeBSD** κτλ., αρκεί να έχετε
|
||||
εγκατεστημένο ένα compiler **C++**, πχ. **τον g++**.
|
||||
|
||||
Αφού το κατεβάσετε εκτελέστε την εντολή :
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
tar -xzvf yacas-έκδοση.tgz
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
στον κατάλογο που επιθυμείτε. Στην συνέχεια μπείτε σε αυτόν τον κατάλογο και πληκτρολογήστε τις εξής εντολές :
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Αν όλα πάνε καλά τότε είστε έτοιμοι να χρησιμοποιήσετε το πρόγραμμα με την εντολή yacas. Εκτός από τη **Source** μορφή, μπορείτε να το κατεβάσετε και σε **RPM ή
|
||||
DEB**.
|
||||
|
||||
|
||||
### [3. ΧΡΗΣΗ]{#s3}
|
||||
|
||||
Για να ξεκινήσει το Yacas όπως είπαμε και πιο πάνω γράψτε
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
yacas
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
ή αν είστε στα X-Windows ανοίξτε ένα παράθυρο προσωμοίωσης τερματικού και κάντε το ίδιο. Στις πρώτες σειρές θα δείτε κάποιες πληροφορίες για το πρόγραμμα και
|
||||
την βοήθεια. Στην συνέχεια βλέπετε το command prompt του Yacas:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
In>
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
στο οποίο εισάγετε όλες τις εντολές.Στο τέλος κάθε εντολής μπαίνει ένα ελληνικό ερωτηματικό. Σε κάθε γραμμή μπορείτε να εισάγετε μια μόνο εντολή.Πχ:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
In>N(Cos(Pi));
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Οι \`\`απαντήσεις\'\' του Yacas στις εντολές που του δίνουμε εμφανίζονται μετά το prompt:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Out>
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Για να κλείσουμε το πρόγραμμα πληκτρολογούμε `Exit()` ή `quit` ή `^C (Ctrl+C)`.
|
||||
|
||||
Το Yacas συνοδεύεται από ένα πολύ καλό documentation, που εξηγούνται όλες οι λεπτομέρειες του προγράμματος και η πρόσβαση σ\' αυτό γίνεται με την εντολή `??`
|
||||
όπου και θα ανοίξει ο Browser **Lynx** για να δείτε τις **HTML** σελίδες του documentation. Επίσης μπορείτε να πάρετε βοήθεια για μια συνάρτηση δίνοντας
|
||||
`?συνάρτηση()`, πχ.
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
?Sin()
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Το συντακτικό που χρησιμοποιεί το Yacas είναι C-like.\
|
||||
Δηλαδή οι αριθμητικές πράξεις παριστάνονται ως εξής:
|
||||
|
||||
πρόσθεση : +\
|
||||
αφαίρεση : -\
|
||||
πολ/σμος : \*\
|
||||
διαίρεση : /\
|
||||
δύναμη : \^ (δηλαδή το 2 στον κύβο παριστάνεται 2\^3).
|
||||
|
||||
Δύο άλλα σύμβολα που χρησιμοποιούνται είναι:\
|
||||
ανάθεση τιμής : =\
|
||||
ισότητα : ==
|
||||
|
||||
Επίσης υπάρχουν διάφορες συναρτήσεις εκ των οποίων οι βασικότερες είναι οι:\
|
||||
ημίτονο = `Sin()`\
|
||||
συνημίτονο = `Cos()`\
|
||||
εφαπτομένη = `Tan()`\
|
||||
Υπολογισμός `e^x = Exp(x)`\
|
||||
νεπέριος λογάριθμος του `x = Ln(x)`\
|
||||
ρίζα του `x=Sqrt(x)`\
|
||||
απόλυτη τιμή αριθμού = `Abs(x)`\
|
||||
η αριθμητική τιμή μιας έκφρασης = `N(έκφραση)`\
|
||||
n παραγοντικό = `n!`
|
||||
|
||||
Για μια ολοκληρωμένη εικόνα των συναρτήσεων που συναντούνται στο Yacas υπάρχει το **functions reference** (το βρίσκετε με την εντολή `??`). Για παράδειγμα ένας
|
||||
αριθμητικός υπολογισμός που θα μπορούσε να εκτελεστεί στο Yacas θα ήταν:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
In>(3*6^2+7*897)/(N(Sin(5)*Tan(6)));
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
και η έξοδος από το Yacas θα ήταν :
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Out>22888.1333231108;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Όταν δουλεύουμε με δεκαδικούς αριθμούς τότε μπορούμε από την αρχή να καθορίσουμε την ακρίβεια των δεκαδικών ψηφίων.\
|
||||
Αυτό γίνεται με την συνάρτηση `Precision(n)`, όπου n ο αριθμός των δεκαδικών ψηφίων. Πχ.:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
In> Precision(15);
|
||||
Out> True;
|
||||
In> N(7/23);
|
||||
Out> 0.304347826086956;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Το κύριο χαρακτηριστικό του Yacas είναι η χρήση λιστών για την παρουσίαση πιο σύνθετων αλγορίθμων όπως ο πολ/σμος πινάκων, διανυσμάτων κτλ. (η ιδέα αυτή
|
||||
προέρχεται από την γλώσσα προγραμματισμού LISP).\
|
||||
Μια λίστα είναι ένα αριθμημένο σύνολο από αντικείμενα. Στο Yacas μια λίστα δημιουργείται βάζοντας μέσα σε άγκυστρα τα αντικείμενα και χωρίζοντάς τα με κώμμα.
|
||||
Πχ. αν `a, b, c, d` είναι αντικείμενα, μια λίστα θα είχε τη μορφή : {a,b,c,d}. Έτσι ένα διάνυσμα παριστάνεται στο Yacas σαν μια λίστα και ένας πίνακας σαν μια
|
||||
λίστα από λίστες. Για να προσπελάσουμε ένα αντικείμενο μιας λίστας χρησιμοποιούμε την εντολή: `ls[n]`, όπου `ls` είναι το όνομα της λίστας και `n` είναι η θέση
|
||||
του αντικειμένου που ζητάμε από τη λίστα. Οπότε αν είχαμε το διάνυσμα
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
ls{a,b,c,d,e,f}
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
τότε θα μπορούσαμε να εκτελέσουμε τις εξής εντολές:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
ls[3];
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
και η έξοδος του προγράμματος θα ήταν το `c`.
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
ls[2 .. 4];
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
και η έξοδος θα ήταν η λίστα `{b,c,d}` (οι 2 τελείες \"..\" μεταφράζονται \"εως\" και χρησιμοποιούνται για λόγους συντομίας). Ας κάνουμε τώρα ενα παράδειγμα
|
||||
πολ/σμού πινάκων. Έστω ο πίνακας Κ23 είναι 2x3 και ο M34 είναι 3x4. Για να τους ορίσουμε δίνουμε στο prompt:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
In> K23:={{x,y,2},{4,y,x)}; και
|
||||
In> M34:={{3,x,y,x+1},{x+y,y-2,2,y},{y^2-1,4,y,2*x^2}};
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Οπότε αν τώρα δώσουμε
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
K23*M34
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
θα πάρουμε το γινόμενο των 2 αυτών πινάκων που είναι ένας νέος πίνακας 2x4.
|
||||
|
||||
Υπάρχουν αρκετές συναρτήσεις για τους πίνακες και γενικά για την γραμμική 'λγεβρα όπως η συνάρτηση `Determinant(M)`, που μας επιστρέφει την ορίζουσα του πίνακα
|
||||
M, η `Inverse(Μ)` που επιστρέφει τον αντίστροφο του M κτλ.
|
||||
|
||||
Στο **Yacas** μπορούμε να δουλέψουμε άνετα με συναρτήσεις και να κάνουμε τους συνήθεις υπολογισμούς όπως υπολογισμός τιμών συνάρτησης, παραγώγου, ολοκληρώματος
|
||||
και ορίου.\
|
||||
Πχ. έστω ότι έχουμε την συνάρτηση `f(x)=2x+3` και θέλουμε να υπολογίσουμε το `f(4)`, την παράγωγο της `f`,το ολοκλήρωμα της `f` από `a` εως `b` και το όριο της
|
||||
`f` όταν το `x` τείνει στο 0. Τότε θα είχαμε τα παρακάτω :
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
In> f(x):=2*x+3; /* Ορισμός συνάρτησης */
|
||||
Out> true;
|
||||
In>f(4); /* Υπολογισμός του f(4) */
|
||||
Out>11;
|
||||
In>D(x) f(x); /* Υπολογισμός παραγώγου της f */
|
||||
Out>2;
|
||||
In>Integrate(x,a,b) f(x); /* Υπολογισμός ολοκληρώματος */
|
||||
Out>(2*b^2)/2+3*b-((2*a^2)/2+3*a);
|
||||
In>Limit(x,0) f(x); /* Υπολογισμός ορίου της f όταν x->0 */
|
||||
Out>3;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Με το Yacas έχουμε την δυνατότητα επίλυσης συστημάτων γραμμικών (προς το παρόν) εξισώσεων, αρκεί να μην το παρακάνετε (μην του βάλετε ένα σύστημα 100x100 γιατί
|
||||
θα σας πάρει κάποια χρόνια:).
|
||||
|
||||
Για παράδειγμα έστω ότι θέλουμε να λύσουμε το σύστημα :
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
4x+6y+z=2
|
||||
x-4z=4
|
||||
y+2z=2
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Θα χρησιμοποιήσουμε την συνάρτηση `Solve` πέρνωντας κάθε εξίσωση και κάθε μεταβλητή σαν στοιχεία μιας λίστας :
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
In> Solve({4*x+6*y+z==2,x-4*z==4,y+2*z==2},{x,y,z});
|
||||
Out> {{-84/5,62/5,-26/5}};
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Μπορούμε ακόμη να κάνουμε απλοποίηση παραστάσεων με την συνάρτηση `Simplify`:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
In> Simplify((x-8)^2+(x-6)^2);
|
||||
Out> 2*x^2-28*x+100;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Πολλές φορές τα αποτελέσματα που παίρνουμε από το **Yacas** είναι μεγάλα και δύσκολα στο διάβασμα. Γι\' αυτό μας δίνεται η δυνατότητα να εκτυπώνονται τα
|
||||
αποτελέσματα έτσι ώστε να τα καταλαβαίνουμε εύκολα με την βοήθεια της συνάρτησης `PrettyForm` (σε **ASCII text**).
|
||||
|
||||
Πχ. αν είχαμε ως αποτέλεσμα από έναν υπολογισμό την παράσταση:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
((3*x^2+1)/2!)+7*x+1/2*x^2-2*x+3/8
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
δίνοντας:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
In> PrettyForm(%); /* Το % παίρνει την προηγούμενη τιμή της εξόδου */
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Θα πέρναμε ως έξοδο:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
2
|
||||
3 * x + 1 1 2 3
|
||||
--------- + 7 * x + - * x - 2 * x + -
|
||||
2 2 8
|
||||
Out>True;
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
### [4. ΕΠΙΠΛΕΟΝ ΣΤΟΙΧΕΙΑ]{#s4}
|
||||
|
||||
Οι δυνατότητες του **Yacas** δεν σταματούν βέβαια εδώ. Το **Yacas** μπορεί να συνεργαστεί με άλλα προγράμματα όπως το **Gnuplot** και να μας δίνει πχ. το
|
||||
αποτέλεσμα από έναν υπολογισμό πάνω στο καρτεσιανό επίπεδο σε ένα παράθυρο στα **X-Windows**.
|
||||
|
||||
Μπορεί να προσπελάσει αρχεία που έχουμε δημιουργήσει (κάποιον αλγόριθμο) και να τα εκτελέσει.Μια πολύ μεγάλη δυνατότητα που μας δίνει αυτό το πρόγραμμα είναι
|
||||
οτι μπορούμε να ορίσουμε τις δικές μας συναρτήσεις που χρησιμοποιούμε καθημερινά και να το φέρουμε στα μέτρα μας. Όλα αυτά ελπίζω να τα προσθέσω σε μια
|
||||
καινούρια έκδοση αυτής της παρουσίασης.
|
||||
|
||||
|
||||
### [5. Yacas vs Others]{#s5}
|
||||
|
||||
Πολλοί από σας θα αναρωτηθήκατε γιατί να μπω στον κόπο να μάθω άλλο ένα τέτοιο πρόγραμμα, την στιγμή που υπάρχουν διάφορα άλλα, με πλήρη κατάλογο συναρτήσεων,
|
||||
καλύτερη οργάνωση, τεράστια και αναλυτικά εγχειρίδια χρήσης, που είναι και καθιερωμένα στο χώρο και τα χρησιμοποιεί και πολύς κόσμος (βλέπε **Mathematica** και
|
||||
**Scilab**).
|
||||
|
||||
Η απάντηση είναι απλή : γιατί το Yacas μπορεί να το αποκτήσει οποιοσδήποτε αφού διανέμεται κάτω από **GNU General Public License** (δεν γνωρίζω αν το Scilab
|
||||
είναι κάτω από GPL αλλά νομίζω πως είναι) με ολόκληρο τον κώδικα μπροστά του και από την αλλή γιατί το μέγεθος του είναι **ελάχιστο** σε σχέση με τα άλλα
|
||||
παρόμοια προγράμματα και με τις δυνατότητες που έχει.
|
||||
|
||||
Οπότε το μόνο που έχετε να κάνετε τώρα είναι να το κατεβάσετε στον υπολογιστή σας και να το δοκιμάσετε, γιατί όπως λέει ο λαός: \"καλό ακούγεται αλλά αν δεν το
|
Φόρτωση…
Προσθήκη πίνακα
Προσθήκη υπερσυνδέσμου
Παράθεση σε νέο ζήτημα