Python - výpočet funkce exp(x)

Z GeoWikiCZ
Přejít na: navigace, hledání

Uživatelská funkce Exp(x) počítá Taylorův rozvoj funkce e^x = \sum 1 + x +  {x^2 \over 2!} + {x^3 \over 3!} + \ldots

 #!/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
  1. vysvětlete podmínku cyklu while  (předpokládáme, že relativní přesnost dané aritmetiky pohyblivé řádové čárky je 10^{-16} )
  2. proč funkce Exp(x) dává správné výsledky pro kladné argumenty a nepřesné výsledky pro argumenty záporné
  3. upravte funkci Exp(x) tak, aby dávala správné výsledky i pro záporné argumenty

[ Zpět ]