Προς το περιεχόμενο

Ευθεία γραμμή στο Matlab.


kostasKJ7

Προτεινόμενες αναρτήσεις

Δημοσ.

Χαίρεται αγαπητοί φίλοι,

Έχω μία άσκηση στην οποία έχω δύο πληθυσμούς και έφτιαξα τον παρακάτω κώδικα.

 

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 το έβαλα στον παραπάνω κώδικα.

Εγώ όμως θέλω να χωρίσω τους δύο πληθυσμούς πέρα για πέρα.

Τι εντολή πρέπει να προσθέσω;

Δημοσ.

Φίλε μου με κάθε επιφύλαξη, γιατί δε θυμάμαι πολύ καλά την τριγωνομετρία, δοκίμασε το παρακάτω

 

>
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;

 

 

Νομίζω ότι μπορεί να σου κάνει.

Δημοσ.

Φίλε Μπάμπη ευχαριστώ για την απάντηση σου.

Αν πρόσεξες όταν το έτρεξες μερικά πράσινα είναι από την άλλη πλευρά.(δλδ μαζί με τα κόκκινα)

Από το κώδικα που μου έστειλες πια παράμετρο πρέπει να αλλάξω για να μετακινώ την ευθεία είτε έτσι είτε από την ανάποδη διαγώνιο;

Δημοσ.

Για να χωρίζονται οι δύο πληθυσμοί σου αυτόματα για δοκίμασε να προσθέσεις αυτό στο τέλος του .m file σου και πες μου αν σου κάνει.

 

>
line([ceil(max(x2)) ceil(max(x2))],[floor((min(x22)+min(x11)/2)) ceil((max(x22)+max(x11))/2)])

 

:-)

Δημοσ.

Για δοκίμασε το ξανά και πες μου.

 

>
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)])

 

:-)

Δημοσ.

Το είδα ότι κάποια ήταν από την άλλη πλευρά, αλλά νόμιζα ότι δε θα έχεις πρόβλημα.

 

Δοκίμασε αντί για αυτό

xm = (mean(x1) + mean(x2))/2;

 

Αυτό

xm = (min(x1) + max(x2))/2;

 

Οπότε θα παίρνεις σαν σημεία αναφοράς τα άκρα των δύο πληθυσμών

αντί τα μέσα.

 

Πάντως με τον πολύ πιο κομψό κώδικα του Dr. Fuzzy, παίρνεις μία όμορφη

κατακόρυφη ανάμεσα στους πλυθησμούς και είσαι οκ!

Δημοσ.

Καλημέρα,

Dr. Fuzzy, αυτό βγάζει μία κατακόρυφη, αν οι δύο πληθυσμοί έρθουν πιο κοντά όμως τότε δεν μπορεί να ισχυεί η κατακόρυφη αλλά η διαγώνιος. Πρέπει να είναι της μορφής y=a*x+b.

Δημοσ.
Καλημέρα,

Dr. Fuzzy, αυτό βγάζει μία κατακόρυφη, αν οι δύο πληθυσμοί έρθουν πιο κοντά όμως τότε δεν μπορεί να ισχυεί η κατακόρυφη αλλά η διαγώνιος. Πρέπει να είναι της μορφής y=a*x+b.

 

Κάνε help line να δεις πως δουλεύει. Την ευθεία την ορίζεις με x1,x2, y1,y2 και όχι με το gradient και το y-intercept (a και B). Μπορείς πολύ εύκολα να τροποποιήσεις τον κώδικα που σου έδωσα και να συμπεριλάβεις διάφορες περιπτώσεις ευθείας ανάλογα με τα δεδομένα των πληθυσμών σου. Οριζόντια. κατακόρυφη, διαγώνια με διάφορες κλίσεις κλπ.

 

:-)

  • 3 εβδομάδες αργότερα...
Δημοσ.

Καλημέρα σας,

Επανέρχομαι σε αυτό το θέμα για να σας δείξω την ευθεία γραμμή που δημιούργησα και να σας ρωτήσω κάτι:

 

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 δημιουργώ τις τρεις διαστάσεις αλλά οι πληθυσμοί παραμένουν ως έχουν. Πως μπορώ να δώσω και σε αυτούς τρεις διαστάσεις;

Αρχειοθετημένο

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

  • Δημιουργία νέου...