Line approximation of trigonometric and inverse trigonometric functions using Taylor expansion

taylor expand

def taylor_approximation(func, x, n):
    """
    使用泰勒级数展开逼近函数
    """
    result = 0.0
    for i in range(n):
        coef = func(i)
        term = coef * math.pow(x, i)
        result += term
    return result

sin

def approximate_sin(x, n):
    """
    使用泰勒级数展开逼近正弦函数
    """
    def coef(i):
        return (-1) ** i / math.factorial(2 * i + 1)
    return taylor_approximation(coef, x, n)

cos

def approximate_cos(x, n):
    """
    使用泰勒级数展开逼近余弦函数
    """
    def coef(i):
        return (-1) ** i / math.factorial(2 * i)
    return taylor_approximation(coef, x, n)

tan

def approximate_tan(x, n):
    """
    使用泰勒级数展开逼近正切函数
    """
    def coef(i):
        if i == 0:
            return 0
        elif i % 2 == 1:
            return 0
        else:
            return 2 * math.pow(-1, i // 2) * (2 ** (2 * i) - 1) * math.factorial(2 * i)
    return taylor_approximation(coef, x, n)

arcsin

def approximate_arcsin(x, n):
    """
    使用泰勒级数展开逼近反正弦函数
    """
    def coef(i):
        numerator = math.factorial(2 * i)
        denominator = 4 ** i * math.factorial(i) ** 2 * (2 * i + 1)
        return numerator / denominator
    return taylor_approximation(coef, x, n)

arccos

def approximate_arccos(x, n):
    """
    使用泰勒级数展开逼近反余弦函数
    """
    def coef(i):
        return (-1) ** i * approximate_arcsin(x, i)
    return math.pi / 2 - taylor_approximation(coef, x, n)

arctan

def approximate_arctan(x, n):
    """
    使用泰勒级数展开逼近反正切函数
    """
    def coef(i):
        return (-1) ** i / (2 * i + 1)
    return taylor_approximation(coef, x, n)

arctan2

# 使用泰勒级数展开逼近arctan2函数(两个参数版本)
def approximate_arctan2(y, x, n):
    """
    使用泰勒级数展开逼近反正切函数(两个参数版本)
    """
    if x == 0.0:
        if y > 0.0:
            return math.pi / 2
        elif y < 0.0:
            return -math.pi / 2
        else:
            return 0.0
    else:
        angle = approximate_arctan(y / x, n)
        if x < 0.0:
            if y >= 0.0:
                angle += math.pi
            else:
                angle -= math.pi
        return angle

# 示例使用
x = 1.0  # 输入值 x
y = 2.0  # 输入值 y
n = 10   # 截断
approximation = approximate_arctan2(y, x, n)
print(approximation)

Guess you like

Origin blog.csdn.net/weixin_57399429/article/details/130687629