Σελίδα 1 από 2

Octave

ΔημοσίευσηΔημοσιεύτηκε: 27 Μαρ 2009, 01:05
από Dimitris
Το octave είναι ένα πρόγραμμα για υπολογισμούς και μία ελεύθερη εναλλακτική για το matlab. Εγκαθίσταται όπως πάντα από τη γραμμή εντολών με:
Κώδικας: Επιλογή όλων
sudo apt-get install octave

Aπό τη γραμμή εντολών πληκτρολογούμε octave, εμφανίζεται η άδεια χρήσης και αναμένει να πληκτρολογήσουμε τις εντολές:
Κώδικας: Επιλογή όλων
octave:1>

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

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

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


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

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

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

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

    14    32    50
    32    77   122
    50   122   194

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

    1    8   21
    8   25   48
   21   48   81

πολλαπλασιάζει δηλαδή τα στοιχεία του Α με τα στοιχεία Β στην αντίστοιχη θέση.
O αντίστροφος---προσοχή όχι ο ανάστροφος---ενός πίνακα δίνεται από τη συνάρτηση inv:
Κώδικας: Επιλογή όλων
D = inv(C)
D =

   0.77500  -1.00000   0.39167
  -1.00000   1.00000  -0.33333
   0.39167  -0.33333   0.10833

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

   1.6117e+01
  -1.1168e+00
  -8.8783e-16

H εντολή rand θα επιστρέψει ένα πίνακα με 3 γραμμές και 2 στήλες με τυχαία στοιχεία μεταξύ 0 και 1.
Κώδικας: Επιλογή όλων
B = rand (3, 2)
   0.68787   0.47172
   0.83483   0.86060
   0.20818   0.38982




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

Για να βγούμε από το octave πληκτρολογούμε quit ή exit ή ctrl+D.

Creative Commons License
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 27 Μαρ 2009, 02:32
από Nisok
Ενδοιαφέρον. Αλλά το matlab είναι γιγαντιαίο. Κατα πόσο νομίζεις ότι μπορεί πράγματι να αντικαταστήσει το matlab?

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 27 Μαρ 2009, 03:17
από medigeek
Nisok έγραψε:Ενδοιαφέρον. Αλλά το matlab είναι γιγαντιαίο. Κατα πόσο νομίζεις ότι μπορεί πράγματι να αντικαταστήσει το matlab?

Ολα αρχιζουν απο κατι μικρο.. σιγα σιγα :)

Οσο για το πόσο είναι compatible, κοιταξε το FAQ:
http://www.gnu.org/software/octave/FAQ. ... patibility

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 27 Μαρ 2009, 03:27
από Dimitris
Μπορεί να το αντικαταστήσει χωρίς κανένα πρόβλημα γιατί περιέχει γραμμική άλγεβρα, επίλυση μη γραμμικών αλγεβρικών εξισώσεων, αριθμητική ολοκλήρωση, κανονικές διαφορικές εξισώσεις, βελτιστοποίηση, επεξεργασία σήματος και εικόνας, αυτόματο έλεγχο και πολλά άλλα. Τα περισσότερα ελεύθερα πακέτα που υπάρχουν για matlab μπορούν να χρησιμοποιηθούν σχεδόν χωρίς καμία τροποποίηση και σε octave. Η ενσωμάτωση κώδικα FORTRAN γίνεται πολύ πιο εύκολα απ'ότι στο matlab και τα αποθετήρια του netlib.org περιέχουν άφθονο κώδικα για ό,τι μπορεί να φανταστεί κανείς. Υπάρχει γραφικό περιβάλλον, το qtoctave, το οποίο προσφέρει κάποιες ευκολίες. Αν διάβασα καλά, οποιαδήποτε ασυμβατότητα με το matlab (το βασικό όχι επιπλέον toolboxes) θεωρείται ως bug στην ομάδα του octave.

Σημασία έχει να υπάρχει η θέληση για να αντικατασταθεί. Και μη μου πεις ότι εκμεταλλεύεσαι όλες τις δυνατότητες του matlab. :D Aν πάλι υπάρχει κάτι που το θέλεις οπωσδήποτε πες το να γράψουμε κανένα toolbox.

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 27 Μαρ 2009, 11:25
από Nisok
Dimitris έγραψε:Aν πάλι υπάρχει κάτι που το θέλεις οπωσδήποτε πες το να γράψουμε κανένα toolbox.


Αυτό ακούγετε ΠΟΛΥ ενδοιαφέρον. Αν όντως είναι πρόταση τότε είμαι μέσα να φτιάξουμε κάτι που έχω στο μυαλό μου.

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 27 Μαρ 2009, 11:33
από Nisok
το κατεβάζω να τσεκάρω....

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 27 Μαρ 2009, 14:41
από Babis_ECE
"Παρακολούθηση Θέματος" από εμένα! :)
Εξαιρετικά ενδιαφέρον το Octave, και ο οδηγός σου με εντολές ακόμα περισσότερο. Ελπίζω να συνεχίσεις με την παρουσίαση εντολών στο Octave. Από το Matlab υπάρχει (δίκαια) απόλυτη εξάρτηση από όλους τους μηχανικούς (στους οποίους ανήκω :) ), επιστήμονες, κλπ. Το χρειάζομαι πλέον για την διπλωματική μου σχεδόν καθημερινά..

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 10 Ιουν 2009, 12:29
από Dimitris
Για να ξεφύγουμε λιγάκι από τις ψηφοφορίες και τις συζητήσεις---οι οποίες οφείλω να πω με κουράσανε αρκετά---είπα να γράψω κάτι διαφορετικό. Όλοι μας έχουμε παίξει παιχνίδια στον υπολογιστή ή σχεδιάσει διδιάστατα ή τρισδιάστατα με προγράμματα όπως το inkscape ή το qcad και θα έχουμε ακούσει για βιβλιοθήκες όπως η opengl. Τι κρύβεται πίσω από αυτά τα γραφικά; Απλές πράξεις όπως πρόσθεση και πολλαπλασιασμός. Bέβαια, κάποιες στοιχειώδη γνώσεις προγραμματισμού είναι απαραίτητες.

Στο παρόν νήμα θα συζητηθούν τα βασικά από τα γραφικά υπολογιστών. Καταρχήν να ξεχωρίσουμε τα γραφικά σε διανυσματικά (vector) και κυψελωτά (pixel ή raster). Τα διανυσματικά, με τα οποία θα ασχοληθούμε, παραμένουν αναλοίωτα--δεν αλλάζουν δηλαδή--όσες φορές κι αν τα μεγεθύνουμε (zoom in). Αντιθετα τα raster γραφικά, αρχίζουν και εμφανίζουν "τετραγωνάκια" που χαλάνε την ποιότητα της εικόνας.

Για την παρουσίαση των παραδειγμάτων θα χρησιμοποιηθεί το πρόγραμμα octave, μιας και δίνει αρκετές δυνατότητες τόσο υπολογιστές όσο και σχεδιασμού. Στο μέλλον θα υπάρξει, ελπίζω, και παράδειγμα με C-GTK+ και python-Tkinter, αλλά μέχρι τότε βλέπουμε.

Καταρχήν δημιουργούμε ένα φάκελο, ας τον ονομάσουμε vector-graphics όπου θα αποθηκεύουμε όλα τα αρχεία που θα δημιουργήσουμε. Ανοίγουμε το τερματικό και πηγαίνουμε στο φάκελο που μόλις δημιουργήσαμε, για παράδειγμα:
cd ~/Desktop/vector-graphics

και πληκτρολογούμε octave.

Θα ορίσουμε τώρα μια συνάρτηση, η οποία θα μας χρειαστεί αρκετά σε όσα κάνουμε στο μέλλον, και ονομάζεται συνάρτηση Bernstein προς τιμή του μαθηματικού που την ανακάλυψε. (Τα μαθηματικά αντικείμενα συνήθως ανακαλύπτονται και δεν εφευρίσκονται γιατί υπάρχουν εκεί έξω απλώς εμείς αγνοούμε την ύπαρξή τους)
Κώδικας: Επιλογή όλων
function b = bernstein(t, n, i)
b = nchoosek(n,i) * t.^i .* (1-t).^(n-i);
end

Η μεταβλητή t εδώ είναι διάνυσμα (ας μου βρει κάποιος μια ελληνική λέξη για την array, γιατί διάνυσμα είναι vector) H τελεία . πριν τα σύμβολα του πολλαπλασιασμού * και του εκθέτη ^ δηλώνει ότι οι πράξεις αυτές θα γίνονται για όλα τα στοιχεία του διανύσματος. Είναι ένας έμμεσος τρόπος να δηλωθεί ένας βρόχος. Η συνάρτηση nchoosek είναι η διωνυμική κατανομή (βλ. http://en.wikipedia.org/wiki/Binomial_coefficient)
Τώρα θα σχεδιάσουμε αυτή τη συνάρτηση. Πρώτα, ορίζουμε ένα γραμμικό σύνολο 100 σημείων:
Κώδικας: Επιλογή όλων
t = linspace(0, 1, 100);

μεταξύ 0 και 1. Όσο περισσότερα σημεία τόσο καλύτερη ανάλυση, από κάποιον αριθμό και πάνω μειώνεται η ταχύτητα φυσικά.
Κώδικας: Επιλογή όλων
b = bernstein(t, 3, 1);
plot(y, b)

Kαι έχουμε την (3,1) συνάρτηση Bernstein. O ακριβής συμβολισμός είναι B με εκθέτη 3 και δείκτη 1.

Oι καμπύλες Bezier ορίζονται ως ο γραμμικός συνδυασμός των b---τα λεγόμενα σημεία ελέγχου (control points)---και των συναρτήσεων Bernstein:
Κώδικας: Επιλογή όλων
function x = bezier(b, t, n, nsd)
x = zeros(length(t), nsd)
for i = 1:n
    tmp = bernstein(t, n-1, i-1);
    for j = 1:nsd
        x(:,j) = x(:,j) + b(i,j) * tmp(:);
    end
end
end


Στο inkscape για παράδειγμα σχεδόν όλα τα αντικείμενα είναι καμπύλες Bezier. Tα τετραγωνάκια που μπορούμε να μετακινήσουμε δεν είναι τίποτε άλλο από τα σημεία ελέγχου των καμπυλών Bezier. Aν ορίσουμε τώρα τα εξής δύο σύνολα σημείων:
Κώδικας: Επιλογή όλων
b = [0,0; 1,-0.075; 2,0; 3,0.1; 4,0.1];
x = bezier(b, t, 5, 2);
plot(x(:,1), x(:,2));

όπου 5 είναι το πλήθος των σημείων και 2 το πλήθος των διαστάσεων (ναι μπορούμε να ορίσουμε και τριδιάστατη καμπύλη) Αυτά επεκτείνονται και σε επιφάνειες όπου υπάρχουν σημεία ελέγχου της επιφάνειας.

Τώρα μπορούμε να γράψουμε τις συναρτήσεις bernstein και bezier σε δύο ξεχωριστά αρχεία με τα ονόματα bernstein.m και bezier.m αντίστοιχα και να τις χρησιμοποιούμε σε άλλα προγράμματα matlab.

ΥΓ. Όποιος ενδιαφέρεται παραπάνω για το θέμα ας το πει.

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 10 Ιουν 2009, 13:10
από atermon
Να προσφέρω στη συζήτηση αναφέροντας μια επίσης αξιόλογη ελληνική εφαρμογή, για όσους δεν την γνωρίζουν ήδη:
http://englab.bugfest.net/

Re: Octave

ΔημοσίευσηΔημοσιεύτηκε: 06 Οκτ 2011, 04:43
από Star_Light
Kαλημέρα. Καταρχην τα συγχαρητηρια μου στον ΔΗμητρη για αυτο το μέγιστο θεμα / οδηγό!

ΕΓκατέστησα και εγω το octave αντι του Matlab επειδη θελω να κάνω καποια υλοποιηση για την πτυχιακη μου.

Εχω μερικες ερωτησεις τις οποιες θα ψαξω και μονος μου αλλα αμα βρεθει καποιος να τις γνωριζει θα με γλιτωνε! :D

κΑΤΑΡΧΗΝ πανω - κατω απο οσο καταλαβαινω η Matlab ειναι το ιδια ή σχεδον ιδια με την γλωσσα που θα χρησιμοποιησουμε και στο octave?

Δεν εχω κοιταξει ακομη καποιο τουτοριαλ :/ sorry.

Nα εγκαταστήσουμε καθαρό ΜΑTLAB στο λινουξ παιζει νομιζω αλλα με καποιο CD , αυτο το CD αν θελει καποιος απο που μπορει
να το προμηθευτει ας πουμε?

Ευχαριστω. ΤΗν καλημερα μου. Και παλι μπραβο για τον οδηγο