feodor Δημοσ. 14 Ιανουαρίου 2012 Δημοσ. 14 Ιανουαρίου 2012 Παιδια καλησπερα! εχω αυτον τον τυπο Zi=(αΖi-1+c)(mod m) και θελω να τον υλοποιησω στο matlab Εχω γραψει ενα κώδικα αλλα απ οτι φαινεται ειναι λαθος Εδω: >z=5;%thetw seed. n=20000; i=1; a=7^10; c=2^64-3; m=2^64-1; u=[]; while i<n x(i)=a*z(i-1)+c; z(i)=mod(x,m); u(i)=z(i)/m; i=i+1; end Οταν το τρεχω στο περιβαλλον matlab μου βγαζει αυτο το μηνυμα: ??? Attempted to access z(0); index must be a positive integer or logical. Καμμια βοηθεια? Θενξ εκ των προτερων!
Technology fan Δημοσ. 14 Ιανουαρίου 2012 Δημοσ. 14 Ιανουαρίου 2012 Παιδια καλησπερα! εχω αυτον τον τυπο Zi=(αΖi-1+c)(mod m) και θελω να τον υλοποιησω στο matlab Εχω γραψει ενα κώδικα αλλα απ οτι φαινεται ειναι λαθος Εδω: >z=5;%thetw seed. n=20000; i=1; a=7^10; c=2^64-3; m=2^64-1; u=[]; while i<n x(i)=a*z(i-1)+c; z(i)=mod(x,m); u(i)=z(i)/m; i=i+1; end Οταν το τρεχω στο περιβαλλον matlab μου βγαζει αυτο το μηνυμα: ??? Attempted to access z(0); index must be a positive integer or logical. Καμμια βοηθεια? Θενξ εκ των προτερων! Το πρόβλημα υπάρχει στη γραμμή : x(i)=a*z(i-1)+c; Οι πίνακες στο ματλαμπ αρχίζουν από το 1. και άσε που από τον τύπο, η αφαίρεση από ότι καταλαβαίνω είναι στην τιμή και όχι στον πίνακα δηλαδή, x(i)=a*z(i)-1+c;
feodor Δημοσ. 14 Ιανουαρίου 2012 Μέλος Δημοσ. 14 Ιανουαρίου 2012 Φιλε σ ευχαριστω πολυ για την απαντηση. Τωρα που το ξανασκεφτομαι ισως βαλω while<=n+1 και να ξεκινησω απ το i=2. Στον τυπο, ασχετα που δεν φαινεται καλα εδω, το i-1 ειναι δεικτης του Z γι αυτο το εβαλα Ζ(i-1) Ευχαριστω παντως για τη βοηθεια
Timonkaipumpa Δημοσ. 14 Ιανουαρίου 2012 Δημοσ. 14 Ιανουαρίου 2012 Παιδια καλησπερα! εχω αυτον τον τυπο Zi=(αΖi-1+c)(mod m) και θελω να τον υλοποιησω στο matlab Εχω γραψει ενα κώδικα αλλα απ οτι φαινεται ειναι λαθος Εδω: >z=5;%thetw seed. n=20000; i=1; a=7^10; c=2^64-3; m=2^64-1; u=[]; while i<n x(i)=a*z(i-1)+c; z(i)=mod(x,m); u(i)=z(i)/m; i=i+1; end Οταν το τρεχω στο περιβαλλον matlab μου βγαζει αυτο το μηνυμα: ??? Attempted to access z(0); index must be a positive integer or logical. Καμμια βοηθεια? Θενξ εκ των προτερων! Ο κώδικας είναι λάθος. Καταρχάς, φτιάχνεις ένα πίνακα, τον x, που τον αυξάνεις συνέχεια χωρίς να σου χρειάζεται. Ακόμα, σαν z(i), θα παίρνεις το mod(m) για όλον τον x που έχεις φτιάξει μέχρι τότε. Αυτό σημαίνει ότι στην δεύτερη loop θα έχεις λάθος κάτι σαν matrix index dimensions must agree ή mismatch. Επίσης, ΔΕΝ χρησιμοποιείς τα ωραία features του MATLAB!. Ακόμα, η χρήση που κάνεις στο z και στον u ΣΙΓΟΥΡΑ σου βγάζει το warning για αλλαγή διαστάσεων και ΣΙΓΟΥΡΑ σου λέει "consider preallocation for speed". Καλύτερα είναι να γράψεις: > firstElement = 5; numberOfElements = 2*10e+004; Z = [firstElement zeros(1, numberOfElements - 1)]; a = 7^10; c = 2^64-3; m = 2^64-1; for index = 2:length(Z) Z(index) = mod((a*Z(index-1) + c), m); end u = Z./m;
feodor Δημοσ. 14 Ιανουαρίου 2012 Μέλος Δημοσ. 14 Ιανουαρίου 2012 Ευχαριστω πολυ φιλε Timonkaipumpa Η αληθεια ειναι οτι σε ματλαμπ ειμαι ασχετος (εδω και 4 μερες προσπαθω να μαθω καποια βασικα) και εχω εργασια να παραδοσω. Θα μελετησω το κωδικα που εβαλες Θενξ again Edit: φιλε timonkaipoumpa, για να καταλαβω το Ζ=[firstElement zeros(1, numberOfElements - 1)], σημαινει οτι το Ζ ειναι ενας πινακας με διαστασεις το firstElement (ή αλλιως το seed) και τον πινακα zeros? Ή το εχω καταλαβει λαθος? Σορρυ για την "noob-άδικη" ερωτηση. Επισης, το firstElement ειναι το seed ή αλλιως ο σπορος ενω το index παιζει το ρολο του i που ειχα βαλει εγω? Δεν χρειαζεται να δώσσουμε τιμη στο index, πχ 2, πρωτου το χρησιμοποιησουμε στο loop?
Timonkaipumpa Δημοσ. 15 Ιανουαρίου 2012 Δημοσ. 15 Ιανουαρίου 2012 Edit: φιλε timonkaipoumpa, για να καταλαβω το Ζ=[firstElement zeros(1, numberOfElements - 1)], σημαινει οτι το Ζ ειναι ενας πινακας με διαστασεις το firstElement (ή αλλιως το seed) και τον πινακα zeros? Ή το εχω καταλαβει λαθος? Σορρυ για την "noob-άδικη" ερωτηση. Επισης, το firstElement ειναι το seed ή αλλιως ο σπορος ενω το index παιζει το ρολο του i που ειχα βαλει εγω? Δεν χρειαζεται να δώσσουμε τιμη στο index, πχ 2, πρωτου το χρησιμοποιησουμε στο loop? Το > Ζ=[firstElement zeros(1, numberOfElements - 1)] Σημαίνει ότι ο Ζ αποτελείται από την τιμή firstElement και μία σειρά (numberOfElements - 1) μηδενικών. Δοκίμασε να το κάνεις με μικρότερες διαστάσεις στο command window να το δεις κιόλας. Στο MATLAB δεν δηλώνεις διαστάσεις σε απλούς πίνακες. Δεν είναι σαν την C που πρέπει να δηλώσεις διαστάσεις. Στο MATLAB τα πάντα είναι πίνακες. Ακόμα και το > a = 5 είναι ένας πίνακας με ένα στοιχείο. Αν μετά κάνεις > a(10) = 100 Τότε στο a θα προστεθούν στοιχεία μέχρι να έχει συνολικά 10 στοιχεία και το 10ο θα γίνει ίσο με 100. Έτσι, αν και δεν δηλώνεις διαστάσεις, με την κλασσική έννοια, αυτό που μπορείς να κάνεις είναι να φτιάξεις ένα πίνακα διαστάσεων που θέλεις είτε με μηδενικά είτε με άσσους. Αναλόγως τι πράξεις θα κάνεις μετά. Για αυτό, στον Z έβαλα το πρώτο στοιχείο (firstElement ή seed όπως το είχες εσύ) και τον γέμισα μετά με όσα μηδενικά θα είναι και τα τελικά του στοιχεία, δηλαδή numberOfElements - 1 (-1 γιατί ήδη έχει μπει ένα στοιχείο, το firstElement). Ναι, το firstElement = seed και το index = i. Όχι, δεν χρειάζεται να δώσεις τιμή. Γενικά το for στο MATLAB είναι αρκετά ευέλικτο. Μπορείς να δηλώσεις ακόμα και: > a = [1 2 3; 4 5 6; 7 8 9]; for i = a % Do something end Και θα έχεις σαν indexes στοιχεία του πίνακα a σε κάθε loop.
feodor Δημοσ. 15 Ιανουαρίου 2012 Μέλος Δημοσ. 15 Ιανουαρίου 2012 Φιλε timonkaipoumpa να σαι καλα Σ ευχαριστω και για την εξηγηση Θα προσπαθησω τωρα να λυσω την ασκηση γιατι έχει κι αλλα ζητουμενα (που μόνο ευκολα δεν ειναι για μενα)
Timonkaipumpa Δημοσ. 15 Ιανουαρίου 2012 Δημοσ. 15 Ιανουαρίου 2012 Ό,τι θες να κάνεις με MATLAB μπορείς να το ρωτήσεις πώς γίνεται. Για να το κάνεις αυτό γράφεις: > lookfor 'i erwtisi soy' Θα περιμένεις λίγο ή λίγο πιο πολύ, αναλόγως με το σύστημά σου, και θα σου βγάλει μία λίστα από εντολές. Για να δεις πώς χρησιμοποιείται η κάθε εντολή γράφεις: > help iEntoli Στο αποτέλεσμα του help, κάτω κάτω, έχει ένα hyperlink που, κατά 80%, λέγεται > doc iEntoli Πάτα το και θα σε βγάλει στο help browser του MATLAB όπου έχει παραδείγματα και αναλυτική εξήγηση της εντολής.
feodor Δημοσ. 15 Ιανουαρίου 2012 Μέλος Δημοσ. 15 Ιανουαρίου 2012 Ευχαριστω πολυ Απ αυτα τα δυο μονο το help ηξερα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα