Διαδρομές
/
Julia
Julia
/
Ασκήσεις
/
Προβληματικές πιθανότητες
Προβληματικές πιθανότητες

Προβληματικές πιθανότητες

Άσκηση εκμάθησης

Εισαγωγή

Οι Rational numbers είναι κλάσματα με ακέραιο αριθμητή διά ακέραιου παρονομαστή.

Για παράδειγμα, μπορούμε να αποθηκεύσουμε το 2//3 ως ακριβές κλάσμα αντί για την κατά προσέγγιση τιμή Float64 0.6666...

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

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

Δημιουργία ρητών αριθμών

Η δημιουργία είναι τόσο απλή όσο η χρήση του // ανάμεσα σε δύο ακέραιους.

julia> 3//4
3//4

julia> a = 3; b = 4;

julia> a//b
3//4

Οι κοινοί παράγοντες αφαιρούνται αυτόματα, μετατρέποντας το κλάσμα στην "ανάγωγη μορφή" του: τους μικρότερους ακέραιους που αντιπροσωπεύουν με ακρίβεια το κλάσμα, με μη αρνητικό παρονομαστή.

julia> 5//15
1//3

julia> 5//-15
-1//3

Αριθμητική με ρητούς αριθμούς

Οι συνήθεις arithmetic operators + - * / ^ % λειτουργούν με τους ρητούς, ουσιαστικά όπως και με τους άλλους αριθμητικούς τύπους.

Ακέραιοι και άλλα Rationals μπορούν να συμπεριληφθούν και δίνουν αποτέλεσμα Rational. Η συμπερίληψη ενός float στην παράσταση έχει ως αποτέλεσμα έξοδο float, με επακόλουθη (πιθανή) απώλεια ακρίβειας.

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

julia> 3//4 + 1//3  # addition
13//12

julia> 3//4 * 1//3  # multiplication
1//4

julia> 3//4 / 1//3  # division
9//4

julia> 3//4 ^ 2  # exponentiation
3//16

julia> 3//4 + 5  # rational and int => rational
23//4

julia> 3//4 + 5.3  # rational and float => float
6.05

julia> float(3//4)  # casting
0.75

Άλλες πράξεις

Στη Julia, οι ρητοί αριθμοί είναι απλώς αριθμοί. Ο μεταγλωττιστής συνήθως μετατρέπει τους τύπους όπως χρειάζεται.

Ωστόσο, πρόσεξε ότι οι συγκρίσεις λειτουργούν για κλάσματα με πεπερασμένη δεκαδική αναπαράσταση:

julia> 3//4 == 0.75
true

julia> 3//4 < 0.74
false

Διαφορετικά, ένα Rational θα πρέπει να μετατρέπεται σε Float για συγκρίσεις:

julia> 1//3 == 1/3
false

julia> float(1//3) == 1/3
true

Οι μαθηματικές συναρτήσεις δέχονται ρητούς ως είσοδο, αλλά μπορεί να δώσουν αποτέλεσμα κινητής υποδιαστολής:

julia> sqrt(9//16)
0.75

Οδηγίες

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

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

Έγιναν δύο είδη μελετών:

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

Οι ανώτεροι ερευνητές σου ζητούν να γράψεις συναρτήσεις που θα τους βοηθήσουν να προσδιορίσουν αν υπάρχουν σφάλματα στρογγυλοποίησης στις αναλύσεις από τη χρήση floats, και σου ζητούν να δώσεις έναν ακριβή ρητό αριθμό για το αποτέλεσμα αν υπάρχουν σφάλματα.

1. Δώσε τον λόγο των επιτυχιών προς τις δοκιμές

Η συνάρτηση rationalize(successes, trials) δέχεται δύο πίνακες, τους successes και trials. Για μια θέση i, το successes[i] αντιστοιχεί στον αριθμό των επιτυχιών που σημειώθηκαν σε trials[i] δοκιμές. Η συνάρτηση επιστρέφει έναν πίνακα ρητών αριθμών των επιτυχιών προς τον αριθμό των δοκιμών, με την ίδια σειρά με τους πίνακες εισόδου.

julia> rationalize([1, 2, 3], [4, 5, 6])
3-element Vector{Rational{Int64}}:
 1//4
 2//5
 1//2

2. Βρες τις πραγματικές πιθανότητες που αντιστοιχούν στις επιτυχίες προς τις δοκιμές

Παρομοίως, η συνάρτηση probabilities(successes, trials) δέχεται δύο πίνακες, τους successes και trials. Επιστρέφει έναν πίνακα από floats των επιτυχιών προς τον αριθμό των δοκιμών, με την ίδια σειρά με τους πίνακες εισόδου.

julia> probabilities([1, 2, 3], [4, 5, 6])
3-element Vector{Float64}:
 0.25
 0.4
 0.5

3. Έλεγξε τον μέσο όρο των πιθανοτήτων

Η checkmean(successes, trials) δέχεται τους δύο πίνακες, successes και trials. Ελέγχει τον μέσο όρο των πραγματικών πιθανοτήτων έναντι του μέσου όρου των ρητών πιθανοτήτων.

  • Αν οι δύο πιθανότητες είναι ίσες, η checkmean επιστρέφει true
  • Αν οι δύο πιθανότητες είναι διαφορετικές, η checkmean επιστρέφει τη ρητή πιθανότητα.
julia> successes, trials = [9, 4, 7, 8, 6], [22, 22, 11, 17, 12];
julia> checkmean(successes, trials)
true

julia> successes, trials = [6, 5, 9, 8, 9], [21, 19, 13, 25, 22];
julia> checkmean(successes, trials)
1873629//4754750

4. Έλεγξε την ανεξάρτητη πιθανότητα

Η checkprob(successes, trials) δέχεται τους δύο πίνακες, successes και trials. Ελέγχει τη συνολική πιθανότητα των float πιθανοτήτων έναντι της συνολικής πιθανότητας των ρητών πιθανοτήτων.

  • Αν οι δύο πιθανότητες είναι ίσες, η checkprob επιστρέφει true
  • Αν οι δύο πιθανότητες είναι διαφορετικές, η checkprob επιστρέφει τη ρητή πιθανότητα.
julia> successes, trials = [2, 9, 4, 4, 5], [15, 11, 17, 19, 15];
julia> checkprob(successes, trials)
true

julia> successes, trials = [9, 8, 5, 4, 3], [22, 14, 19, 25, 18];
julia> checkprob(sucesses, trials)
12//7315
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Julia Exercism

Έτοιμος να ξεκινήσεις την άσκηση Προβληματικές πιθανότητες;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Julia με 35 έννοιες128 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.