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

Ερώτηση για MATLAB!


theo2008

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

Δημοσ.

Καλημέρα παιδιά.Εχω μια απορία και όποιος μπορεί ας βοηθήσει παρακαλώ.

Εχω το εξής κομμάτι κώδικα:

>> 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 και δεν με πολυβοήθησε.Ευχαριστώ

Δημοσ.

δοκιμασα και την format long e αλλα δεν είδα διαφορά.το πρόβλημα ειναι οτι μου δημιουργει εναν πινακα 1χ1001(λογικό αφου το Ε το όρισα μέχρι 100),μου βγάζει αρχικά κάποιες τιμές ας πούμε για το V=-11.Οταν πάω και αλλάζω το V σε -4 για παράδειγμα τότε βλέπω ότι στον πίνακα δεν αλλάζουν καθόλου οι τιμές.Κανονικά απο την στιγμή που αλλάζω το V δεν θα έπρεπε να αλλάζουν και οι τιμές στον πίνακα?Εντωμεταξυ το ιδιο παρατηρώ συμβαίνει με οποιαδήποτε τιμή και αν βάλω στο V.Το δοκιμασα και για V=4 και πάλι τα ίδια.Δεν ανανεώνεται ο πίνακας μήπως?

Δημοσ.

Δοκίμασε αυτόν το κώδικα στο 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...

Δημοσ.

με λιγα λογια αυτο που ζητάω δεν γινεται?

edhunter εμενα δεν αλλαζει το sum.Μονιμως οι τιμες που μου βγάζει ειναι 0.01,0.04...κτλ

ακομα και με το format long e παλι ιδιες τιμες παιρνω.

Δημοσ.

Οχι,σε καποιες περιπτώσεις δεν γίνεται!!Όπου οι όροι που προκυπτουν είναι μικρότεροι της ακρίβειας...Τα νούμερα είναι οριακα...για ν μικρό είσαι εκτός ακρίβειας..

 

Πρεπει κάθε φορά να βλέπεις τους όρους που προσθετεις και την ακρίβεια τους για να ξέρεις αν υπάρχει νεος αριθμός που προκύπτει από το αθροισμα ή όχι!

Δημοσ.

μαλιστα!!σκεφτηκα το αλλο,στην ουσια το 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.

Δημοσ.

Συνήθως για floating point operations προσπαθούμε πάντα πχ να αθροίζουμε τιμές που έχουν το κοντινότερο order of magnitude (πως είναι στα ελληνικά αυτό;) και όταν πολλαπλασιάζουμε αυτά που έχουν το μακρινότερο. Το κάνουμε για να μην χάνουμε σε ακρίβεια, καθώς οι floating point αριθμοί έχουν μια συγκεκριμένη ακρίβεια.

 

Μπορείς να κάνεις οποιαδήποτε πράξη θέλεις με όποιον αριθμό θέλεις (σε λογικά πλαίσια), δεδομένου ότι ξοδεύεις κάποια ώρα να μεταφέρεις την εξίσωσή σου σε μορφή που να "βολεύει" την μηχανή.

Δημοσ.

μαλιστα!βασικα ολο αυτο που σας ρωτησα ειναι ενα κομματι απο μια ολοκληρη συναρτηση που πρεπει να περασω στο matlab και να βγαλω την γραφικη.μεχει πεδεψει εδω και μηνες και δεν βρισκω ακρη.αμα δημοσιευσω ολη την συναρτηση λεγοντας σας φυσικα το τι εχω σκεφτει(και οχι να περιμενω ετοιμη λυση απο εσας,μιας και δεν θελω αυτο) τοτε ειναι δυνατον να με βοηθήσετε?

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

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

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