Я написал две функции, которые должны вычислять e ^ (- x):
def taylor1(x, n=12):
sum = 0
for i in range(n):
sum += ( (-x)**i) / math.factorial(i)
return sum
def taylor2(x, n=12):
sum = 0
for i in range(n):
sum += ( x**i) / math.factorial(i)
return 1/sum
Первая напрямую вычисляет e ^ (- x), а вторая - 1 / e ^ (x),Теоретически обе функции должны возвращать одинаковые значения, но это не так:
Вывод для taylor1 ():
Exponent value for x=0: 1.0
Exponent value for x=5: -0.3592084034792353
Exponent value for x=10: -1162.6235369568703
Exponent value for x=15: -122924.17654220779
Exponent value for x=20: -3271048.1165624503
Exponent value for x=25: -41115385.050203174
Exponent value for x=30: -322535734.84415585
Вывод для taylor2 ():
Exponent value for x=0: 1.0
Exponent value for x=5: 0.006774891102970596
Exponent value for x=10: 6.515712399651421e-05
Exponent value for x=15: 1.655747452084087e-06
Exponent value for x=20: 9.637493883917857e-08
Exponent value for x=25: 9.808057158702018e-09
Exponent value for x=30: 1.4649434456831522e-09
Таким образом, значения, вычисленные с помощью taylor2()
, намного точнее.Почему это происходит?
Примечание: для значений x = 1, 2, 3, 4 обе функции выдают примерно одинаковые значения.После этого значения становятся заметно другими