CHRIS_MALL Δημοσ. 15 Ιουνίου 2005 Δημοσ. 15 Ιουνίου 2005 Pws mporw na prospelasw ola ta dedomena enos pinaka i' mias mitras me tyxaia seira?? Endiaferomai gia glwssa Matlab alla epilyste to mou kai se opoia allh glwssa thelete akomh kai se psevdokwdika. Efxaristw!
HaPagan Δημοσ. 15 Ιουνίου 2005 Δημοσ. 15 Ιουνίου 2005 Θα χρησιμοποιήσεις μια συνάρτηση η οποία υπάρχει σε κάθε γλώσσα και επιστρέφει τυχαίους αριθμούς ανάλογα με κάποιο range που έχεις εσύ ορίσει. Έτσι , αντί να αναφέρεσαι σε κάποια συγκεκριμένη θέση του πίνακα , θα αναφέρεσαι στη θέση που θα έχει επιστρέψει η συνάρτηση δημιουργίας "τυχαίων" αριθμών.
alkisg Δημοσ. 15 Ιουνίου 2005 Δημοσ. 15 Ιουνίου 2005 Η δυσκολία δεν είναι στην τυχαία σειρά, είναι στο να μην πηγαίνεις στην ίδια θέση του πίνακα πάνω από μία φορά. Αν ο πίνακάς σου είναι μικρός μπορείς να κάνεις το κλασσικό ανακάτεμα της τράπουλας: >Για ι από 1 μέχρι όσες_φορές_θες_να_ανακατέψεις Αντιμετάθεσε(Τράπουλα[random], Τράπουλα[random]) Για να το εφαρμόσεις αυτό στον πίνακά σου θα χρειαστείς έναν ακόμα πίνακα ίδιων θέσεων, ο οποίος θα κρατάει τα index. >Για ι από 1 μέχρι αριθμό_στοιχείων index[ι] = ι Αν στη συνέχεια ανακατέψεις με τον προηγούμενο αλγόριθμο τον πίνακα index, τότε η πρόσβαση στον πίνακα Α γίνεται με >Για ι από 1 μέχρι αριθμό_στοιχείων Α[index[ι]] = ό,τι θες να κάνεις...
CHRIS_MALL Δημοσ. 15 Ιουνίου 2005 Μέλος Δημοσ. 15 Ιουνίου 2005 To xew afto to opoio les,den nomizw pws me katalaves omws poly kala. PX: a=[ 0 0 0 1 2 3 2 1 2 0] thelw na prospelasw ta stoixeia me tyxaia seira.Na ta prospelasw omws ola ta stoixeia.Pws an mporeis grapsto mou se psevdokwdika i' se opoio kwdika glwssas theleis. Se efxaristw
CHRIS_MALL Δημοσ. 15 Ιουνίου 2005 Μέλος Δημοσ. 15 Ιουνίου 2005 Η δυσκολία δεν είναι στην τυχαία σειρά' date=' είναι στο να μην πηγαίνεις στην ίδια θέση του πίνακα πάνω από μία φορά. Αν ο πίνακάς σου είναι μικρός μπορείς να κάνεις το κλασσικό ανακάτεμα της τράπουλας: >Για ι από 1 μέχρι όσες_φορές_θες_να_ανακατέψεις Αντιμετάθεσε(Τράπουλα[random], Τράπουλα[random]) Για να το εφαρμόσεις αυτό στον πίνακά σου θα χρειαστείς έναν ακόμα πίνακα ίδιων θέσεων, ο οποίος θα κρατάει τα index. >Για ι από 1 μέχρι αριθμό_στοιχείων index[ι] = ι Αν στη συνέχεια ανακατέψεις με τον προηγούμενο αλγόριθμο τον πίνακα index, τότε η πρόσβαση στον πίνακα Α γίνεται με >Για ι από 1 μέχρι αριθμό_στοιχείων Α[index[ι]] = ό,τι θες να κάνεις... [/quote'] Afto einai swsto file mou kai egw afto skeftomoun.Dystyxws omws an einai disdiastatos o pinakas tha xreiastw 2 pinakes index! Kalo tha itan an mporousame (toulaxiston se kwdika matlab ) na eixame 1 pinaka index pou omws kathe stoixeio tou tha itan 1 zevgos timwn pou tha to xrisimopoiousame meta me ton tropo pou proaneferes.
alkisg Δημοσ. 15 Ιουνίου 2005 Δημοσ. 15 Ιουνίου 2005 Δεν ξέρω καλά matlab για να σου πω πώς ορίζεται πίνακας με ζεύγος τιμών ανά στοιχείο, μπορώ όμως να σου πω εναλλακτικές: 1) Όρισε δύο πίνακες, indexX και indexY και όταν αντιμεταθέτεις τον ένα αντιμετάθεσε και τον άλλο. Simple! 2) Όρισε έναν πίνακα index και για στοιχεία του βάλε αριθμός_στηλών*i + j ώστε σε έναν αριθμό να έχεις και το i και το j του στοιχείου. Μετά τις αντιμεταθέσεις για να βρεις την γραμμή κάνεις index[] div αριθμός_στηλών και για την στήλη index[] mod αριθμός_στηλών
CHRIS_MALL Δημοσ. 15 Ιουνίου 2005 Μέλος Δημοσ. 15 Ιουνίου 2005 Δεν ξέρω καλά matlab για να σου πω πώς ορίζεται πίνακας με ζεύγος τιμών ανά στοιχείο' date=' μπορώ όμως να σου πω εναλλακτικές: 1) Όρισε δύο πίνακες, indexX και indexY και όταν αντιμεταθέτεις τον ένα αντιμετάθεσε και τον άλλο. Simple! 2) Όρισε έναν πίνακα index και για στοιχεία του βάλε αριθμός_στηλών*i + j ώστε σε έναν αριθμό να έχεις και το i και το j του στοιχείου. Μετά τις αντιμεταθέσεις για να βρεις την γραμμή κάνεις index['] div αριθμός_στηλών και για την στήλη index[] mod αριθμός_στηλών file se efxaristw para poly! O 2os tropos sou einai katapliktikos kai poly exypnos! Den eimai sigouros omws gia to ti ennoeis me ti diadikasia anekatwmatos trapoulas.An den sou einai kopos mporeis na mou exhghseis? Se efxaristw poly pantws!
alkisg Δημοσ. 15 Ιουνίου 2005 Δημοσ. 15 Ιουνίου 2005 Παράδειγμα με μονοδιάστατο πίνακα για να είναι πιο κατανοητό: index = (1, 2, 3, 4, 5) Ο κώδικας είπαμε είναι >Για ι από 1 μέχρι όσες_φορές_θες_να_ανακατέψεις Αντιμετάθεσε(Τράπουλα[random], Τράπουλα[random]) 1η επανάληψη: random = 2, random = 4 δηλαδή να αντιμεταθέσω τα περιεχόμενα της θέσης 2 με της 4: index = (1, 4, 3, 2, 5) 2η επανάληψη: random = 3, random = 4 δηλαδή να αντιμεταθέσω τα περιεχόμενα της θέσης 3 με της 4: index = (1, 4, 2, 3, 5) 3η επανάληψη: random = 3, random = 3 δηλαδή να αντιμεταθέσω τα περιεχόμενα της θέσης 3 με της 3: index = (1, 4, 3, 2, 5) κτλ. Κάνοντας αυτό μερικές φορές ανακατεύονται αρκετά οι αριθμοί οπότε τελικά θα έχεις κάτι σαν index = (5, 1, 2, 4, 3) Για να προσπελάσεις τον πίνακα κάνεις Α[index[ι]] δηλαδή προσπελαύνεις πρώτα το 5ο στοιχείο, μετά το 1ο κτλ Αν έχεις απορία ask again. Επίσης αντί να χρησιμοποιείς index θα μπορούσες να ανακατεύεις κατευθείαν τα στοιχεία του πίνακα. Αν έχεις προβλήματα RAM (τεράστιοι πίνακες κτλ) υπάρχουν κι άλλοι τρόποι αλλά πιο σύνθετοι. Επίσης θεωρώ πιθανό το matlab να έχει έτοιμη ρουτίνα ανακατέματος πίνακα!!!
Axelfc Δημοσ. 15 Ιουνίου 2005 Δημοσ. 15 Ιουνίου 2005 Οριστε σε κωδικα MatLab αυτο που ζητησες. > clear A = [1 2 3; 4 5 6; 7 8 9] test = zeros(length(A)) final = ones(length(A)) check = 0 while check ~= 1 temp = randint(1,1,[1,size(A,1)*size(A,2)]) if test(temp) == 0 %do what ever you want with matrix element test(temp) = 1 end check = isequal(test,final) if check == 1, break, end end Αν εχεις απορια για τις εντολες κοιταξε στο help του Matlab και αν δεν βγαλεις ακρη πες. Γινεται σιγουρα και πιο απλα με εξοικονομηση ενος πινακα αλλα δεν εβρισκα την καταλληλη εντολη. Ο κωδικας ειναι γραμμενος ετσι ωστε να δουλευει για καθε πινακα Α mxn.
CHRIS_MALL Δημοσ. 15 Ιουνίου 2005 Μέλος Δημοσ. 15 Ιουνίου 2005 Οριστε σε κωδικα MatLab αυτο που ζητησες. > clear A = [1 2 3; 4 5 6; 7 8 9] test = zeros(length(A)) final = ones(length(A)) check = 0 while check ~= 1 temp = randint(1,1,[1,size(A,1)*size(A,2)]) if test(temp) == 0 %do what ever you want with matrix element test(temp) = 1 end check = isequal(test,final) if check == 1, break, end end Αν εχεις απορια για τις εντολες κοιταξε στο help του Matlab και αν δεν βγαλεις ακρη πες. Γινεται σιγουρα και πιο απλα με εξοικονομηση ενος πινακα αλλα δεν εβρισκα την καταλληλη εντολη. Ο κωδικας ειναι γραμμενος ετσι ωστε να δουλευει για καθε πινακα Α mxn. File den to pistevw...exw Matlab version 5.3 Student Edition kai den mou anagnwrizei tin entolh randint. Exeis na proteineis kati allo. Afto pou leei o Alkis to exw katalavei alla den mporw na vrw sinartisi random pou na orizw egw to evros twn timwn pou thelw na kanei randomize. Paidia sas efxaristw poly pantws!
Axelfc Δημοσ. 15 Ιουνίου 2005 Δημοσ. 15 Ιουνίου 2005 Παρε τον παρακατω κωδικα και σωστον σε ενα αρχειο randint.m μεσα στον ιδιο φακελο με το αλλο σου m file. Απ'οτι ειδα εχει καποια dependancies, αλλα δεν ξερω αν θα τα εχει το 5.3. Αμα δεν δουλεψει και ετσι δε μου ερχεται καποια αλλη συναρτηση για να κανεις τη δουλεια σου. Κοιταξε αλλο αλγοριθμο.. > function out = randint(varargin); %RANDINT Generate matrix of uniformly distributed random integers. % OUT = RANDINT generates a "0" or "1" with equal probability. % % OUT = RANDINT(M) generates an M-by-M matrix of random binary numbers. % "0" and "1" occur with equal probability. % % OUT = RANDINT(M,N) generates an M-by-N matrix of random binary numbers. % "0" and "1" occur with equal probability. % % OUT = RANDINT(M,N,RANGE) generates an M-by-N matrix of random integers. % % RANGE can be either a scalar or a two-element vector: % Scalar : If RANGE is a positive integer, then the output integer % range is [0, RANGE-1]. If RANGE is a negative integer, % then the output integer range is [RANGE+1, 0]. % Vector : If RANGE is a two-element vector, then the output % integer range is [RANGE(1), RANGE(2)]. % % OUT = RANDINT(M,N,RANGE,STATE) resets the state of RAND to STATE. % % Examples: % » out = randint(2,3) » out = randint(2,3,4) % out = out = % 0 0 1 1 0 3 % 1 0 1 2 3 1 % % » out = randint(2,3,-4) » out = randint(2,3,[-2 2]) % out = out = % -3 -1 -2 -1 0 -2 % -2 0 0 1 2 1 % % See also RAND, RANDSRC, RANDERR. % Copyright 1996-2001 The MathWorks, Inc. % $Revision: 1.18 $ $Date: 2001/04/23 15:32:45 $ % Basic function setup. error(nargchk(0,4,nargin)); % --- Placeholder for the signature string. sigStr = ''; m = []; n = []; range = []; state = []; % --- Identify string and numeric arguments for i=1:nargin if(i>1) sigStr(size(sigStr,2)+1) = '/'; end; % --- Assign the string and numeric flags if(isnumeric(varargin{i})) sigStr(size(sigStr,2)+1) = 'n'; else error('Only numeric arguments are accepted.'); end; end; % --- Identify parameter signitures and assign values to variables switch sigStr % --- randint case '' % --- randint(m) case 'n' m = varargin{1}; % --- randint(m, n) case 'n/n' m = varargin{1}; n = varargin{2}; % --- randint(m, n, range) case 'n/n/n' m = varargin{1}; n = varargin{2}; range = varargin{3}; % --- randint(m, n, range, state) case 'n/n/n/n' m = varargin{1}; n = varargin{2}; range = varargin{3}; state = varargin{4}; % --- If the parameter list does not match one of these signatures. otherwise error('Syntax error.'); end; if isempty(m) m = 1; end if isempty(n) n = m; end if isempty(range) range = [0, 1]; end len_range = size(range,1) * size(range,2); % Typical error-checking. if (~isfinite(m)) | (~isfinite(n)) error('Matrix dimensions must be finite.'); elseif (floor(m) ~= m) | (floor(n) ~= n) | (~isreal(m)) | (~isreal(n)) error('Matrix dimensions must be real integers.'); elseif (m < 0) | (n < 0) error('Matrix dimensions must be positive.'); elseif (length(m) > 1) | (length(n) > 1) error('Matrix dimensions must be scalars.'); elseif len_range > 2 error('The RANGE parameter should contain no more than two elements.'); elseif max(max(floor(range) ~= range)) | (~isreal(range)) | (~isfinite(range)) error('The RANGE parameter must only contain real finite integers.'); end % If the RANGE is specified as a scalar. if len_range < 2 if range < 0 range = [range+1, 0]; elseif range > 0 range = [0, range-1]; else range = [0, 0]; % Special case of zero range. end end % Make sure RANGE is ordered properly. range = sort(range); % Calculate the range the distance for the random number generator. distance = range(2) - range(1); % Set the initial state if specified. if ~isempty(state) rand('state', state); end % Generate the random numbers. r = floor(rand(m, n) * (distance+1)); % Offset the numbers to the specified value. out = ones(m,n)*range(1); out = out + r; % [EOF] randint.m
CHRIS_MALL Δημοσ. 15 Ιουνίου 2005 Μέλος Δημοσ. 15 Ιουνίου 2005 Παρε τον παρακατω κωδικα και σωστον σε ενα αρχειο randint.m μεσα στον ιδιο φακελο με το αλλο σου m file. Απ'οτι ειδα εχει καποια dependancies' date=' αλλα δεν ξερω αν θα τα εχει το 5.3. Αμα δεν δουλεψει και ετσι δε μου ερχεται καποια αλλη συναρτηση για να κανεις τη δουλεια σου. Κοιταξε αλλο αλγοριθμο.. > function out = randint(varargin); %RANDINT Generate matrix of uniformly distributed random integers. % OUT = RANDINT generates a "0" or "1" with equal probability. % % OUT = RANDINT(M) generates an M-by-M matrix of random binary numbers. % "0" and "1" occur with equal probability. % % OUT = RANDINT(M,N) generates an M-by-N matrix of random binary numbers. % "0" and "1" occur with equal probability. % % OUT = RANDINT(M,N,RANGE) generates an M-by-N matrix of random integers. % % RANGE can be either a scalar or a two-element vector: % Scalar : If RANGE is a positive integer, then the output integer % range is [0, RANGE-1]. If RANGE is a negative integer, % then the output integer range is [RANGE+1, 0]. % Vector : If RANGE is a two-element vector, then the output % integer range is [RANGE(1), RANGE(2)]. % % OUT = RANDINT(M,N,RANGE,STATE) resets the state of RAND to STATE. % % Examples: % » out = randint(2,3) » out = randint(2,3,4) % out = out = % 0 0 1 1 0 3 % 1 0 1 2 3 1 % % » out = randint(2,3,-4) » out = randint(2,3,[-2 2]) % out = out = % -3 -1 -2 -1 0 -2 % -2 0 0 1 2 1 % % See also RAND, RANDSRC, RANDERR. % Copyright 1996-2001 The MathWorks, Inc. % $Revision: 1.18 $ $Date: 2001/04/23 15:32:45 $ % Basic function setup. error(nargchk(0,4,nargin)); % --- Placeholder for the signature string. sigStr = ''; m = []; n = []; range = []; state = []; % --- Identify string and numeric arguments for i=1:nargin if(i>1) sigStr(size(sigStr,2)+1) = '/'; end; % --- Assign the string and numeric flags if(isnumeric(varargin{i})) sigStr(size(sigStr,2)+1) = 'n'; else error('Only numeric arguments are accepted.'); end; end; % --- Identify parameter signitures and assign values to variables switch sigStr % --- randint case '' % --- randint(m) case 'n' m = varargin{1}; % --- randint(m, n) case 'n/n' m = varargin{1}; n = varargin{2}; % --- randint(m, n, range) case 'n/n/n' m = varargin{1}; n = varargin{2}; range = varargin{3}; % --- randint(m, n, range, state) case 'n/n/n/n' m = varargin{1}; n = varargin{2}; range = varargin{3}; state = varargin{4}; % --- If the parameter list does not match one of these signatures. otherwise error('Syntax error.'); end; if isempty(m) m = 1; end if isempty(n) n = m; end if isempty(range) range = [0, 1]; end len_range = size(range,1) * size(range,2); % Typical error-checking. if (~isfinite(m)) | (~isfinite(n)) error('Matrix dimensions must be finite.'); elseif (floor(m) ~= m) | (floor(n) ~= n) | (~isreal(m)) | (~isreal(n)) error('Matrix dimensions must be real integers.'); elseif (m < 0) | (n < 0) error('Matrix dimensions must be positive.'); elseif (length(m) > 1) | (length(n) > 1) error('Matrix dimensions must be scalars.'); elseif len_range > 2 error('The RANGE parameter should contain no more than two elements.'); elseif max(max(floor(range) ~= range)) | (~isreal(range)) | (~isfinite(range)) error('The RANGE parameter must only contain real finite integers.'); end % If the RANGE is specified as a scalar. if len_range < 2 if range < 0 range = [range+1, 0]; elseif range > 0 range = [0, range-1]; else range = [0, 0]; % Special case of zero range. end end % Make sure RANGE is ordered properly. range = sort(range); % Calculate the range the distance for the random number generator. distance = range(2) - range(1); % Set the initial state if specified. if ~isempty(state) rand('state', state); end % Generate the random numbers. r = floor(rand(m, n) * (distance+1)); % Offset the numbers to the specified value. out = ones(m,n)*range(1); out = out + r; % [EOF] randint.m [/quote'] File to mono pou exw na pw einai oti your name einai Nobody!!!!! Se efxaristw para poly! Mou eleises ta xeria! Thank you! :grin:
CHRIS_MALL Δημοσ. 16 Ιουνίου 2005 Μέλος Δημοσ. 16 Ιουνίου 2005 Οριστε σε κωδικα MatLab αυτο που ζητησες. > clear A = [1 2 3; 4 5 6; 7 8 9] test = zeros(length(A)) final = ones(length(A)) check = 0 while check ~= 1 temp = randint(1,1,[1,size(A,1)*size(A,2)]) if test(temp) == 0 %do what ever you want with matrix element test(temp) = 1 end check = isequal(test,final) if check == 1, break, end end Αν εχεις απορια για τις εντολες κοιταξε στο help του Matlab και αν δεν βγαλεις ακρη πες. Γινεται σιγουρα και πιο απλα με εξοικονομηση ενος πινακα αλλα δεν εβρισκα την καταλληλη εντολη. Ο κωδικας ειναι γραμμενος ετσι ωστε να δουλευει για καθε πινακα Α mxn. Dokimasa ton parapanw kwdika gia ton pinaka 1x7: i = 12 13 23 24 34 45 53 kai mou ekane atermwn vroxo.Giati?
Axelfc Δημοσ. 16 Ιουνίου 2005 Δημοσ. 16 Ιουνίου 2005 Δικο μου λαθος. Γενικα εχεις ιδεα απο Matlab? Ψαξτο και λιγακι. Δες τι κανουν οι εντολες για να καταλαβεις που ειναι το λαθος... Δεν εβαλα ερωτηματικα στο τελος των εντολων ακριβως για να βλεπεις τι κανει το προγραμμα καθως εκτελειται. Αυτος ειναι ο σωστος κωδικας. > clear A = [12 13 23 24 34 45 53] test = zeros(size(A)) final = ones(size(A)) check = 0 while check ~= 1 temp = randint(1,1,[1,size(A,1)*size(A,2)]) if test(temp) == 0 %do what ever you want with matrix element test(temp) = 1 end check = isequal(test,final) if check == 1, break, end end
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.