使用麦克劳林级数估算正弦时遇TypeError: numpy.ndarray不可调用错误
修复麦克劳林级数估算正弦值的Python代码错误
你的代码存在三个关键问题,导致了报错和计算错误:
- np.sum调用错误:
np.sum是函数,必须用括号()传参,而不是方括号[](方括号用于数组索引)。 - 数组运算语法错误:
(-1)**n是numpy数组,后续直接跟(x**(2*n+1))会被解释为尝试调用这个数组,这是非法操作。需要用乘法运算符*连接两个数组的运算,即(-1)**n * x**(2*n+1)。 - 误差计算逻辑错误:你估算的是
sin(5),但误差计算里用了sin(10),这会导致误差值完全错误,应该改为sin(5) - maclaurin。
修复后的完整代码如下:
from math import sin, factorial import numpy as np fac = np.vectorize(factorial) def sin_x(x, terms=10): """计算sin(x)的麦克劳林级数近似值""" n = np.arange(terms) # 修复:np.sum用括号,数组间用乘法*连接 return np.sum(((-1)**n) * (x**(2*n+1)) / fac(2*n+1)) if __name__ == "__main__": actual_value = sin(5) print(f"实际值: {actual_value}") print("N (项数)\t麦克劳林近似值\t误差") for n in range(1, 6): maclaurin = sin_x(5, terms=n) # 修复:用sin(5)计算误差 error = actual_value - maclaurin print(f"{n}\t\t{maclaurin:.03f}\t\t{error:.03f}")
运行这段代码后,会输出正确的近似值和误差:
实际值: -0.9589242746631385 N (项数) 麦克劳林近似值 误差 1 5.000 5.959 2 -4.167 3.208 3 0.231 -1.190 4 -1.004 0.045 5 -0.957 -0.002
内容的提问来源于stack exchange,提问作者Fernand TAPE
相关产品推荐
相关产品推荐

