THMMY.gr

Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών => Συστήματα Αυτομάτου Ελέγχου ΙΙΙ => Topic started by: SportBillyPap on October 16, 2015, 13:17:20 pm



Title: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: SportBillyPap on October 16, 2015, 13:17:20 pm
Απορίες, ερωτήσεις, κλπ σε σχέση με ασκήσεις του μαθήματος. Stay on topic!



θελω μια βοηθεια απο καποιον που εχει καταλαβει καλα τις ode στο matlab. ελυσα και ειδα τις εξισωσεις απο τις διαφανειες της δουλγερη (για εξοικείωση).Στην συναρτηση με το temperature switch(παραδειγμα 1.5 απο διαφανειες) που γινεται on off αναλογα αν εχει περασει καποιο κατωφλι ειχα ενα προβλημα,δε μπορουσα να γραψω ή να υπολογισω πως να δινω στο ενδιαμεσο σταδιο τιμη αναλογα αν εχει χτυπησει στο πανω η στο κατω κατωφλι..

Code:
function dx=odefun(t,x,flag)

if x<= 21
    dx=30-x;
    
elseif x>=27
    dx=-x;
  
elseif x>= 21 && x<=27 && flag==0
    dx=-x;
elseif x>= 21 && x<=27 && flag==1
    dx=30-x;
end

end

και μετα αυτο
Code:
[a b]=ode45(@(t,x)odefun(t,x,flag),[0 10],16);

που ειναι λαθος πως μπορω να το λυσω?Υπαρχει καποια τιμη που να δινω στο  flag ετσι ωστε να βγαζει σωστη τιμη πχ (χ-21=<0)..


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: Dealan on October 16, 2015, 14:27:57 pm
και μετα αυτο
Code:
[a b]=ode45(@(t,x)odefun(t,x,odefun(t,x,flag),[0 10],16);

Αυτό δεν παίζει να είναι σωστό.  :P

(Το [a b]=ode45('odefun',[0 10],16); θα σου δούλευε σίγουρα, τώρα με το @ δεν θυμάμαι αν αλλάζει κάτι στα τι ορίσματα δίνεις.)


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: SportBillyPap on October 16, 2015, 14:58:54 pm
Αμα γραψεις αυτο [a b]=ode45(@(t,x)odefun(t,x,1),[0 10],16); και κανεις plot(a,b) θα σου βγαλει την εικονα που εχω..

Το οποιο ειναι λαθος ..Γενικα απο οτι καταλαβα η ode καθε φορα την ξανατρεχει με το καινουργιο x που βγαζει απο runge kutta αρα δε θα μπορει να συγκρατει καποια τιμη του flag..Μπορω ομως με καποιο τροπο να γραψω  (x(n)-x(n-1)>0)=flag δλδ να συγκρατησω την προηγουμενη τιμη του x?


edit: double post


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: Exomag on October 16, 2015, 15:51:59 pm
Καταρχάς μην χρησιμοποιείς το όνομα flag, γιατί είναι δεσμευμένη μεταβλητή στη MATLAB και δημιουργεί μεγάλο μπέρδεμα.

Κατά δεύτερον, στον κώδικα που έχεις γράψει δεν μεταβάλλεις πουθενά τη μεταβλητή flag.

Κατά τρίτον, αυτό το πρόβλημα λύνεται είτε με Global Variables είτε με Event Location στον ODE solver που χρησιμοποιείς.


Παραθέτω την "μπακάλικη" λύση με Global Variables (plot στο συνημμένο):
Code:
function heater
    global my_flag
   
    my_flag = 1;
    options = odeset('MaxStep',0.1);
    [t, degrees] = ode45(@odefun,[0 10],16,options);
   
    plot(t,degrees);
    grid
    xlabel('t (sec)')
    ylabel('degrees')
end

function dx = odefun(~,x)
    global my_flag
   
    if x >= 27
        my_flag = 0;
    elseif x < 21
        my_flag = 1;
    end
    dx = 30*my_flag - x;
end


Θα επανέλθω αργότερα για τη 2η (και "πιο σωστή" λύση).


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: SportBillyPap on October 16, 2015, 15:58:11 pm
Οκ ευχαριστω ..φανταστηκα  οτι θα επρεπε να χρησιμοποιησω global μεταβλητες αλλα δεν ηξερα οτι εχει και στο matlab  :) .Εμενα με ικανοποιει και αυτη η μπακαλικη λυση!!


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: Exomag on October 16, 2015, 16:08:30 pm
Οκ ευχαριστω ..φανταστηκα  οτι θα επρεπε να χρησιμοποιησω global μεταβλητες αλλα δεν ηξερα οτι εχει και στο matlab  :) .Εμενα με ικανοποιει και αυτη η μπακαλικη λυση!!

Υπάρχουν και σε MATLAB Global Variables προφανώς, ναι. Γενικά το Event Location είναι πολύ χρήσιμο εργαλείο να το μάθεις/κατέχεις οπότε καλύτερα να του ρίξεις μια ματιά (και λύνει πολλά προβλήματα, κάποια από τα οποία δεν θα μπορείς να λύσεις ούτε με Global Variables).


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: Exomag on October 16, 2015, 16:45:44 pm
Ορίστε και ο κώδικας με Event Location (λίγο προχειρογραμμένος, αλλά τη δουλειά του την κάνει):
Code:
function heater_2
   
    t_start = 0;
    t_final = 10;
    x_start = 16;
    options = odeset('Events',@events,'MaxStep',0.1);
    t = [];
    degrees = [];
    odefun = @odefun_on;

    while true
        [t_temp, degrees_temp, t_ev, degree_ev] = ode45(odefun,[t_start t_final],x_start,options);
        if degree_ev >= 27
            odefun = @odefun_off;
        else
            odefun = @odefun_on;
        end
        t_start = t_ev;
        x_start = degree_ev;
        t = [t ; t_temp];
        degrees = [degrees ; degrees_temp];
        if t(end) >= t_final
            break;
        end
    end
   
    plot(t,degrees);
    grid
    xlabel('t (sec)')
    ylabel('degrees')
end

function dx = odefun_on(~,x)
    dx = 30 - x;
end

function dx = odefun_off(~,x)
    dx = -x;
end

function [ value, isterminal, direction ] = events( ~, x )
    value(1) = x - 21;
    value(2) = 27 - x;
    isterminal(1) = 1;
    isterminal(2) = 1;
    direction(1) = -1;
    direction(2) = -1;
end

Το αποτέλεσμα/plot βρίσκεται στο συνημμένο (είναι ολόιδιο με το plot του κώδικα με Global Variables).


Ρίξτου μια ματιά, αξίζει τον χρόνο που θα σου πάρει να καταλάβεις τι παίζει, πιστεύω ;)


Για πληροφορίες/documentation σχετικά με Event Location, δες εδώ (http://www.mathworks.com/help/matlab/ref/odeset.html#f92-1017470) και εδώ (http://www.mathworks.com/help/matlab/math/ordinary-differential-equations.html#f1-669698).


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: GiannisM on February 13, 2016, 19:26:36 pm
Μπορεί κάποιος να πει ποιές ασκήσεις από το φυλλάδιο γίνανε φέτος στο μάθημα ή αν είπαν να προσέξουμε κάποιες συγκεκριμένες?


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: Exomag on February 13, 2016, 19:40:56 pm
Μπορεί κάποιος να πει ποιές ασκήσεις από το φυλλάδιο γίνανε φέτος στο μάθημα ή αν είπαν να προσέξουμε κάποιες συγκεκριμένες?

Φέτος έγιναν όλες οι ασκήσεις του φυλλαδίου (με εξαίρεση, αν δεν κάνω λάθος, μίας από τις 33).


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: SportBillyPap on February 14, 2016, 17:15:15 pm
Θέμα 3 2011
Θα πρέπει να το φερουμε το σχήμα στη μορφή Popov για να το λύσουμε? Και αν ναι πως?


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: Exomag on February 14, 2016, 17:18:09 pm
Θέμα 3 2011
Θα πρέπει να το φερουμε το σχήμα στη μορφή Popov για να το λύσουμε? Και αν ναι πως?

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


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: sotiristsar on February 15, 2016, 12:01:57 pm
Για το 2ο θέμα του 2009 μπορει κάποιος να βοηθήσει ????
και επισης το θέμα 2ο του 2014 πρόκειται για ευρωστία ????


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: SportBillyPap on February 15, 2016, 13:16:25 pm
Απο προηγουμενο ετος.
https://www.dropbox.com/sh/k54wmgksk50w4re/AADiI8QoBkK0zQqO_VFPEkJja?dl=0


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: sotiristsar on February 15, 2016, 13:21:50 pm
ευχαριστωωωω  ;D ;D


Title: Re: [ΣΑΕ ΙΙΙ] Απορίες στις Ασκήσεις 2015-2016
Post by: Andromedas on February 15, 2016, 20:25:57 pm
Από τις λύσεις θέμα 2014 2) για το κριτήριο δίσκου για την 2) προϋπόθεση ελάχιστης υλοποίησης είναι αυτονόητη ; Και εάν ναι γιατί;
Απο προηγουμενο ετος.
https://www.dropbox.com/sh/k54wmgksk50w4re/AADiI8QoBkK0zQqO_VFPEkJja?dl=0