almond Δημοσ. 12 Μαρτίου 2008 Δημοσ. 12 Μαρτίου 2008 % έστω ότι έχουμε ένα διάνυσμα 0:Χ. Στόχος μου είναι να φτιάξω % ένα διάνυσμα από 0 εως Χ του οποίου το κάθε στοιχείο θα επαναλαμβάνεται % τόσες φορές όσες είναι και το μήκος του 0 εως Χ στο τετράγωνο. % Για παράδειγμα αν το αρχικό μου διάνυσμα είναι 0:2 τότε θέλω να φτιάξω % διάνυσμα από 0 εως 2 του οποίου το κάθε στοιχείο (δηλ. τα 0,1,2) θα % επαναλαμβάνεται τόσες φορές όσες και το μήκος του 0:2 στο τετράγωνο (δηλ. % 3^2 = 9) % Ο παρακάτω κώδικας δουλεύει μόνο για το διάνυσμα 0:2 και προφανώς δεν % είναι και ιδιαίτερα αποδοτικός πχ. για 0:30. % Έχετε καμιά ιδέα για το πως μπορεί να βελτιωθεί; % ευχαριστώ! > clear, clc vector = (0:2)' [a,b] = size(vector) c = a^3 d = a^2 vector1 = zeros(c,1) for i = 1:c if i <= 9 vector1(i) = vector(1); continue elseif i > 9 && i <= 18 vector1(i) = vector(2); continue elseif i > 18 && i <= 27 vector1(i) = vector(3); continue end end
BadGuy Δημοσ. 12 Μαρτίου 2008 Δημοσ. 12 Μαρτίου 2008 % έστω ότι έχουμε ένα διάνυσμα 0:Χ. Στόχος μου είναι να φτιάξω % ένα διάνυσμα από 0 εως Χ του οποίου το κάθε στοιχείο θα επαναλαμβάνεται % τόσες φορές όσες είναι και το μήκος του 0 εως Χ στο τετράγωνο. % Για παράδειγμα αν το αρχικό μου διάνυσμα είναι 0:2 τότε θέλω να φτιάξω % διάνυσμα από 0 εως 2 του οποίου το κάθε στοιχείο (δηλ. τα 0,1,2) θα % επαναλαμβάνεται τόσες φορές όσες και το μήκος του 0:2 στο τετράγωνο (δηλ. % 3^2 = 9) % Ο παρακάτω κώδικας δουλεύει μόνο για το διάνυσμα 0:2 και προφανώς δεν % είναι και ιδιαίτερα αποδοτικός πχ. για 0:30. % Έχετε καμιά ιδέα για το πως μπορεί να βελτιωθεί; % ευχαριστώ! > clear, clc vector = (0:2)' [a,b] = size(vector) c = a^3 d = a^2 vector1 = zeros(c,1) for i = 1:c if i <= 9 vector1(i) = vector(1); continue elseif i > 9 && i <= 18 vector1(i) = vector(2); continue elseif i > 18 && i <= 27 vector1(i) = vector(3); continue end end Φίλε almond μπορείς να κάνεις το loop κάπως έτσι για να δουλεύει γενικά a=size(vector); i=z=1; c=a*a; while ( i <= c ) vector(i) = vector(z); i++; if ( i == (z*a) ) z=z+1; end end Ελπίζω να δουλεύει αυτό που σου έγραψα.Δυστυχώς δεν μπορώ να το ελέγξω γιατί είμαι στη σχολή και το pc που κάθομαι δεν έχει matlab.Ελπίζω τουλάχιστον να κατάλαβες την ιδέα.Αν μπορώ να σε βοηθήσω περαιτέρω ευχαρίστως.
almond Δημοσ. 12 Μαρτίου 2008 Μέλος Δημοσ. 12 Μαρτίου 2008 ευχαριστώ για την απαντησή σου BadGuy, και πρόσθεσα τις δύο πρώτες σειρές (για τον ορισμό του 'vector' και του 'a'). Ως 'z' τι ορίζεις ; και Στην σειρά του 'i++' μήπως αυτός είναι συμβολισμός για C ή κάτι παρόμοιο; νέος βλέπεις στον προγραμματισμό ευχαριστώ >vector = (0:2)' [a,b] = size(vector) i=z=1; c=a*a; while ( i <= c ) vector(i) = vector(z); i++; if ( i == (z*a) ) z=z+1; end end
BadGuy Δημοσ. 12 Μαρτίου 2008 Δημοσ. 12 Μαρτίου 2008 ευχαριστώ για την απαντησή σου BadGuy,και πρόσθεσα τις δύο πρώτες σειρές (για τον ορισμό του 'vector' και του 'a'). Ως 'z' τι ορίζεις ; και Στην σειρά του 'i++' μήπως αυτός είναι συμβολισμός για C ή κάτι παρόμοιο; νέος βλέπεις στον προγραμματισμό ευχαριστώ >vector = (0:2)' [a,b] = size(vector) i=z=1; c=a*a; while ( i <= c ) vector(i) = vector(z); i++; if ( i == (z*a) ) z=z+1; end end Το z το χρησιμοποιώ για να περνάς στο νέο διάνυσμα που φτιάχνεις το στοιχείο που υπάρχει στο αρχικό διάνυσμα(vector) στη θέση z.Προσπαθώ να το κάνω κάπως αλγοριθμικά αντί να βάζεις vector(1), vector(2) κλπ.Βέβαια επαναλαμβάνω ότι δεν έχω τρέξει τον κώδικα να δω αν δουλεύει οπότε δεν σου εγγυώμαι!!Όσο για το i++ παρασύρθηκα από τη C!!Βλέπεις η συνήθεια δεν ξεχνιέται!!! Και δεν είναι όλοι στην αρχή master στον προγραμματισμό(και εγώ τώρα μαθαίνω).Practice makes perfect!!!Ελπίζω να βοήθησα!!!Για οτιδήποτε άλλο το συζητάμε!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.