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

Προβλημα matlab...


Legolas

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

Δημοσ.

εχω ενα προβλημα

ενα ενα πινακα που με τον αριθμο 1 ειναι οι αντρες και το 2 γυναικες... κ διπλα εχει βαρος...π.χ

 

 

1 56

1 50

2 72

2 55

1 34

2 56

 

θελω να εμφανισω σε μια plot, με κοκκινο χρωμα τα βαρη των αντρων και με μπλε των γυναικων...

καμια βοηθεια ? πρεπει να αποθηκευσω σε ενα πινακα τους αντρες ξεχωριστα και τις γυναικες αλλου αλλα πως γινεται ?

Δημοσ.

πολύ αδύνατους άντρες έχεις :D

 

>

sample = [1  56
1  50
2  72
2  55
1  34
2  56];

ind_male = find(sample(:,1)==1);
male = sample(ind_male,2);

ind_female =  find(sample(:,1)==2);
female = sample(ind_female,2);

figure, hold on
plot(male,'b')
plot(female,'r')
hold off

 

Υπάρχει και μία ελαφρά γρηγορότερη λύση, αλλά αυτή είναι πιο κατανοητή.

Δημοσ.

ειναι αδυνατα ειναι παιδια δημοτικου ενω τα κοριτσια λυκειου χαχαχ

ευχαριστω πολυ, το εβγαλα και με αλλο τροπο αλλα θα κρατησω το δικο σου

να σου πω μιας και εισαι καλος.....

θελω να γραψω μια συναρτηση σε m.file και αφου του δινω τα στοιχεια του πινακα να μου επιστρεφει το δευτερο μεγαλυτερο

(θα δινω διαφορετικα στοιχεια καθε φορα, δεν ειναι δεδομενα δηλαδη απο την αρχη)

Δημοσ.

1. αυτό που θες να κάνεις γενικά ονομάζεται function, διαβάζεις εδώ και πράττεις, είναι εύκολο. Τυχούσες απορίες τις ρωτάς εδώ.

 

2. ειδικά δεν κατάλαβα τι θες να κάνεις. Το ζητούμενο είναι η δεύτερη υψηλότερη τιμή βάρους;

 

Αν ναι, χρησιμοποίησε τη sort με descending και στο αποτέλεσμα της να παίρνεις τη δεύτερη τιμή.

 

Και πάλι τις απορίες σου, τις ρωτάς εδώ.

 

Θαυμασμός: 72 κιλά η 16χρονη;;; Μάνα της τα μαστάρια της...

 

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

Δημοσ.

οχι καμια σχεση με το πρωτο ερωτημα μου

 

θελω την ενολη για το m file ωστε οταν το φτιαξω να δηλωνω απο το matlab το πινακα και να εμφανιζει το δευτερο μικροτερο...σαν να λεμε "δηλωσε πινακα" και να δηλωνω εγω 5 8 25 1 4 87 κλπ κλπ και να εμφανιζει το 4 αφου ειναι ο δευτερος μικροτερος

τη συνεχεια την ξερω

μετα παταω

y=unique(x) x ειναι ο πιναακας...οποτε ο πινακας φτιαχτηκε απο το μικροτερο στο μεγαλυτερο...

κ κανω y(1,2) και εμφανιζεται ο δευτερο μικροτερος

Δημοσ.

Στον φάκελο που εργάζεσαι, θα σώσεις αυτό που είναι μέσα στα code με όνομα:

ntirintahata.m

 

>
function [output] = ntirintahata(A)

A = sort(A);

output = A(2);

 

Μετά, πρέπει να βάζεις έναν array (μονοδιάστατος πίνακας) Α με τα δεδομένα σου και θα καλεις την ntirintahata, όπως όποια άλλη εντολή της matlab.

Δημοσ.

Το σωστό είναι με [...]

 

>ntirintahata([5 7 34 95 1 5 65 24])

 

Εγώ θα το έγραφα ως

 

>Α = [5 7 34 95 1 5 65 24]
Β = ntirintahata(Α)

 

Αν δεν πεις και τι σφάλμα βγάζει, δε γίνεται να βοηθήσουμε.

Δημοσ.

ναι εχεις δικιο... ξεχναγα τις αγκυλες...δουλευει αδερφιαααααααααααααα

ευχαριστω πολυ...κανενας οδηγος για αρχαριους υπαρχει σε pdf ελληνικα?

Δημοσ.

οχι καμια σχεση με το πρωτο ερωτημα μου

 

θελω την ενολη για το m file ωστε οταν το φτιαξω να δηλωνω απο το matlab το πινακα και να εμφανιζει το δευτερο μικροτερο...σαν να λεμε "δηλωσε πινακα" και να δηλωνω εγω 5 8 25 1 4 87 κλπ κλπ και να εμφανιζει το 4 αφου ειναι ο δευτερος μικροτερος

 

 

Αυτό που ζητάς μπορείς να το κάνεις με τον εξής κώδικα:

 

>function A = testF(varargin)

 A = [];

 for i = 1:length(varargin)
     A = [A varargin{i}];
 end

 A = sort(A);
 A = A(2);

end

 

Λειτουργεί και με τις εξής εντολές:

 

>
A = [1 2 3];
B = [5 6 7];
C = [8 9 10];

S = testF(A, B, C)

 

 

Αλλά και με:

 

>
S = testF(10, 5, 11, 20, 32)

Δημοσ.

αντι για sort εβαλα unique το ιδιο βγσζει...

για να βρω τον δευτερο μεγιστο υπαρχει εντολη που να το βαζει απο μεγαλυτερο σε μικροτερο ?

Δημοσ.

αντι για sort εβαλα unique το ιδιο βγσζει...

για να βρω τον δευτερο μεγιστο υπαρχει εντολη που να το βαζει απο μεγαλυτερο σε μικροτερο ?

 

Τι εννοείς που να το βγάζει από μεγαλύτερο σε μικρότερο; Αυτό ακριβώς κάνει η sort. Ταξινομεί τα δεδομένα κατά αύξουσα ή φθίνουσα σειρά. Δεν ξέρω εάν λειτουργεί το indexing κατευθείαν στη sort, δλδ:

 

(sort(a))(2)

 

Που δεν το κόβω... χλωμό το βρίσκω. Μία δοκιμή θα σε πείσει όμως.

Δημοσ.

οκ σε ευχαριστω πολυ αρχηγε...

κατι αλλο τωρα...

εχω ενα πινακα με 100 στοιχεια κ θελω να βρω το μικροτερο αριθμο(ο πινακας περιεχει τα βάρη των μαθητων)

εχω γραψει λοιπον

 

y=length(A) (A o πινακας με τα στοιχεια για να βρω ποσα στοιχεια εχει και μετα)

for i=1:1:y

data(y+1,3)=500; (εθεσα ενα μεγαλο αριθμο γτ αποκλειται ενας μαθητης να ειναι 500 κιλα αρα αποκλιεται να γινει ελαχιστο βαροσ αυτο)

if data(i,3)< data(i+1,3) (το 3 ειναι επιδη τα βάρη βρισκοντε στη τριτη στηλη)

elaxBar= data(i,3)

end

 

ειναι λαθος το ξερω επειδη μου εμφανιζει καθε φορα ολα τα βαρη σαν elaxBar

 

 

******edit

βρηκα τις εντολες max(x) και min(x) που δινουν κατευθειαν το μεγιστο κ ελαχιστο....

αλλος τροπος υπαρχει ομως? (κανω ασκηση κ ρωταω σε περιπτωση που ρωτησουν...)

Δημοσ.

Min_weight=1e6;

y=length(A);

for I=1:y

if data(I,3)<Min_weight

Min_weight=data(I,3);

end

end

 

Πάντως δεν είναι καλό να χρησιμοποιείς την matlab με αυτό τον τρόπο. Είναι πολύ αργή. Όταν υπάρχει ενσωματομενη συνάρτηση για αυτή τη δουλεία, να τη χρησιμοποιείς.

Δημοσ.

ευχαριστω πολυ....

το εκανα με max και min

 

κατι τελευταιο γιατι σας ζαλισα κιολας....

 

εχω δυο πινακες

ενας που εχει αριθμους μικροτερους του 100 κ εναν που εχει και μικροτερους κ μεγαλυτους του εκατο...(αυτα σε ενα αρχειο *.mat)

θελω οταν οι αριθμοι ειναι μικροτεροι του εκατο να βγαζει αποτελεσμα 0

ενω οταν ειναι μεγαλυτεροι του εκατο να βγαζει τον μεγαλυτερο αριθμο που ειναι μικροτερος του 100

δηλαδη σε ενα π.χ [ 23 102 54 75 34 125 345] να εμφανισει το 75

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

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

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