Python - výpočet funkce exp(x): Porovnání verzí
mBez shrnutí editace |
m zvyrazneni syntaxe+sablona python |
||
(Nejsou zobrazeny 3 mezilehlé verze od jednoho dalšího uživatele.) | |||
Řádek 1: | Řádek 1: | ||
Uživatelská funkce <tt>Exp(x)</tt> počítá Taylorův rozvoj funkce <math>e^x = \sum 1 + x + {x^2 \over 2!} + {x^3 \over 3!} + \ldots</math> | Uživatelská funkce <tt>Exp(x)</tt> počítá Taylorův rozvoj funkce <math>e^x = \sum 1 + x + {x^2 \over 2!} + {x^3 \over 3!} + \ldots</math> | ||
<source lang="python"> | |||
#!/usr/bin/python | #!/usr/bin/python | ||
Řádek 22: | Řádek 22: | ||
E = Exp(a) | E = Exp(a) | ||
print '%5.1f %18.12f %11.4e' % (a, E, (e-E)/e) | print '%5.1f %18.12f %11.4e' % (a, E, (e-E)/e) | ||
</source> | |||
Na výstupu program vypisuje argument, vypočtenou hodnotu funkce a její relativní chybu | Na výstupu program vypisuje argument, vypočtenou hodnotu funkce a její relativní chybu určenou porovnáním se standardní funkcí <tt>math.expt(x)</tt> | ||
-10.0 0.000045399930 2.0283e-09 | -10.0 0.000045399930 2.0283e-09 | ||
Řádek 49: | Řádek 50: | ||
===== Otázky ===== | ===== Otázky ===== | ||
# vysvětlete podmínku cyklu <tt>while</tt> (předpokládáme, že relativní přesnost dané aritmetiky pohyblivé | # vysvětlete podmínku cyklu <tt>while</tt> (předpokládáme, že relativní přesnost dané aritmetiky pohyblivé řádové čárky je <math>10^{-16}</math> ) | ||
# proč funkce <tt>Exp(x)</tt> dává správné výsledky pro kladné argumenty a nepřesné výsledky pro argumenty záporné | # proč funkce <tt>Exp(x)</tt> dává správné výsledky pro kladné argumenty a nepřesné výsledky pro argumenty záporné | ||
# upravte funkci <tt>Exp(x)</tt> tak, aby dávala správné výsledky i pro záporné argumenty | # upravte funkci <tt>Exp(x)</tt> tak, aby dávala správné výsledky i pro záporné argumenty | ||
[ [[Python|Zpět]] ] | |||
{{Python}} |
Aktuální verze z 20. 4. 2008, 19:44
Uživatelská funkce Exp(x) počítá Taylorův rozvoj funkce
#!/usr/bin/python
from math import exp
def Exp(x):
clen = suma = N = 1.0
while abs(clen) > suma*1e-16:
clen *= x/N
suma += clen
N += 1
return suma
for a in range(-10,11):
e = exp(a)
E = Exp(a)
print '%5.1f %18.12f %11.4e' % (a, E, (e-E)/e)
Na výstupu program vypisuje argument, vypočtenou hodnotu funkce a její relativní chybu určenou porovnáním se standardní funkcí math.expt(x)
-10.0 0.000045399930 2.0283e-09 -9.0 0.000123409804 1.5204e-09 -8.0 0.000335462628 1.3348e-10 -7.0 0.000911881966 5.2224e-12 -6.0 0.002478752177 -1.4968e-12 -5.0 0.006737946999 1.2306e-13 -4.0 0.018315638889 1.2313e-14 -3.0 0.049787068368 -1.6725e-15 -2.0 0.135335283237 -2.0509e-16 -1.0 0.367879441171 -3.0179e-16 0.0 1.000000000000 0.0000e+00 1.0 2.718281828459 -1.6337e-16 2.0 7.389056098931 2.4040e-16 3.0 20.085536923188 3.5376e-16 4.0 54.598150033144 -5.2056e-16 5.0 148.413159102577 0.0000e+00 6.0 403.428793492735 0.0000e+00 7.0 1096.633158428458 6.2201e-16 8.0 2980.957987041726 6.1020e-16 9.0 8103.083927575382 2.2448e-16 10.0 22026.465794806714 1.6516e-16
Otázky
- vysvětlete podmínku cyklu while (předpokládáme, že relativní přesnost dané aritmetiky pohyblivé řádové čárky je )
- proč funkce Exp(x) dává správné výsledky pro kladné argumenty a nepřesné výsledky pro argumenty záporné
- upravte funkci Exp(x) tak, aby dávala správné výsledky i pro záporné argumenty
[ Zpět ]