THMMY.gr

Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών => Συστήματα Αυτομάτου Ελέγχου ΙΙΙ => Topic started by: Tonia on November 14, 2006, 21:49:38 pm



Title: Εργασίες 2006
Post by: Tonia on November 14, 2006, 21:49:38 pm
Έχει καταφέρει κανείς να λειτουργήσει το παράδειγμα στο MATLAB που βρίσκεται στη σελίδα 2 των σημειώσεων (για το MATLAB);
Πώς; Έχω κολλήσει σε αυτό με το function.
ευχαριστώ για όποια βοήθεια!


Title: Re: Εργασίες 2006
Post by: JAs0n-X on November 15, 2006, 02:49:59 am
Δεν εχω κοιταξει την εργασια και ουτε προκειται αλλα το προβλημα σου ειναι Ματλαμπικο??? :P

Τι παιζει με το function?

Αν ειναι ΣΑΕικο σορρυ δεν μπορω να σε βοηθησω.  :)


Title: Re: Εργασίες 2006
Post by: Tonia on November 15, 2006, 13:31:04 pm
Ειναι καθαρά ματλαμπικό το πρόβλημα μου. το θεωρητικό μέρος το έχω μάλλον καταφέρει και για να κάνω και το δεύτερο που είναι η προσομοίωση στο μάτλαμπ, προσπαθώ να καταλάβω το παράδειγμα των σημειώσεων.
στο παράδειγμα θέλουμε να περιγράψουμε τη διαδικασία επίλυσης μιας διαφορικής εξίσωσης με αρχικές συνθήκες με τη μέθοδο Van der Pol. με τη "function" δημιουργείς από ότι κατάλαβα την συνάρτηση odefun, η οποία είναι όρισμα της ode45. το dx ειναι διανυσμα- στήλη, όπως και το x. το πρόγραμμα που δίνεται στη σημειώσεις είναι το εξής:

function dx=odefun(t,x)
mi=1;
dx=[x(2);mi*(1-x(1)^ 2)*x(2)-x(1)];
[t,x]=ode45(odefun,[0 20],[2;0]);

πώς πρέπει να ορίσω τις t και x?
έχω Μάτλαμπ 6.1 και το βάζω και μου βγάζει διάφορα προβλήματα.


Title: Re: Εργασίες 2006
Post by: JAs0n-X on November 15, 2006, 15:47:44 pm
Εσυ ποιες συναρτησεις πρεπει να φτιαξεις?
Την odefun ή την ode45 ?

ή της εχεις και τις 2?
πες και το προβλημα που σου βγαζει...ποιο ειναι το ερρορ?


Title: Re: Εργασίες 2006
Post by: Tonia on November 15, 2006, 16:08:57 pm
Ρώτησα τον μεταπτυχιακό που μας κάνει ασκήσεις και είπε ότι με το προγραμματάκι:

function dx=odefun(t,x)
mi=1;
dx=[x(2);mi*(1-x(1)^ 2)*x(2)-x(1)];

ορίζουμε την odefun και μετα με την εντολή

[t,x]=ode45(odefun,[0 20],[2;0]);

την καλούμε. πώς το κάνω αυτό? δημιουργώ ένα αρχείο .m με όνομα odefun και το αποθηκεύω και μετά την καλώ και μου βγάζει:

Undefined function 'odefun'.


Title: Re: Εργασίες 2006
Post by: marauber on November 15, 2006, 17:12:14 pm
Η ode45 προϋπάρχει;

Δες αν έχεις προσθέσει το path που έχεις αποθηκεύσει την odefun.m σε αυτά που κοιτάει το matlab, ή έστω αν βρίσκεσαι (μέσα στον matlab browser εννοώ) στον ίδιο φάκελο που την έχεις αποθηκεύσει.


Title: Re: Εργασίες 2006
Post by: Tonia on November 15, 2006, 17:19:26 pm
Οκ, λύθηκε το προηγούμενο πρόβλημα. το προγραμματάκι εκείνο ήταν για να το αποθηκεύσεις και μετά να καλέσεις την odefun.
τώρα έχω άλλο πρόβλημα...

επίσης η ode45 προϋπήρχε...

τέσπα...

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

[t,x]=ode45(@troxies1,[0 20],[4; -48.5]);
s=size(x);
for i=1:s(1)
    if x(i,2)>0
        plot(x(i,1),x(i,2))
        hold on;
    end
end 

όπου 'troxies1' είναι η εξής συνάρτηση: function dx=troxies1(t,x);
m=1;
d=98;
k=49;
dx=[x(2)*sqrt(k/m); -sqrt(k/m)*x(1)/m-d/sqrt(m*k)];

μέχρι τώρα μου βγαίνει τελίτσες τελίτσες. Πώς μπορώ να κάνω plot ένα-ένα τα σημεία και να είναι συνεχής γραμμή;


Title: Re: Εργασίες 2006
Post by: marauber on November 15, 2006, 17:28:15 pm
Εντελώς συνοπτικά:

Για να βγεί συνεχής η γραμμή, αφού κάνεις το plot πήγαινε στο figure που εμφάνισε και ψάξε λίγο τα options. Δε θυμάμαι που ακριβώς είναι, έχει όμως επιλογή να αλλάξεις τις βουλίτσες και να βγαίνει συνεχής γραμμή. Επίσης αυτό γίνεται και αν βάλεις το κατάλληλο όρισμα μέσα στην plot, αν κοιτάξεις το documentation της plot θα το βρεις.

Για το ημικύκλιο δεν είμαι σίγουρος, αλλά νομίζω αν αλλάξεις τα όρια θα βγει.


Title: Re: Εργασίες 2006
Post by: Sidle on November 15, 2006, 21:04:12 pm
Κάνοντας την προσομοίωση στο matlab, δε θες απλά να βγάλεις ένα ημικύκλιο όπως προκύπτει από τη θεωρητική ανάλυση. Θες όλη την τροχιά. Άρα πρέπει να γίνουν τα εξής:

1.Στη συνάρτηση οπου δημιουργείς τις εξισώσεις κατάστασης δεν πρέπει να γίνει διάκριση αλλά να αφήσεις τη sign στη δεύτερη εξίσωση,και
2.Η γραφική παράσταση της τροχιάς θα γίνει με την εντολή plot(x(:,1),x(:,2)) ή plot(x(:,1),x(:,2)/ω).Μοιάζει με σαλιγγάρι.LOL!

Έτσι θα προκύψει τροχιά για τις αρχικές συνθήκες και το χρονικό διάστημα που έδωσες...
Δίνοντας διαφoρετικές αρχικές συνθήκες, θα συνθέσεις το φασικό πορτρέτο (μην ξεχάσεις το hold.Πίστεψέ με δε θες να το ξεχάσεις...).

Και καλά ως εδώ,να ρωτήσω όμως κι εγώ κάτι..Πόση ώρα κάνει η ode45 να σας δώσει αποτελέσματα?
Εγώ για πολύ μικρά χρονικά διαστήματα (tspan=[0 1]...έλεος!!) περιμένω άπειρες ώρες κι αυτό μόνο και μόνο για να διαπιστώσω, απ΄την τροχιά, οτι, στην τελική, η κίνηση δεν εχει ολοκληρωθει.. Τι σοι φασικο πορτρέτο θα γίνει αν πρέπει να περιμένω μέχρι το Δεκέμβρη τα αποτελέσματα?..Μόνο εγώ το'χω το πρόβλημα ή κι άλλοι περιμένουν τόσο?
Α,και με την ode23 τα ίδια σ**τα (sorry κιόλας)...
Καμιά πρόταση...?


Title: Re: Εργασίες 2006
Post by: Tonia on November 16, 2006, 00:27:30 am
όταν έλεγα ημικύκλιο αναφερόμου μόνο στη μία περίπτωση (xdot>0). όπως και να'χει και μένα σα σαλιγκάρι μου βγαίνει, αλλά διακεκομένο. προσπάθησα με διάφορους τρόπους να το διορθώσω, συμπεριλαμβανομένου της plot(x1,x2,'-'), αλλά τίποτα.
όσο για το πόσο γρήγορα το κάνει, εμένα κάνει πολύ λίγο. έχω βάλει το tspan από 0 ως 20 , από 0 ως 100 και από 0 ως 200, και κάνει μερικά δευτερόλεπτα. Ίσως βέβαια να έχω κάνει εγώ κάτι λάθος... Γι αυτό και δυσκολεύομαι να υπολογίσω το 3ο ερώτημα...
ουφ


Title: Re: Εργασίες 2006
Post by: Sidle on November 16, 2006, 10:51:13 am
Κατάλαβα..Είδα τωρα τη συνάρτηση σου και είναι διαφορετική απ'τη δική μου..
Πάντως αυτό που σου είπα για τη sign ισχύει και το είπε και ο Γιάννης την Τρίτη.
Δεν παίρνεις εσύ υποπεριπτώσεις για θετική και αρνητική ταχύτητα.Το κάνει μόνο του το matlab μέσω της sign.


Title: Re: Εργασίες 2006
Post by: Faidon on November 16, 2006, 16:43:29 pm
Με τη sign πρέπει να γίνει, όπως λες. Αλλά θα κάνεις το εξής:

Θα τρέχεις τον κώδικά σου για tspam από 0 έως t, όπου αρχικά t=0.0001. Θα βλέπεις το διάγραμμα. Αν δεν έχει ολοκληρωθεί, θα υπολογίζεις πόσο θέλει ακόμα και θα αυξάνεις το t αντίστοιχα. Έτσι θα εμφανίζεται μεγαλύτερο μέρος της τροχιάς. Αν δεν έχει ολοκληρωθεί θα αυξάνεις το t κ.ο.κ.

Προσοχή, όμως! Αν αυξήσεις το t έστω και λίγο παραπάνω από όσο χρειάζεται για να ολοκληρωθεί η τροχιά θα καθυστερεί το MATLAB απίστευτα. Πιθανότατα επειδή κολάει γύρω από τη θέση ισορροπίας...


Title: Re: Εργασίες 2006
Post by: Sidle on November 16, 2006, 17:59:06 pm
Λοιπόν λύθηκε το πρόβλημα..Με ενημέρωσαν οτι αντι για την ode45 θα χρησιμοποιήσουμε την ode15s και έτσι λύνονται τα προβλήματα καθυστέρησης που δημιουργεί η sign στην ode45..


Title: Re: Εργασίες 2006
Post by: Faidon on December 09, 2006, 18:22:41 pm
Στο ερώτημα βii πως βρίσκουμε μία μοναδική τιμή για το k για την οποία η αρχική τιμή που λέει να ανήκει στο πεδίο έλξης;
Εγώ βρίσκω περιοχή τιμών...

Ασχολήθηκε κανένας με τη δεύτερη εργασία ή την παλεύω μόνος μου;


Title: Re: Εργασίες 2006
Post by: Faidon on December 10, 2006, 00:59:03 am
Έλσα, η εργασία είναι πολύ εποικοδομητική και θα σε συμβούλευα να ασχοληθείς.


Title: Re: Εργασίες 2006
Post by: Faidon on December 10, 2006, 21:11:57 pm
Όπως είπα ελπίζω ότι στο τέλος θα χρειαστεί να διαβάσω λιγότερο...


Title: Re: Εργασίες 2006
Post by: Faidon on January 03, 2007, 19:07:18 pm
Τι καλά... Διακοπούλες... Άνετα!...  ::)

Με την τρίτη εργασία ασχολήθηκε κανένας;;
Στο ερώτημα β τι ακριβώς κάνατε;


Title: Re: Εργασίες 2006
Post by: Tonia on January 29, 2007, 03:30:47 am
Κανείς που να έχει ασχοληθεί με την τέταρτη εργασία και να βρήκε την G(s) υπάρχει?
έστω να δούμε τουλάχιστον ότι λύνεται, γιατί προς το παρόν νομίζω ότι έχει γίνει κάποιο λάθος στην εκφώνηση. (εκτός από την ανακοίνωση που έχει ήδη βγει στο e-thmmy).