Kurzusok
/
Julia
Julia
/
Feladatok
/
Problémás valószínűségek
Problémás valószínűségek

Problémás valószínűségek

Tanulófeladat

Bevezetés

A Rational numbers olyan törtek, amelyeknek a számlálója és a nevezője is egész szám.

Például a 2//3-at eltárolhatjuk pontos törtként a hozzávetőleges Float64 érték helyett, ami 0.6666...

Ennek az az előnye, hogy (kivéve az egész szám túlcsordulás szélsőséges esetét) a racionális szám pontos marad, elkerülve azokat a kerekítési hibákat, amelyek a lebegőpontos számoknál gyakran elkerülhetetlenek.

A racionális számok meglehetősen egyszerű numerikus típust alkotnak, és pontosan úgy viselkednek, ahogy várnád. Mivel a Julia korai verziói óta szabványos típusnak számítanak, a legtöbb függvény ugyanúgy elfogadja őket bemenetként, mint az egész számokat és a lebegőpontos számokat.

Racionális számok létrehozása

A létrehozás nem bonyolultabb annál, mint hogy //-t írunk két egész szám közé.

julia> 3//4
3//4

julia> a = 3; b = 4;

julia> a//b
3//4

A közös tényezőket automatikusan eltávolítja, így a tört a „legegyszerűbb alakjára” redukálódik: a legkisebb egész számokra, amelyek pontosan reprezentálják a törtet, nem negatív nevezővel.

julia> 5//15
1//3

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

Aritmetika racionális számokkal

A szokásos arithmetic operators, a + - * / ^ % ugyanúgy működik a racionális számokkal, lényegében mint a többi numerikus típussal.

Az egész számok és más Rational-ok is szerepelhetnek benne, és Rational eredményt adnak. Ha float kerül a kifejezésbe, az eredmény is float lesz, ami a pontosság esetleges elvesztésével járhat.

Ha float-ra van szükséged, egyszerűen a float() függvénnyel alakítsd át a racionális számot. Teljesen megszokott, hogy egy hosszú számítás során racionális számokkal őrizzük meg a pontosságot, majd a végén lebegőpontos számmá alakítjuk az eredményt.

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

Egyéb műveletek

A Juliában a racionális számok egyszerűen csak számok. A fordító általában szükség szerint átalakítja a típusokat.

Vigyázat azonban: az összehasonlítás csak véges tizedestört alakkal rendelkező törteknél működik:

julia> 3//4 == 0.75
true

julia> 3//4 < 0.74
false

Minden más esetben viszont az összehasonlításhoz a Rational-t Float-tá kell alakítani:

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

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

A matematikai függvények elfogadnak racionális számokat bemenetként, de lebegőpontos eredményt adhatnak:

julia> sqrt(9//16)
0.75

Utasítások

Egy kutatószervezet észrevette, hogy néhány fiatal kutatója kevésbé optimális módszerekkel dolgozott az elemzései során. Az egyik ilyen módszer, hogy a diszkrét valószínűségeket még a további számítások előtt azonnal tizedes törtekké (vagyis valós számokká) alakítják.

A tapasztalt kutatók inkább racionális számokkal szeretnének számolni, mert azok nagyobb pontosságot nyújthatnak, és szeretnék megtudni, hogy a fiatal kutatók rossz gyakorlata hatással volt-e a vizsgálatok eredményeire.

Kétféle vizsgálatot végeztek:

  • Sok tesztet futtattak, amelyek mindegyike egy diszkrét siker-valószínűséget adott vissza, majd kiszámították ezeknek a valószínűségeknek az átlagát.
  • Sok független eseményt vizsgáltak, és kiszámították annak a teljes valószínűségét, hogy minden esemény bekövetkezik, a valószínűségek összeszorzásával.

A tapasztalt kutatók arra kérnek, hogy írj függvényeket, amelyek segítenek megállapítani, hogy a tizedes törtekkel végzett számítások miatt vannak-e kerekítési hibák az elemzésekben, és ha vannak, adj meg egy pontos racionális számot az eredményre.

1. Add meg a sikerek és a kísérletek arányát

A rationalize(successes, trials) függvény két tömböt kap: a successes-t és a trials-t. Egy i index esetén a successes[i] a trials[i] számú kísérlet során elért sikerek számát adja meg. A függvény a sikereknek a kísérletek számához viszonyított arányát adja vissza racionális számok tömbjeként, ugyanabban a sorrendben, mint a bemeneti tömbök.

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

2. Keresd meg a sikerekhez tartozó valós valószínűségeket

Hasonlóképpen a probabilities(successes, trials) függvény is két tömböt kap: a successes-t és a trials-t. A sikereknek a kísérletek számához viszonyított arányát adja vissza tizedes törtek tömbjeként, ugyanabban a sorrendben, mint a bemeneti tömbök.

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

3. Ellenőrizd a valószínűségek átlagát

A checkmean(successes, trials) a két tömböt, a successes-t és a trials-t kapja. A valós valószínűségek átlagát hasonlítja össze a racionális valószínűségek átlagával.

  • Ha a két valószínűség egyenlő, a checkmean a true értéket adja vissza.
  • Ha a két valószínűség különbözik, a checkmean a racionális valószínűséget adja vissza.
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. Ellenőrizd a független valószínűséget

A checkprob(successes, trials) a két tömböt, a successes-t és a trials-t kapja. A tizedes tört valószínűségek együttes valószínűségét hasonlítja össze a racionális valószínűségek együttes valószínűségével.

  • Ha a két valószínűség egyenlő, a checkprob a true értéket adja vissza.
  • Ha a két valószínűség különbözik, a checkprob a racionális valószínűséget adja vissza.
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
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Julia Exercism

Készen állsz elkezdeni a(z) Problémás valószínűségek feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Julia nyelvet 35 fogalom128 feladat segítségével, valódi emberi mentorálással, mindez ingyen.