kostasKJ7 Δημοσ. 21 Οκτωβρίου 2009 Δημοσ. 21 Οκτωβρίου 2009 Χαίρεται αγαπητοί φίλοι, Έχω μία άσκηση στην οποία έχω δύο πληθυσμούς και έφτιαξα τον παρακάτω κώδικα. x1=0.1*randn(1000,1)+5; x11=0.5*randn(1000,1)+1; x2=randn(1000,1); x22=0.5*randn(1000,1); plot(x1,x11,'r');hold on; plot(x2,x22,'go') Για να φτιάξω μία γραμμή στην οποία θα χωρίζω τους δύο πληθυσμούς θα είναι λογικά της μορφής y=ax+b?Θα βάλω την εντολή getline;Πως θα γίνει αυτό; Για παράδειγμα πήγα με τον απλό τρόπο φτιάχνοντας x=[0:0.5:6]; y=1.3*x+3.78; plot (x,y) και με ένα hold on το έβαλα στον παραπάνω κώδικα. Εγώ όμως θέλω να χωρίσω τους δύο πληθυσμούς πέρα για πέρα. Τι εντολή πρέπει να προσθέσω;
bab1s Δημοσ. 21 Οκτωβρίου 2009 Δημοσ. 21 Οκτωβρίου 2009 Φίλε μου με κάθε επιφύλαξη, γιατί δε θυμάμαι πολύ καλά την τριγωνομετρία, δοκίμασε το παρακάτω > clear all; close all; clc; x1=0.1*randn(1000,1)+5; y1=0.5*randn(1000,1)+1; x2=randn(1000,1); y2=0.5*randn(1000,1); plot(x1,y1,'r'); hold on; plot(x2,y2,'go'); xm = (mean(x1) + mean(x2))/2; ym = (mean(y1) + mean(y2))/2; degrees = (xm/ym)*180/pi + 180; a = tan(degrees*pi/180); b = ym - a*xm; x = 0:int32(max(x1)); y = a*x + b; plot(x, y); hold off; Νομίζω ότι μπορεί να σου κάνει.
kostasKJ7 Δημοσ. 21 Οκτωβρίου 2009 Μέλος Δημοσ. 21 Οκτωβρίου 2009 Φίλε Μπάμπη ευχαριστώ για την απάντηση σου. Αν πρόσεξες όταν το έτρεξες μερικά πράσινα είναι από την άλλη πλευρά.(δλδ μαζί με τα κόκκινα) Από το κώδικα που μου έστειλες πια παράμετρο πρέπει να αλλάξω για να μετακινώ την ευθεία είτε έτσι είτε από την ανάποδη διαγώνιο;
Dr.Fuzzy Δημοσ. 21 Οκτωβρίου 2009 Δημοσ. 21 Οκτωβρίου 2009 Για να χωρίζονται οι δύο πληθυσμοί σου αυτόματα για δοκίμασε να προσθέσεις αυτό στο τέλος του .m file σου και πες μου αν σου κάνει. > line([ceil(max(x2)) ceil(max(x2))],[floor((min(x22)+min(x11)/2)) ceil((max(x22)+max(x11))/2)])
Dr.Fuzzy Δημοσ. 22 Οκτωβρίου 2009 Δημοσ. 22 Οκτωβρίου 2009 Για δοκίμασε το ξανά και πες μου. > x1=0.1*randn(1000,1)+5; x11=0.5*randn(1000,1)+1; x2=randn(1000,1); x22=0.5*randn(1000,1); plot(x1,x11,'r');hold on; plot(x2,x22,'go') axisLimits = axis; line([max(x2)+0.5 max(x2)+0.5],[axisLimits(3) axisLimits(4)])
bab1s Δημοσ. 22 Οκτωβρίου 2009 Δημοσ. 22 Οκτωβρίου 2009 Το είδα ότι κάποια ήταν από την άλλη πλευρά, αλλά νόμιζα ότι δε θα έχεις πρόβλημα. Δοκίμασε αντί για αυτό xm = (mean(x1) + mean(x2))/2; Αυτό xm = (min(x1) + max(x2))/2; Οπότε θα παίρνεις σαν σημεία αναφοράς τα άκρα των δύο πληθυσμών αντί τα μέσα. Πάντως με τον πολύ πιο κομψό κώδικα του Dr. Fuzzy, παίρνεις μία όμορφη κατακόρυφη ανάμεσα στους πλυθησμούς και είσαι οκ!
kostasKJ7 Δημοσ. 22 Οκτωβρίου 2009 Μέλος Δημοσ. 22 Οκτωβρίου 2009 Καλημέρα, Dr. Fuzzy, αυτό βγάζει μία κατακόρυφη, αν οι δύο πληθυσμοί έρθουν πιο κοντά όμως τότε δεν μπορεί να ισχυεί η κατακόρυφη αλλά η διαγώνιος. Πρέπει να είναι της μορφής y=a*x+b.
Dr.Fuzzy Δημοσ. 22 Οκτωβρίου 2009 Δημοσ. 22 Οκτωβρίου 2009 Καλημέρα,Dr. Fuzzy, αυτό βγάζει μία κατακόρυφη, αν οι δύο πληθυσμοί έρθουν πιο κοντά όμως τότε δεν μπορεί να ισχυεί η κατακόρυφη αλλά η διαγώνιος. Πρέπει να είναι της μορφής y=a*x+b. Κάνε help line να δεις πως δουλεύει. Την ευθεία την ορίζεις με x1,x2, y1,y2 και όχι με το gradient και το y-intercept (a και . Μπορείς πολύ εύκολα να τροποποιήσεις τον κώδικα που σου έδωσα και να συμπεριλάβεις διάφορες περιπτώσεις ευθείας ανάλογα με τα δεδομένα των πληθυσμών σου. Οριζόντια. κατακόρυφη, διαγώνια με διάφορες κλίσεις κλπ.
kostasKJ7 Δημοσ. 9 Νοεμβρίου 2009 Μέλος Δημοσ. 9 Νοεμβρίου 2009 Καλημέρα σας, Επανέρχομαι σε αυτό το θέμα για να σας δείξω την ευθεία γραμμή που δημιούργησα και να σας ρωτήσω κάτι: x1=randn(1000,1); y1=randn(1000,1); x2=randn(1000,1)+5; y2=randn(1000,1)+5; plot(x1,y1,'r*'); hold on; plot(x2,y2,'go') x=[-2:0.5:4]; y=-3*x+10; plot(x,y) grid Τώρα το θέμα μου είναι πως να απεικονίσω αυτούς τους πληθυσμούς (κόκκινο και πράσινο) σε τρισδιάστατους. Με την εντολή plot3 δημιουργώ τις τρεις διαστάσεις αλλά οι πληθυσμοί παραμένουν ως έχουν. Πως μπορώ να δώσω και σε αυτούς τρεις διαστάσεις;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.