Scilab - Basic Intro

...το μέρος για να ξεκινήσετε!

Συντονιστής: adem1

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

Σημαντικό είναι να χρησιμοποιήσετε την υπηρεσία http://imagebin.ubuntu-gr.org για τις εικόνες.

Scilab - Basic Intro

Δημοσίευσηαπό kalakouentin » 21 Απρ 2009, 17:23

Το Scilab είναι ένα πρόγραμμα αριθμητικών υπολογισμών και προσφέρει μια δωρεάν εναλλακτική ανοιχτού κώδικα για το Matlab.
Για την εγκατάσταση της νεώτερης έκδοση του Scilab (της 5.1.1 τη στιγμή που γράφονται αυτές οι γραμμές) ο χρήστης μπορεί να κατεβάσει από το link http://www.scilab.org/download/ την έκδοση που αντιστοιχεί στην αρχιτεκτονική του υπολογιστή του. O χρήστης αφού κάνει extract στον φάκελο της αρεσκείας του το tar.gz που έλαβε, είναι έτοιμος να χρησιμοποιήσει το scilab.
To εκτελέσιμο αρχείο βρίσκεται στον φάκελο bin με το όνομα scilab. Ανοίγοντας το βρισκόμαστε μπροστά στην αρχική οθόνη του scilab που αναμένει τις εντολές μας.
Εικόνα

(Tο ακόλουθο tutorial προσπαθεί να βρίσκεται στη μεγαλύτερη δυνατή αντιστοιχία με το tutorial του χρήστη Dimitris σχετικά με το Octave. Βασικός σκοπός του είναι να υπογραμμιστεί η αλληλοκάλυψη των δυο ελεύθερων εφαρμογών και να παρουσιάσει μια εξαιρετικά βιώσιμη foss εναλλακτική εκτός της "ομπρέλας" του GNU Foundation.)


Αρχικά δημιουργούμε ένα διάνυσμα a αποτελούμενο από 9 στοιχεία:
Κώδικας: Επιλογή όλων
a = [1 2 3 4 5 9 8 7 6]
a  =
    1.    2.    3.    4.    5.    9.    8.    7.    6. 

Μετά από κάθε εντολή το scilab επιστρέφει το αποτέλεσμα της εντολής εκτός κι αν μετά την εντολή ακολουθεί ο χαρακτήρας ;
Στη συνέχεια μπορούμε να προσθέσουμε σε κάθε στοιχείο του διανύσματος a τον αριθμό 2 και το αποτέλεσμα να το αποθηκεύσουμε στο διάνυσμα b:
Κώδικας: Επιλογή όλων
    b = a + 2;

Αυτή τη φορά δεν τυπώνεται τίποτε στην οθόνη αφού ακολουθεί ο χαρακτήρας ;
Αν θέλουμε να δούμε τα περιεχόμενα του b, τότε απλώς πληκτρολογούμε:
Κώδικας: Επιλογή όλων
b
b  =
     3.    4.    5.    6.    7.    11.    10.    9.    8.

Για τη δημιουργία δισδιάστατων διαγραμμάτων μπορούμε πολύ απλά να χρησιμοποιήσουμε την εντολή plot2d.
Κώδικας: Επιλογή όλων
plot2d(b)

Στη συνέχεια με την χρήση της εντολής xgrid παρουσιάζουμε τις οριζόντιες και κατακόρυφες γραμμές που αποτελούν το πλέγμα (grid).
Κώδικας: Επιλογή όλων
xgrid

Εικόνα

Σε αντίθεση με το octave, το scilab επιτρέπει την άμεση παραμετροποίηση του γραφήματος μέσω του ήδη υπάρχοντος παραθύρου. Έτσι επιλέγοντας edit > Axes Properties μπορούμε να αλλάξουμε το χρώμα, το πάχος, την κλίμακα, τη γραμματοσειρά καθώς και αρκετές άλλες επιλογές του υπάρχοντος γραφήματος μονάχα με μερικά click.
s
Εικόνα
Εικόνα

Οι πίνακες μπορούν να δημιουργηθούν διαχωρίζοντας τις γραμμές του πίνακα με ;
Κώδικας: Επιλογή όλων
A = [1 2 3; 4 5 6; 7 8 9]
A  =
    1.    2.    3. 
    4.    5.    6. 
    7.    8.    9. 

O ανάστροφος (προσοχή όχι ο αντίστροφος) ενός πίνακα μπορεί να υπολογισθεί με τον τελεστή '
Κώδικας: Επιλογή όλων
B = A'
B  =
    1.    4.    7. 
    2.    5.    8. 
    3.    6.    9.

O πολλαπλασιασμός των πινάκων γίνεται με τη χρήση του τελεστή *.
Κώδικας: Επιλογή όλων
C = A *B
C  =
    14.    32.     50.   
    32.    77.     122. 
    50.    122.    194.

To scilab όπως και το octave και το matlab δίνει τη δυνατότητα για έναν ακόμη τελεστή που στην αρχή ίσως να μη φαίνεται συνηθισμένος αλλά θα σας φανεί πολύ χρήσιμος. Πρόκειται για τον πολλαπλασιασμό κατά στοιχείο και γίνεται με .*
Κώδικας: Επιλογή όλων
C = A .* B
C  =
    1.     8.     21. 
    8.     25.    48. 
    21.    48.    81.

πολλαπλασιάζει δηλαδή τα στοιχεία του Α με τα στοιχεία Β στην αντίστοιχη θέση.

O αντίστροφος (προσοχή όχι ο ανάστροφος) ενός πίνακα δίνεται από τη συνάρτηση inv:
Κώδικας: Επιλογή όλων
D = inv(C)
D  =
    0.775      - 1.           0.3916667 
  - 1.           1.         - 0.3333333 
    0.3916667  - 0.3333333    0.1083333

Oι ιδιοτιμές ενός πίνακα δίνονται από τη συνάρτηση spec:
Κώδικας: Επιλογή όλων
spec(A)
ans  =
    16.116844 
  - 1.116844   
  - 1.304D-15

H εντολή rand θα επιστρέψει ένα πίνακα με 3 γραμμές και 2 στήλες με τυχαία στοιχεία μεταξύ 0 και 1.
Κώδικας: Επιλογή όλων
B = rand (3, 2)
B  =
    0.7560439    0.6653811 
    0.0002211    0.6283918 
    0.3303271    0.8497452

Με την εντολή help μπορούμε να διαβάσουμε τις λεπτομέρειες για τη σύνταξη και τα ορίσματα μιας άλλης εντολής, για παράδειγμα:
Κώδικας: Επιλογή όλων
help spec

Για να βγούμε από το Scilab απλά κλείνουμε το παράθυρο ή πληκτρολογούμε quit ή exit.
Κώδικας: Επιλογή όλων
exit


(Ευχαριστώ τον χρήστη Dimitris για την άδεια του να χρησιμοποιήσω το tutorial του πάνω στο Octave ως βάση για τη δημιουργία του παρόντος tutorial για το SciLab)

Ακολουθεί ενδεικτική εικόνα από την εκτέλεση κάποιων εντολών του tutorial :
Εικόνα


συνέχεια εδώ...
Εικόνα
Γνώσεις ⇛ Linux: Συμπαθητικές ┃ Προγραμματισμός: Συμπαθητικότερες ┃ Αγγλικά: Αστέρι
Λειτουργικό ⇛ Ubuntu 10.04 32bit σε HP nw9440 ┃ Ubuntu 10.04 32bit σε Toshiba Satellite U400┃ SLED 11 64bit σε Dell OptiPlex 780
kalakouentin
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 545
Εγγραφή: 05 Ιούλ 2008, 05:50
Εκτύπωση

Re: Scilab - Basic Intro

Δημοσίευσηαπό ftso » 21 Απρ 2009, 17:32

Πολύ ωραίος, μπράβο :)



ΥΓ:Μην ακούσω κανέναν να ζητάει matlab, τον ban-αρα :lol:
Άβαταρ μέλους
ftso
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 6409
Εγγραφή: 12 Μάιος 2008, 13:40
Τοποθεσία: Αθήνα
IRC: ftso
Εκτύπωση

Re: Scilab - Basic Intro

Δημοσίευσηαπό linuxman » 21 Απρ 2009, 17:54

Πολύ καλό , μπράβο , θα είναι πολύ χρήσιμο .
Οδηγίες προς Νεοεισερχόμενους
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Linux Mint 17.1 Rebecca 3.13.0-37-generic 64bit (el_GR.UTF-8, X-Cinnamon cinnamon)
3 Intel Core i5-2310M CPU @ 2.10GHz ‖ RAM 3866 MiB ‖ Dell Inc. 0D7C51 - Dell Inc. Dell System Vostro 3750
4 Intel 2nd Generation Core Processor Family Integrated Graphics [8086:0116] {i915}
5 wlan0: Intel Centrino Wireless-N 1030 [Rainbow Peak] [8086:008a] (rev 34) ⋮ eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 06)
http://www.greeklug.gr
Άβαταρ μέλους
linuxman
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10378
Εγγραφή: 10 Μάιος 2008, 20:41
Τοποθεσία: Thessaloniki / Macedonia / Greece
Εκτύπωση

Re: Scilab - Basic Intro

Δημοσίευσηαπό sokoban4ever » 21 Απρ 2009, 17:55

ftso έγραψε:ΥΓ:Μην ακούσω κανέναν να ζητάει matlab, τον ban-αρα :lol:

:lol: :lol: :lol:
έτσι έτσι το opensource ;)
:D :P
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Scilab - Basic Intro

Δημοσίευσηαπό Nisok » 21 Απρ 2009, 17:57

Πολύ καλός ο οδηγός
Επειδή τα έψαχνα πρίν απο λίγο καιρό μπορώ να πώ ότι το octave με εντυπωσίασε πιο πολυ απο το sci-lab.
Άβαταρ μέλους
Nisok
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 2637
Εγγραφή: 25 Ιαν 2009, 15:00
Τοποθεσία: /home
IRC: nisok
Εκτύπωση

Scilab - Basic Statistics

Δημοσίευσηαπό kalakouentin » 21 Απρ 2009, 18:24

Το Scilab δίνει την δυνατότητα για όλες τις βασικές στατιστικές διεργασίες. Η προηγούμενη ενότητα έκλεισε με την εντολή rand και με αυτή θα ξεκινήσουμε τώρα.

(To παρόν tutorial δεν αποσκοπεί επ' ουδενί να μάθει Στατιστική σε κάποιον. Ουσιαστικός του σκοπός είναι να εξοικειώσει τον χρήστη με το λογισμικό SciLab μέσω εισαγωγικών στατιστικών μεθόδων.)

Αρχικά δημιουργούμε έναν πίνακα 200 γραμμών και 4 στηλών με τυχαία στοιχεία μεταξύ 0 και 1. Το Scilab μπορεί να ενσωματώνει σχόλια (comments) στον κώδικα του ακριβώς όπως και η C++, εισάγοντας δηλαδή δυο forward slashes // και πληκτρολογώντας το σχόλιο.
Κώδικας: Επιλογή όλων
big_H = rand (200,4); // Φτιάξαμε έναν πίνακα 800 στοιχείων σε 4 στήλες!

Στο Scilab για να υποδείξουμε όλες τις σειρές ή τις στήλες ενός πίνακα είναι αρκετό να βάλουμε τον χαρακτήρα : . Άρα ένας μικρότερος πίνακας που εμπεριέρχει όλες τις σειρές από τις στήλες 2 και 3 του αρχικού big_H παράγεται από την εντολη big_H(:, 2:3). Επίσης προφανώς η εντολή big_H(:,:) αντιστοιχεί σε όλο τον πίνακα, και είναι ισοδύναμη με το απλό big_H. ;)
Κώδικας: Επιλογή όλων
small_H = big_H(:, 2:3); //Δηλώνουμε ένα πίνακα small_H που έχει μονάχα τις στήλες 2 & 3 του αρχικού πίνακα big_H.

Μια πολύ χρήσιμη εντολή είναι η εντολή length(Q). Η εντολή επιστρέφει το πλήθος των στοιχείων σε ένα διάνυσμα ή έναν πίνακα Q τον οποίο δέχτηκε ως όρισμα της. Έτσι η εντολή length(big_H) θα μας επιστρέψει το συνολικό αριθμό στοιχείων στον πίνακα big_H και η εντολή length(small_H(:,2)) των αριθμών των στοιχείων στη δεύτερη στήλη του πίνακα small_H.
Κώδικας: Επιλογή όλων
length(big_H)
ans  =
    800. 
length(small_H(:,2))
ans  =
    200.

Τώρα που απομονώσαμε τα δεδομένα που θέλουμε, μπορούμε να ελέγξουμε το άθροισμα των κελιών τους κατά στήλη (column) ή κάτά γραμμή (row) μέσω της εντολής sum.
Κώδικας: Επιλογή όλων
Sum_R = sum(small_H, 'r') //Επιστρέφει το άθροισμα όλων των σειρών (rows) του πίνακα small_H ανά μια στήλη.
Sum_R  =
    97.132479    92.607096 
Sum_C = sum(small_H, 'c'); //Επιστρέφει το άθροισμα όλων των στηλών (columns) του πίνακα small_H ανά μια σειρά. Δεν τυπώνει κάτι λόγω του ;

Για ένα διάνυσμα ή έναν πίνακα Q η εντολή mean(Q) επιστρέφει τον αριθμητικό μέσο όλων των στοιχείων στο Q. Άρα η εντολή mean(big_H) θα μας επιστρέψει τον αριθμητικό μέσο ('μέσο όρο') των 800 στοιχείων στον πίνακα big_H και η mean(small_H(:,2)) τον μέσο όρο των στοιχείων στη δεύτερη στήλη του πίνακα small_H.
Κώδικας: Επιλογή όλων
mean(big_H) // Κάτι κοντά στο 0.5.
ans  =
    0.4883126 
mean(small_H(:,2)) //Κάτι κοντά στο 0.5 αλλά όχι τόσο κοντά όσο το προηγούμενο νούμερο.
ans  =
    0.4630355

Σε αυτό το σημείο για να βεβαιωθούμε ότι έχουμε κάνει σωστά την μετακίνηση των στοιχείων μας μπορούμε να δούμε ελέγξουμε ότι η 3η σειρά του πίνακα big_H έχει το ίδιο μέσο όρο με αυτό της 2ης σειράς του πίνακα small_H. Εφόσον η σύγκριση επιστρέψει Τ (για True) τότε είμαστε σωστοί.
Κώδικας: Επιλογή όλων
mean(big_H(:,3)) == mean(small_H(:,2)) //True or False ?
ans  =
   T

Δυο άλλοι επίσης ευρύτερα "δημοφιλής" μέσοι είναι ο γεωμετρικός μέσος και ο αρμονικός μέσος. Και οι 2 είναι εύκολα υπολογίσιμοι μέσω των εντολών geomean και harmean αντίστοιχα. Ο γεωμετρικός μέσος και ο αρμονικός μέσος των στηλών πίνακα big_H επιστρέφονται αντίστοιχα από τις εντολές geomean(big_H,'r') και harmean(big_H,'r'). (Προσοχή ο γεωμετρικός μέσος εφαρμόζεται μονάχα σε θετικές τιμές)
Κώδικας: Επιλογή όλων
geomean(big_H,'r')
ans  =
    0.3690294    0.3493026    0.3528474    0.3362377 
harmean(big_H,'r')
ans  =
    28.43164    9.6038178    4.7328138    73.474245

Ένα άλλο βασικό στατιστικό μέγεθος είναι η διάμεσος των τιμών. Για ένα διάνυσμα ή έναν πίνακα Q η εντολή median(Q) επιστρέφει τη διάμεσο ή διχοτόμο του συνόλου των στοιχείων στο Q. Άρα η εντολή median(big_H) θα μας επιστρέψει τη διχοτόμο των 800 στοιχείων στον πίνακα big_H και η median(small_H(:,1)) τη διχοτόμο των στοιχείων στην πρώτη στήλη του πίνακα small_H.
Κώδικας: Επιλογή όλων
median(big_H)
ans  =
    0.4779762 
median(small_H(:,1))
ans  =
    0.4475574

Κατά την αρχική ανάλυση των τιμών μας βασικό ρόλο παίζουν κάποια μέτρα διασποράς, τα οποία δίνουν μια συνοπτική εποπτεία της "μεταβλητότητας" των στοιχείων του δείγματος. Κάποια από αυτά είναι το εύρος των τιμών στο δείγμα (range), η μέση απόλυτη απόκλιση (mean absolute deviation) και η τυπική απόκλιση των τιμών (standard deviation).
Ο υπολογισμός του εύρους τιμών γίνεται με την εντολή strange. Πρακτικά υπολογίζει την απόσταση μεταξύ της μέγιστης και της ελάχιστης τιμής του εκάστοτε δείγματος.
Κώδικας: Επιλογή όλων
strange(big_H)
ans  =
     0.9962980 
strange(small_H)
ans  =
    0.9944220

H τιμή της μέσης απόλυτης απόκλισης προσφέρεται με την εντολή mad.
Κώδικας: Επιλογή όλων
mad(big_H,'r') // στις τιμές όλων των σειρών (rows) του πίνακα big_H ανά μια στήλη
ans  =
    0.2358232    0.2492105    0.2367575    0.2526190 
mad(small_H) //σε όλες τις τιμές του small_H συνολικά
ans  =
    0.2429153

Τέλος η τιμή της τυπικής απόκλισης των τιμών υπολογίζεται με την εντολη stdev.
Κώδικας: Επιλογή όλων
stdev(big_H)
ans  =
    0.2840854   
stdev(small_H)
ans  =
    0.2813712

Κάτι εξαιρετικά χρήσιμο είναι η οπτική επισκόπηση των δεδομένων μας. Για αυτή τη διαδικασία μπορούμε να χρησιμοποιήσουμε την plot2d που συναντήσαμε νωρίτερα, αλλά και το ιστόγραμμα συχνοτήτων των τιμών στο δείγμα μας (frequency histogram) που το λαμβάνουμε με τη εντολή histplot(Z,Q).

Η histoplot δέχεται ως υποχρεωτικό όρισμα τον αριθμό Z των τάξεων για τον οποίο θα ληφθούν οι συχνότητες των τιμών του δείγματος Q. Άρα η histplot(20,big_Η) θα δημιουργήσει ένα ιστόγραμμα συχνοτήτων με 20 classes των τιμών στον πίνακα big_H, ενώ η histplot (50, small_H(:,2)); θα δημιουργήσει ένα ιστόγραμμα συχνοτήτων ανά 0.02 (δηλαδή 50 ίσες classes σε διάστημα μίας μονάδας). "Mπακαλίστικα" μπορούμε να πούμε ότι ο αριθμός Z είναι το "πόσες μπάρες" θα έχει το σχήμα μας.

Για να συνδυάσουμε και τα γραφήματα plot2d και histplot σε ένα παράθυρο χρησιμοποιούμε την εντολη subplot. H subplot(m,n,p) "σπάει" το παράθυρο σε ένα πίνακα m-επί-n υπο-παραθύρων και επιλέγει το p-οστό παράθυρο για να απεικονίσει τα δεδομένα της. Έτσι με την εντολή subplot(2,1,1) ορίζουμε ότι θα σπάσει σε 2 μέρη το παράθυρο (ένα πάνω ένα κάτω) και ότι θα plotάρουμε στο 1ο. Αντίστοιχα με την εντολή subplot(2,1,2) ορίζουμε ότι αφού έχει σπάσει ο πίνακας σε 2 μέρη (2-επί-1) plotάρουμε στο 2ο.

Είναι βολικό να βάζουμε τίτλους σε κάθε plot που κάνουμε. Με την εντολή xtitle μπορούμε να τιτλοφορήσουμε το κάθε plot μας. Το συντακτικό της είναι πολύ απλό: xtitle("O titlos toy plot") και δέχεται και ελληνικούς χαρακτήρες.

Κώδικας: Επιλογή όλων
subplot(2,1,1)
plot2d(small_H(:,2))
xgrid
xtitle("Απλό plot των τιμών, με grid");
subplot(2,1,2)
histplot(50,small_H(:,2))
xtitle("Ιστόγραμμα Συχνοτήτων, χωρίς grid");


Εικόνα


Αυτά για τώρα.
Κώδικας: Επιλογή όλων
exit


(Προκαταβολικά συγνώμη από τους μαθηματικούς του forum για τυχόν νοηματικές ατασθαλίες και μπακαλό-ορολογία)

Ακολουθεί ενδεικτική εικόνα από την εκτέλεση κάποιων εντολών του tutorial :
Εικόνα
Εικόνα
Γνώσεις ⇛ Linux: Συμπαθητικές ┃ Προγραμματισμός: Συμπαθητικότερες ┃ Αγγλικά: Αστέρι
Λειτουργικό ⇛ Ubuntu 10.04 32bit σε HP nw9440 ┃ Ubuntu 10.04 32bit σε Toshiba Satellite U400┃ SLED 11 64bit σε Dell OptiPlex 780
kalakouentin
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 545
Εγγραφή: 05 Ιούλ 2008, 05:50
Εκτύπωση


Επιστροφή στο Οδηγοί - How to - Tutorials