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

Σειρά Taylor (sin,cos) ANSI C


Bill_P

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

Καλησπέρα, μια από τις ασκήσεις που μου ζητήθηκε για μια εργασία στο πανεπιστήμιο θέλει αυτό. Αν μπορεί κάποιος να με βοηθήσει.

Να γραφεί πρόγραμμα το οποίο θα υπολογίζει το ημίτονο και το συνημίτονο μίας γωνίας η οποία δίνεται σε μοίρες. Οι υπολογισμοί του ημιτόνου και του συνημίτονου γίνονται με τους τύπους:

2mctKA-PwKFENOPEJcfD7-XfkQi8nckroJLVHN90TTI20Ro8LH108TZnjSY7orikYXL6rNbBlOknvvG_-szovuAlrN85_5nxxWDJCyYyo5AVbtg68LSW0sKjeZ2r-TIhGA

C3taCnouqRmYYU0EfdFFW8MEGMjyBrJJri7pricf41ndgWF1xho7H-eqKu6Jstl1nwhv1UdjD8De4gw3uYg4w2nECqz2SnbeuLFg_7Nexz0HsLt2VBwoj5vREA98FaVcUw

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τι πανεπιστήμιο ειναι αυτο που ζηταει taylor sums;

Τεσπα, πρόσθεση αφαίρεση κλασμα δυναμη προφανώς τα ξερεις. Αυτα που λογικα δεν ξερεις ειναι το χ! Και το χ+1 + χ+2... 

Το πρωτο ειναι factorial και υπολογιζεται ως γινόμενο ολων τον αριθμων απο το 1 εως χ. Πχ 3! = 1*2*3, 4!=1*2*3*4 κλπ

Το δεύτερο ειναι το συμβολο της επανάληψης, δηλαδη η παραπανω συναρτησεις δεν τελειωνουν ποτε.

Η κλασικη υλοποίηση ειναι με λουπ, αλλα επειδη τα παραπανω φτανουν πολυ γρηγορα στα limits των float double μεταβλητών, θα σου ελεγα απλα να αντιγράψεις τις συναρτησςις ως ειναι, αντε να φτασεις τη πρωτη μεχρι 17!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

45 λεπτά πριν, παπι είπε

Τι πανεπιστήμιο ειναι αυτο που ζηταει taylor sums;

Τεσπα, πρόσθεση αφαίρεση κλασμα δυναμη προφανώς τα ξερεις. Αυτα που λογικα δεν ξερεις ειναι το χ! Και το χ+1 + χ+2... 

Το πρωτο ειναι factorial και υπολογιζεται ως γινόμενο ολων τον αριθμων απο το 1 εως χ. Πχ 3! = 1*2*3, 4!=1*2*3*4 κλπ

Το δεύτερο ειναι το συμβολο της επανάληψης, δηλαδη η παραπανω συναρτησεις δεν τελειωνουν ποτε.

Η κλασικη υλοποίηση ειναι με λουπ, αλλα επειδη τα παραπανω φτανουν πολυ γρηγορα στα limits των float double μεταβλητών, θα σου ελεγα απλα να αντιγράψεις τις συναρτησςις ως ειναι, αντε να φτασεις τη πρωτη μεχρι 17! 

Το ζητάνε στο τει αθήνας που έγινε ΠαΔΑ (1ο εξάμηνο). Με αυτούς ξέρω ήδη τι είναι το παραγοντικό. Αφού έχει και άλλες ασκήσεις με το παραγοντικό και έβαλε και μία με συνδυασμό δύο αριθμών (Α ανά Β).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

6 λεπτά πριν, παπι είπε

Τοτε που κόλλησες; 

Εννοώ τα έμαθα από Google, δεν μας το είχε πει. Εργαστήριο μπήκαμε αρχές δεκέμβρη. Δεν ξέρω η αλήθεια είναι που κόλλησα, ίσως γιατί έκανα πριν 2 ασκήσεις που θέλουν 1 ώρα και.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

10 λεπτά πριν, Bill_P είπε

Εννοώ τα έμαθα από Google, δεν μας το είχε πει. Εργαστήριο μπήκαμε αρχές δεκέμβρη. Δεν ξέρω η αλήθεια είναι που κόλλησα, ίσως γιατί έκανα πριν 2 ασκήσεις που θέλουν 1 ώρα και.

Ok... Για να δω που εισαι, μπορεις να φτιαξεις μια συναρτηση στη C που να παιρνει x,y και να επιστρεφει το αποτελεσμα του x^y / y! ;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ένας προγραμματιστής με στοιχειώδη εκπαίδευση ποτέ δεν θα χρησιμοποιήσει ανεπεξέργαστες τέτοιες σειρές Taylor για αριθμητικές πράξεις. Ποτέ.
Π.χ., η παραπάνω έκφραση για το ημίτονο είναι ανακριβής για x>3 και χειροτερεύει όλο και περισσότερο όσο το x αυξάνεται.
Και αντίθετα απ' ότι περιμένει κάποιος, όσο πιο πολλοί όροι χρησιμοποιηθούν, τόσο το αποτέλεσμα είναι χειρότερο !

Υπάρχουν σχέσεις που προσεγγίζουν σε συγκεκριμένα διαστήματα τέτοιες συναρτήσεις (sin, cos, arcsin κ.α.) με προσαρμογή πολυωνύμων
που είναι και πολύ γοργότερες και πολύ ακριβείς. Το τυπολόγιο των Abramowitz & Stegun, 1965 είναι μια πολύ καλή πηγή για τέτοιες σχέσεις.

-

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
15 λεπτά πριν, V.I.Smirnov είπε

Π.χ., η παραπάνω έκφραση για το ημίτονο είναι ανακριβής για x>3 και χειροτερεύει όλο και περισσότερο όσο το x αυξάνεται.

Ποιος το λέει αυτό (το x είναι ακτίνια, όχι μοίρες);  

Επεξ/σία από albNik
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

7 λεπτά πριν, παπι είπε

Αν δε κανω λαθος ειναι οκ για -1,1 μετα ειναι οτι ναναι

μάλλον [-π, π] εννοούσες.
Αλλά η σειρά taylor ισχύει για κάθε x.
Επίσης είναι και περιοδικη sin(x)=sin(x+2π)  δηλαδή sin(50)=sin(50%2π)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
1 ώρα πριν, albNik είπε

Ποιος το λέει αυτό (το x είναι ακτίνια, όχι μοίρες);  

Οι σειρές Taylor είναι πολύ χρήσιμες σε θεωρητική δουλειά,
π.χ. όταν το x είναι μικρό, πολύ συχνά αντικαθιστούμε το sinx με x, ή τo cosx με 1.

Οι συγκεκριμένες σειρές για το sinx θεωρητικά έχουν ακτίνα σύγκλισης όλο το R.
Αλλά για αριθμητικές πράξεις (και κύρια για τιμές x>3) είναι σκέτη καταστροφή.
Kαι εκατό όρους να αθροίζεις, σύγκλιση δεν θα βλέπεις, ειδικά σε απλή ακρίβεια.
Το ότι συγκλίνουν θεωρητικά δεν σημαίνει ότι έχουν καλή αριθμητική συμπεριφορά.
Η αιτία είναι το σφάλμα ακύρωσης. Η προειδοποίηση αυτή υπάρχει σε πολλά βιβλία.

 

Για άλλες συναρτήσεις όπως Bessel, Hankel κ.α. είναι πιο δύσκολα τα πράγματα.
Υπάρχει πληθώρα αναπαραστάσεών τους με σειρές και αναδρομικές σχέσεις αλλά
αριθμητικά οι περισσότερες δεν μπορούν να χρησιμοποιηθούν όπως δίνονται στα εγχειρίδια.
Π.χ., για τον σωστό υπολογισμό των Bessel οι αναδρομικές σχέσεις πρέπει να χρησιμοποιηθούν ανάποδα απ' ότι δίνονται (!),
(από τον τελευταίο όρο προς τον πρώτο), κάτι που δεν είναι προφανές πώς θα το κάνεις.

 

Ειδικά για την sinx , oι σχέσεις π.χ.,

sin(x)/x = 1− 0.16605 x^2 + 0.00761 x^4

sin(x)/x = 1− 0.1666666664 x^2 + 0.0083333315 x^4 − 0.0001984090 x^6 + 0.0000027526 x^8 − 0.0000000239 x^10

είναι πολύ ταχύτερες και έχουν οριοθετημένο σφάλμα περίπου <2·10^ -4 και <2.5·10^ -8,  αρκετά μικρό για πολλές εφαρμογές (π.χ. γραφικά).
Ισχύουν στο [0, π/2] αν θυμάμαι καλά.

-

 

 

 

 

 

 

 

 

 

 

 

 

 

Επεξ/σία από V.I.Smirnov
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
13 λεπτά πριν, V.I.Smirnov είπε

Αλλά για αριθμητικές πράξεις (και κύρια για τιμές x>3) είναι σκέτη καταστροφή.

Όπως είπα δεν έχει νόημα για x>2*3.14 διότι επαναλαμβάνεται.

 Αλλά και για x=6 μετά από σχετικά λίγους όρους σταθεροποιείται και το σφάλμα είναι αμελητεο.

(6^17)/17! = 0.04...

(6^19)/19! = 0.005...

(6^21)/21! = 0.00004...

Επεξ/σία από albNik
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...