THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => Matlab, Mathematica, Octave, EngLab κλπ => Topic started by: K on November 13, 2017, 18:46:57 pm



Title: Βοήθεια στο Matlab
Post by: K on November 13, 2017, 18:46:57 pm
Kαλησπέρα,

Γνωρίζει κάποιος πώς μπορώ να απεικονίσω πολλαπλές γραφικές παραστάσεις που έχω ήδη αποθηκευμένες, σε κοινό διάγραμμα;

Θέλω πολλαπλά αρχεία .fig να τα ενώσω-απεικονίσω μαζί.


Title: Re: Βοήθεια στο Matlab
Post by: mpraskafoutas on November 13, 2017, 18:58:01 pm
με τη συναρτηση legend(),αν καταλαβα καλα αυτο που θες να κανεις

συγκεκριμένα σχεδιάζεις ο,τι χρειαζεσαι με την plot(),μετά γράφεις hold on και στο τέλος legend(μεταβλητες στο κοινο διαγραμμα).


Title: Re: Βοήθεια στο Matlab
Post by: iason1907 on November 13, 2017, 19:02:24 pm
Αν εννοείς πολλές γραφικές παραστάσεις στο ίδιο plot τότε τα βάζεις στην σειρά:

plot(x1,y1,...,xn,yn)

Και με την legend μπορείς να βάλεις πινακακι με πληροφορίες για την κάθε μια με τον ίδιο τρόπο


Title: Re: Βοήθεια στο Matlab
Post by: K on November 13, 2017, 19:03:43 pm
Σας ευχαριστώ για τις απαντήσεις.

Θέλω πολλαπλά αρχεία .fig (ήδη αποθηκευμένα) να τα ενώσω-απεικονίσω μαζί.


Title: Re: Βοήθεια στο Matlab
Post by: K on November 13, 2017, 19:12:06 pm
με τη συναρτηση legend(),αν καταλαβα καλα αυτο που θες να κανεις

συγκεκριμένα σχεδιάζεις ο,τι χρειαζεσαι με την plot(),μετά γράφεις hold on και στο τέλος legend(μεταβλητες στο κοινο διαγραμμα).

Πως θα plotάρω αποθηκευμένα αρχεία .fig; 


Title: Re: Βοήθεια στο Matlab
Post by: iason1907 on November 13, 2017, 19:13:32 pm
θα ανοίξεις τα .fig και μετά διαδοχικά για τα Ν figures
L=findobj(i,'type','line');
copyobj(L,findobj(Ν,'type','axes'))

i από 1 μέχει Ν-1

ή έτσι:
fh1 = open('f1.fig');
fh2 = open('f2.fig');
ax1 = get(fh1, 'Children');
ax2 = get(fh2, 'Children');
ax2p = get(ax2(1),'Children');
copyobj(ax2p, ax1(1));


μπορείς επίσης με τον κέρσορα να επιλέγεις την γραμή σε κάθε πλοτ και με copy paste να την πηγαίνεις στο άλλο


Title: Re: Βοήθεια στο Matlab
Post by: K on November 13, 2017, 19:16:11 pm
θα ανοίξεις τα .fig και μετά διαδοχικά για τα Ν figures
L=findobj(i,'type','line');
copyobj(L,findobj(Ν,'type','axes'))

i από 1 μέχει Ν-1

ή έτσι:
fh1 = open('f1.fig');
fh2 = open('f2.fig');
ax1 = get(fh1, 'Children');
ax2 = get(fh2, 'Children');
ax2p = get(ax2(1),'Children');

μπορείς επίσης με τον κέρσορα να επιλέγεις την γραμή σε κάθε πλοτ και με copy paste να την πηγαίνεις στο άλλο
copyobj(ax2p, ax1(1));

Σ' ευχαριστώ . :)


Title: Re: Βοήθεια στο Matlab
Post by: K on November 13, 2017, 21:17:56 pm


ή έτσι:
fh1 = open('f1.fig');
fh2 = open('f2.fig');
ax1 = get(fh1, 'Children');
ax2 = get(fh2, 'Children');
ax2p = get(ax2(1),'Children');
copyobj(ax2p, ax1(1));




Αυτό δε δούλεψε.


Για το πρώτο θες να γράψεις ένα παράδειγμα αν π.χ 2 αρχεία .fig λέγονται ex1.fig και ex2.fig .


Title: Re: Βοήθεια στο Matlab
Post by: iason1907 on November 13, 2017, 22:30:03 pm
Αυτό δε δούλεψε.


Για το πρώτο θες να γράψεις ένα παράδειγμα αν π.χ 2 αρχεία .fig λέγονται ex1.fig και ex2.fig .
Μπορείς να κάνεις το εξής. Να ανοίξεις με διπλό κλικ τα .fig. Στην matlab θα δεις ότι στο παράθυρο που ανοίγουν γράφει Figure N.
To N αυτό είναι ο αριθμός που θα πρέπει να αντικαταστήσεις

figure(1)
plot(rand(1,100))
figure(2)
plot(rand(1,100),'r')
L=findobj(1,'type','line');
copyobj(L,findobj(2,'type','axes'))


Title: Re: Βοήθεια στο Matlab
Post by: mpraskafoutas on November 13, 2017, 22:36:09 pm
το θες για την εργασία στις ψηφιακές 2;

αν ναι,γιατί να ανοίξεις τα αρχεία .fig σε κοινό διάγραμμα;



Title: Re: Βοήθεια στο Matlab
Post by: mpraskafoutas on November 13, 2017, 22:40:59 pm
ψάξε και στο σαιτ της mathworks αν θες

https://www.mathworks.com/help/matlab/ref/openfig.html (https://www.mathworks.com/help/matlab/ref/openfig.html)


Title: Re: Βοήθεια στο Matlab
Post by: K on November 14, 2017, 14:56:41 pm
το θες για την εργασία στις ψηφιακές 2;

αν ναι,γιατί να ανοίξεις τα αρχεία .fig σε κοινό διάγραμμα;



Και στην 1.2 και στην 1.3 ζητείται 1 συγκριτικό διάγραμμα των τριών BER καμπυλών.

Ποστάρω ένα σκριπτ που κάνει τη δουλειά:
figure;
X1=snrNoneInterleaverNo;
Y1=berNoneInterleaverNo;
semilogy (X1,Y1);
hold on
X2=snrRS239InterleaverNo;
Y2=berRS239InterleaverNo;
semilogy (X2,Y2);
hold on
X3=snrRS223InterleaverNo;
Y3=berRS223InterleaverNo;
semilogy (X3,Y3);


Title: Re: Βοήθεια στο Matlab
Post by: mpraskafoutas on November 15, 2017, 00:30:48 am
Και στην 1.2 και στην 1.3 ζητείται 1 συγκριτικό διάγραμμα των τριών BER καμπυλών.

Ποστάρω ένα σκριπτ που κάνει τη δουλειά:
figure;
X1=snrNoneInterleaverNo;
Y1=berNoneInterleaverNo;
semilogy (X1,Y1);
hold on
X2=snrRS239InterleaverNo;
Y2=berRS239InterleaverNo;
semilogy (X2,Y2);
hold on
X3=snrRS223InterleaverNo;
Y3=berRS223InterleaverNo;
semilogy (X3,Y3);


αυτό ισχύει που λες

γενικά τα .fig δεν τα πειραζεις,είναι graphic tools (συγκεκριμένα στην εργασία δημιουργούν τις εικόνες που εκτυπώνονται)

η semilogy() ταιριάζει γιατι αυτή η εξάρτηση υπάρχει μεταξύ της πιθανότητας σφάλματος συμβόλου και του SNR

btw και γω έψαχνα πως να τα απεικονίσω,γι'αυτό με μπέρδεψες με τα .fig αρχεία


Title: Re: Βοήθεια στο Matlab
Post by: iason1907 on November 15, 2017, 00:49:02 am
ok. το hold on μια φορά φτάνει σε κάθε figure. Αν το περιέγραφες λίγο καλύτερα θα ήταν και πιο γρήγορη η λύση. :p
Με .fig εγώ κατάλαβα ότι από κάπου είχες πολλά αποθηκευμένα figures και ήθελες να τα ενώσεις.


Title: Re: Βοήθεια στο Matlab
Post by: mpraskafoutas on November 15, 2017, 01:29:03 am
ok. το hold on μια φορά φτάνει σε κάθε figure. Αν το περιέγραφες λίγο καλύτερα θα ήταν και πιο γρήγορη η λύση. :p
Με .fig εγώ κατάλαβα ότι από κάπου είχες πολλά αποθηκευμένα figures και ήθελες να τα ενώσεις.

γι'αυτό το θέμα είδα κάπου ότι μπορείς να τα αποθηκεύσεις ως ΜΑΤLAB figure files (αντί για απλά .fig αρχεία) και να τα απεικονίσεις κανονικά


Title: Re: Βοήθεια στο Matlab
Post by: mpraskafoutas on November 15, 2017, 19:00:20 pm
Και στην 1.2 και στην 1.3 ζητείται 1 συγκριτικό διάγραμμα των τριών BER καμπυλών.

Ποστάρω ένα σκριπτ που κάνει τη δουλειά:
figure;
X1=snrNoneInterleaverNo;
Y1=berNoneInterleaverNo;
semilogy (X1,Y1);
hold on
X2=snrRS239InterleaverNo;
Y2=berRS239InterleaverNo;
semilogy (X2,Y2);
hold on
X3=snrRS223InterleaverNo;
Y3=berRS223InterleaverNo;
semilogy (X3,Y3);

αυτό το γράφεις στο command line ενώ τρέχει το start.m;


Title: Re: Βοήθεια στο Matlab
Post by: K on November 15, 2017, 19:11:36 pm
Ανοίξε νέο παράθυρο για script και γράψ' το.

Πρέπει τις μεταβλητές να τις έχεις ήδη αποθηκεύσει.




Title: Re: Βοήθεια στο Matlab
Post by: mpraskafoutas on November 15, 2017, 19:59:57 pm
Ανοίξε νέο παράθυρο για script και γράψ' το.

Πρέπει τις μεταβλητές να τις έχεις ήδη αποθηκεύσει.




ωραίος,θα το δοκιμάσω


Title: Re: Βοήθεια στο Matlab
Post by: s0r0n on May 18, 2018, 16:33:51 pm
Έχω 2 πίνακες 3*1 kai 2*1. Θελω μετα απο καθε επαναληψη να ελεγχω καθε στοιχειο καθε πινακα με εναν αριθμο, πχ e, και αν ολα τα στοιχεια ειναι <e τοτε να βγαινω απο τη while. Μου βγαζει ομως συνεχεια error. Θα ηθελα επισης να το κανω με if (statement) και break και οχι με καποια for.


Title: Re: Βοήθεια στο Matlab
Post by: Ancient on May 18, 2018, 16:47:01 pm
Αν B ο πίνακας τότε:

if ~sum( B( : )>=e )
  break;
end


Title: Re: Βοήθεια στο Matlab
Post by: MrRobot on May 18, 2018, 16:49:03 pm
Ή μπορείς να γράψεις

if any(B >= e)
   *do stuff*
end


Title: Re: Βοήθεια στο Matlab
Post by: Ancient on May 18, 2018, 16:56:50 pm
Ή και:

if all( B( : ) <e)
   break;
end

 :P


Title: Re: Βοήθεια στο Matlab
Post by: s0r0n on May 18, 2018, 17:08:28 pm
 Τελικά η εντολή είναι :

 if any(C>e)==0 && any(D>e)==0
        break;
    end

Ευχαριστώ πολύ για τις απαντήσεις.