Вычисление функций разложением в ряд Тейлора

Помогите, пожалуйста, решить проблему с вычислением функций разложением в ряд Тейлора. Первый столбец отвечает за значения аргумента, второй столбец за значения функции в точке. Третий столбец с неверными числами: там должны быть более точные значения функции (примерно равные числам со второго столбца), так как они вычисляются разложением функции в ряд Тейлора.

import math as m1 
a = -0.1
b = 1
eps = 0.00001
def f(a):
    return (1/(m1.sqrt(1+a))) 

def doublefactorial(n):
    if n <= 0:
        return 1
    else:
        return n * doublefactorial(n-2)
        
def test(a):    
    n=2
    an=a
    S=0.0
    while abs(an)>=eps: 
        S+=an            
        an*= (-1)**(n-1)*(doublefactorial(2*n-1))*(a**(n))/(doublefactorial(2*n))            
        n+= 1
    return S        
    

    
print("  xi | f(xi)")
print("---------------------------------------------------------------------")
while a < b:
    if a != -0.1:
        print("", round(a, 2), "|", round(f(a), 3), round(test(a),3))
    else:
        print(round(a, 2), "|", round(f(a), 3), round(test(a),3))    
    a += 0.1
    print("---------------------------------------------------------------------")

введите сюда описание изображения

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Harry
import math as m1 

def f(a):
    return (1/(m1.sqrt(1+a))) 

def test(x,eps):
    sum = 1
    n = 1
    t = 1
    while t*t > eps*eps:
        t *= -(2*n-1)*x/(2*n)
        n += 1
        sum += t
    return sum

a = -0.1
b = 0.9
eps = 0.00001

print("  xi | f(xi)")
print("---------------------------------------------------------------------")
while a < b:
    if a != -0.1:
        print("", round(a, 2), "|", round(f(a), 3), round(test(a,eps),3))
    else:
        print(round(a, 2), "|", round(f(a), 3), round(test(a,eps),3))    
    a += 0.1
    print("---------------------------------------------------------------------")

Только учтите, что ряд сходится, как у вас в условии написано, при -1<x<1, так что если написать

b = 1

то вычисления зациклятся - ряд не будет сходиться.

→ Ссылка