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

Matlab


sYn

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

Δημοσ.

Λοιπόν, θέλω σε 16 μεταβλητές να βάλω 256 στοιχεία από 0 και 1, τα οποία θα βγάζει random. π.χ. a = 010110011...010101 <- Το πλήθος είναι 256.

Στη τελική οι 16 μεταβλητές θα έχουν 256 διαφορετικά bits.

Πως μπορώ να το πραγματοποιήσω σε περιβάλλον matlab (σε m-file;

Δημοσ.

1η Σκεψη

>
for i=1:16
 num[i]=10^255
 for j=254:-1:0
    temp=floor(rand+0.5)*10^j
    num[i]=num[i]+temp
 end
end

 

:cry: Δυστηχως σε αυτον τον κωδικα το πρωτο πσιφιο παντα θα ειναι 1:cry:

:-((ετσι δεν ειναι εντελως τυχαιος ο αριθμος που δημιουργειτε) :-(

αυτο το κανω διοτι θα χανονταν τα 0 που θα εβγαιναν

(αν εβγαιναν αφου μιλαμε για τυχαιους αριθμους)

στην αρχη μεχρι να μας βγει ο πρωτος ασος και μετα θα δουλεψει καλα.. :P

 

2η Σκεψη

>
a= floor(rand(1,256)+0.5)

 

Ετσι δημιουργουμε ενα διανυσμα με 256 τυχαια πσιφια που αποτελουνται απο 0 και 1:-D

Αν σκεφτεις τπτ για να το μετατρεψεις σε μια μεταβλητη που θες :-(:-(:-(....try it!!

Αν το καταφερεις αυτο μετα το κανεις ευκολα για τις 16 μεταβλητες :mrgreen:

 

ΥΣ:Αν εχω γραψει βλακειες....παρακαλω ελευθερα διορθωστε με...και κατηγορήσετε το

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

να μας κανει...τεσπα αυτο ειναι αλλη ιστορια :X:X:X

Δημοσ.

Δοκίμασε να χρησιμοποιήσεις και την dec2bin και να μετατρέπεις το (rand*2^256) σε δυαδικό. Ίσως να μπλέξεις όμως με τις ακρίβειες, γιατί μάλλον η rand δεν έχει τόσο μεγάλη ακρίβεια ώστε να σου βγάλει 2^256 διαφορετικες τιμές και άρα δεν θα πάρεις όλους τους πιθανούς δυαδικούς.

 

Επίσης, πρόσεχε γιατί όταν θα πας να το βάλεις σε loop και να τα βάλεις όλα σε πίνακα θα έχεις πρόβλημα.

 

Ίσως εκεί να πρέπει να χρησιμοποιήσεις κάποια από τις num2str ή mat2str και μετά να τις βάλεις σε πίνακα..

Δημοσ.

Χρησιμοποίησα την rand για να παράγω 256 τυχαίους αριθμούς ανάμεσα στο 0 και 1 και μετά χρησιμοποίησα την round για να στρογγυλοποιήσω στον κοντινότερο ακέραιο.

 

Έχω κολλήσει τώρα όμως κάπου αλλού:

Έχω μία μεταβλητή με αυτούς τους τυχαίους αριθμούς (δλδ. 1 πίνακα με 256 τυχαία στοιχεία(0,1) το καθένα π.χ. a=[0 1 0 ... 1]). Έχω και άλλον ένα πίνακα ο οποίος περιέχει 16 στοιχεία(1,-1)(δλδ. 1 πίνακες με 1 και -1 π.χ. b=[1 -1 -1 1 ... -1]).

Έγω θέλω να ελέγχει στον πρώτο πίνακα(a) τα στοιχεία ένα-ένα και αν βρίσκει 1 να βάζει σε ένα καινούριο πίνακα© τα 16 στοιχεία του πίνακα b αλλιώς αν βρίσκει 0 να βάζει τα 16 στοιχεία του πίνακα β αντίστροφα.

 

π.χ. a=[1 0 1 1 0] b=[1 -1 1] Άρα c=[1 -1 1 -1 1 -1 1 -1 1 1 -1 1 -1 1 -1]

Δλδ ο πίνακας c θα έχει 15 στοιχεία

Δημοσ.

Ρε syn εξήγησέ το αν μπορείς καλύτερα γιατί κάπου με μπερδεύεις..τι εννοείς να ελέγχει τα στοιχεία του πρώτου πίνακα ένε-ένα ..τι ακριβώς να ελέγχει????ο τρίτος πίνακας θα έχει 16 στοιχεία και οχι 15 στοιχειά πού γράφεις παραπάνω...εκτός και αν κατάλαβα λάθος...

Δημοσ.
Ρε syn εξήγησέ το αν μπορείς καλύτερα γιατί κάπου με μπερδεύεις..τι εννοείς να ελέγχει τα στοιχεία του πρώτου πίνακα ένε-ένα ..τι ακριβώς να ελέγχει????ο τρίτος πίνακας θα έχει 16 στοιχεία και οχι 15 στοιχειά πού γράφεις παραπάνω...εκτός και αν κατάλαβα λάθος...

 

Για να το κάνω πιο απλό:

>a=round(rand(1,3));
b=[1 -1]

Στον πίνακα a μπαίνουν 3 τυχαίες τιμές αποτελούμενες από 0 και 1. π.χ. a=[1 0 1]

Εγώ θέλω να κάνω το εξής:

>for i=1:3
if a(i)==1
if i==1
c(1:2)=[b];
else if i==2
c(3:4)=[b];
else if i==3
c(5:6)=[b];
end
end
end
else if a(i)==0
if i==1
c(1:2)=[-b];
else if i==2
c(3:4)=[-b];
else if i==3
c(5:6)=[-b];
end
end
end
end
end
end

 

Δλδ. ελέγχω τις τιμές του πίνακα a αν είναι 1 και αν ναι, τότε αναθέτω σε ένα τρίτο πίνακα c τις τιμές του πίνακα b.

 

>a=[ 1                   0           1]               b=[1 -1]
   |                  |               |
c=[1 -1           -1 1           1 -1]
    ορθά       αντίστ-         ορθά
                    ροφα

 

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

Δημοσ.

Λοιπόν να τη σκέφτηκα..

>

Έχεις ήδη δημιουργήσει τους τυχαίους πίνακες α[256] και b[16]
....
For i=1:256
If a[i]==1
 For j=1:16
  c[16*(i-1)+j]=b[j]
 End
else
 For j=16:-1:1
  c[16*(i-1)+(17-j)]=b[j]
 End
End
End

Ps: Δεν ξερω αν 'τρέχει' για αυτό δοκίμασέ το....:P:p:p

Δημοσ.

Τελικά το έκανα να δουλέψει αρχικοποιώντας με μηδενικά στοιχεία ένα καινουριο πίνακα και μετά κάνοντας ανάθεση το πίνακα b στον καινούριο σε μια loop. c=[c b]

 

Φυσικά οι απορίες μου δε τελειώσαν εδώ:devil:

 

Έχω ένα πίνακα a=[1 0 0 0 1 1 1 1];

Πως μπορώ να προσθέσω κάθε τέσσερα στοιχεία και να τα βάλω σε καινούριο πίνακα;

Δλδ. b=[1 4]

Σημειωτέον ότι αυτό πρέπει να γίνει για πίνακα με 4096 στοιχεία και η πρόσθεση να γίνεται κάθε 16 στοιχεία

 

Και jakegate7 από που από Ξάνθη είσαι; Και εγώ από εκεί είμαι:-)

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

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

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