用户:陈鹏九查看:1 回复:3 评论:1 创建时间:2024-07-24T19:50:07
泰勒展开的计算结果和用正弦计算的结果差了那么多,请问这是怎么回事?
import math
def jiecheng(num):
#阶乘
result = 1
for j in range(1, (num + 1)):
result = (result * j)
return result
def calculator_sine(θ):
global num_sum #全局变量
num_sum = 0
#泰勒展开
for i in range(1, lim):
num_sum += (((-1) ** (i - 1) * θ ** (i * 2 - 1)) / jiecheng(i * 2 - 1))
return num_sum
c = int(input('x='))
lim = int(input('limit='))
print('泰勒展开得:',calculator_sine(c))
print('原值:',math.sin(c))
点赞1
评论
泰勒展开的项数处理:
泰勒展开函数 calculator_sine 中,循环是从 1 开始到 lim。但是,泰勒展开的正弦函数在 �=0x=0 处的形式通常包括 �x 的 00 次项(即 sin(0)=0sin(0)=0),但您的循环跳过了这一项。不过,由于 �0x0 的系数是 11 且 �=0x=0 时对结果无影响,所以这不是主要问题。但是,确保从正确的项开始计算是很重要的。
泰勒展开的精度:
泰勒展开的精度取决于 �x 的大小和展开的项数 lim。对于较大的 �x,需要更多的项才能获得较高的精度。此外,正弦函数的泰勒展开是交替序列,其误差项与最后一项同号且绝对值不超过它。因此,当 lim 较小且 �x 较大时,误差可能很大。
**全局变量 num_sum**:
虽然使用全局变量在这里可以工作,但它不是最佳实践。最好将 num_sum 作为函数的局部变量返回。
代码结构和可读性:
将阶乘函数和泰勒展开函数分开是正确的,但可以考虑使用 Python 的内置函数(如 math.factorial)来计算阶乘,以提高代码的可读性和效率。
改进后的代码:
下面是一个改进后的版本,包括了一些上述提到的改进点:
import math
def calculator_sine(θ, lim):
total_sum = 0
for i in range(lim):
term = ((-1) ** i * θ ** (2 * i + 1)) / math.factorial(2 * i + 1)
total_sum += term
return total_sum
c = float(input('x='))
lim = int(input('limit='))
print('泰勒展开得:', calculator_sine(c, lim))
print('原值:', math.sin(c))
点赞1
评论