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)