theo2008 Δημοσ. 27 Νοεμβρίου 2008 Δημοσ. 27 Νοεμβρίου 2008 Καλημέρα παιδιά.Εχω μια απορία και όποιος μπορεί ας βοηθήσει παρακαλώ. Εχω το εξής κομμάτι κώδικα: >> D=0.1; >> L=0.44; >> Ed=0.01; >> E=0:0.01:100; >> xor=1.6*10^-19; >> sum=((E+Ed+(xor*v)/L)/D).^2; Αυτο θέλω να το υπολογίσω για τιμές του v=-12,-11.95,-11.9 κτλ.Βάζοντας κάθε φορά και διαφορετική τιμή στο v βλέπω πως το sum μου δίνει τα ίδια νουμερα.Αυτο προφανώς φαντάζομαι γίνεται λόγω του ότι το xor*v έχει παρα πολυ μικρή τιμή για κάθε τιμή του v οπότε η διαφορα στο αποτέλεσμα να ειναι απειροελάχιστη με αποτέλεσμα να μην φαινεται.Αυτην την απειροελάχιστη διαφορά στο αποτέλεσμα υπάρχει τρόπος να την δω?Υπάρχει δηλαδή τρόπος να φαίνονται οι πολύ μικροί αριθμοί στο matlab?Δοκίμασα την format long και δεν με πολυβοήθησε.Ευχαριστώ
parsifal Δημοσ. 27 Νοεμβρίου 2008 Δημοσ. 27 Νοεμβρίου 2008 Έγινε μεταφορά του θέματος στην ορθή ενότητα του forum.
theo2008 Δημοσ. 27 Νοεμβρίου 2008 Μέλος Δημοσ. 27 Νοεμβρίου 2008 δοκιμασα και την format long e αλλα δεν είδα διαφορά.το πρόβλημα ειναι οτι μου δημιουργει εναν πινακα 1χ1001(λογικό αφου το Ε το όρισα μέχρι 100),μου βγάζει αρχικά κάποιες τιμές ας πούμε για το V=-11.Οταν πάω και αλλάζω το V σε -4 για παράδειγμα τότε βλέπω ότι στον πίνακα δεν αλλάζουν καθόλου οι τιμές.Κανονικά απο την στιγμή που αλλάζω το V δεν θα έπρεπε να αλλάζουν και οι τιμές στον πίνακα?Εντωμεταξυ το ιδιο παρατηρώ συμβαίνει με οποιαδήποτε τιμή και αν βάλω στο V.Το δοκιμασα και για V=4 και πάλι τα ίδια.Δεν ανανεώνεται ο πίνακας μήπως?
edhunter Δημοσ. 27 Νοεμβρίου 2008 Δημοσ. 27 Νοεμβρίου 2008 εμένα πάντως αλλάζει η τιμή του sum. έγραψες τπτ άλλο που δεν το δίνεις εδώ;
Draculina Δημοσ. 27 Νοεμβρίου 2008 Δημοσ. 27 Νοεμβρίου 2008 Δοκίμασε αυτόν το κώδικα στο Matlab: 1e-16 + 1; Θα σου δώσει στρόγγυλο 1. Δοκίμασε τώρα : 4e-16 + 1; Θα δεις ότι δεν βγάζει 1 στρόγγυλο αλλά γίνεται η πρόσθεση κανονικά! δώσε τώρα eps(1) Εγώ τουλ. στο μηχανάκι μου παίρνω eps(1) = 2.2204e-16 ( η ακρίβεια του αριθμού 1, διαφορετική για κάθε double) το οποίο είναι μεγαλύτερο του 1e-16 αλλά μικρότερο του 4e-16!! Το συμπέρασμα είναι ότι για να δεις μεταβολή σε 1 αριθμό πρεπει να προσθεσεις ένα άλλο νούμερο μεγαλύτερο της ακρίβειας του αριθμού σου (το eps που υπολόγισες). Δεν υπάρχει double μεταξύ του αριθμού σου χ και του αριθμού x + eps(x) και επομένως δεν μπορεις να δεις τέτοιους αριθμούς. To πλήθος των αριθμών διπλής ακρίβειας που μπορούν να αποθηκευτουν είναι πεπερασμένο και όχι άπειρο. Λογικό είναι όπου προσθέτεις όρους κάτω της ακρίβειας να παίρνεις τα ίδια νούμερα. Ελπίζω να σε βοηθησα. PS: το eps του 0.01 είναι γύρω στο 1e-18...
theo2008 Δημοσ. 27 Νοεμβρίου 2008 Μέλος Δημοσ. 27 Νοεμβρίου 2008 με λιγα λογια αυτο που ζητάω δεν γινεται? edhunter εμενα δεν αλλαζει το sum.Μονιμως οι τιμες που μου βγάζει ειναι 0.01,0.04...κτλ ακομα και με το format long e παλι ιδιες τιμες παιρνω.
Draculina Δημοσ. 27 Νοεμβρίου 2008 Δημοσ. 27 Νοεμβρίου 2008 Οχι,σε καποιες περιπτώσεις δεν γίνεται!!Όπου οι όροι που προκυπτουν είναι μικρότεροι της ακρίβειας...Τα νούμερα είναι οριακα...για ν μικρό είσαι εκτός ακρίβειας.. Πρεπει κάθε φορά να βλέπεις τους όρους που προσθετεις και την ακρίβεια τους για να ξέρεις αν υπάρχει νεος αριθμός που προκύπτει από το αθροισμα ή όχι!
theo2008 Δημοσ. 27 Νοεμβρίου 2008 Μέλος Δημοσ. 27 Νοεμβρίου 2008 μαλιστα!!σκεφτηκα το αλλο,στην ουσια το sum που θελω να υπολογισω ειναι μια δευτεροβαθμια εξισωση.αμα το sum το εγραφα ως sum=((E+Ed)/D).^2+2*(E+Ed)*xor*V/L/D.^2+(xor*V/L/D).^2(είναι σωστο μαθηματικα αυτο που εγραψα?) και προσπαθούσα απο εκεί να βγάλω καποιο αποτέλεσμα? αν θεσω a=((E+Ed)/D).^2; b=2*(E+Ed)*xor*V/L/D.^2; c=(xor*V/L/D).^2; Ενω στα b και c μου βγαινουν μια χαρα οι πραξεις για οποιοδήποτε V οταν είναι να γίνει το sum=a+b+c εκεί μου τα χαλαει.μαλλον ειναι αυτο που λες draculina.
evabb Δημοσ. 27 Νοεμβρίου 2008 Δημοσ. 27 Νοεμβρίου 2008 τις δικες μου ερωτησεις δεν τις απαντα κανεις .(
dop Δημοσ. 28 Νοεμβρίου 2008 Δημοσ. 28 Νοεμβρίου 2008 Συνήθως για floating point operations προσπαθούμε πάντα πχ να αθροίζουμε τιμές που έχουν το κοντινότερο order of magnitude (πως είναι στα ελληνικά αυτό και όταν πολλαπλασιάζουμε αυτά που έχουν το μακρινότερο. Το κάνουμε για να μην χάνουμε σε ακρίβεια, καθώς οι floating point αριθμοί έχουν μια συγκεκριμένη ακρίβεια. Μπορείς να κάνεις οποιαδήποτε πράξη θέλεις με όποιον αριθμό θέλεις (σε λογικά πλαίσια), δεδομένου ότι ξοδεύεις κάποια ώρα να μεταφέρεις την εξίσωσή σου σε μορφή που να "βολεύει" την μηχανή.
Draculina Δημοσ. 28 Νοεμβρίου 2008 Δημοσ. 28 Νοεμβρίου 2008 .... Ακριβώς!! @evabb: sorry αλλά αυτό που ρώτησες δεν το έκανα ποτέ στο matlab οπότε...
theo2008 Δημοσ. 28 Νοεμβρίου 2008 Μέλος Δημοσ. 28 Νοεμβρίου 2008 μαλιστα!βασικα ολο αυτο που σας ρωτησα ειναι ενα κομματι απο μια ολοκληρη συναρτηση που πρεπει να περασω στο matlab και να βγαλω την γραφικη.μεχει πεδεψει εδω και μηνες και δεν βρισκω ακρη.αμα δημοσιευσω ολη την συναρτηση λεγοντας σας φυσικα το τι εχω σκεφτει(και οχι να περιμενω ετοιμη λυση απο εσας,μιας και δεν θελω αυτο) τοτε ειναι δυνατον να με βοηθήσετε?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.