使用TensorFlow实现cos(x)+1的7阶泰勒展开时结果与实际值不符
泰勒展开代码问题定位
- 首先明确:你当前输出的-0.21135不是代码计算笔误的结果,而是逻辑正确截断到x⁶项的必然值。代入数学公式验证:
2 - (3.14159²)/2! + (3.14159⁴)/4! - (3.14159⁶)/6! ≈ -0.21135,和你的输出完全匹配。 - 偏差产生的第一个核心原因是对展开精度的预期不符合实际:
你实现的是cos(x)+1在x=0处的麦克劳林展开,这类展开仅在x靠近0的位置能快速收敛到高精度。如果严格按照“最高阶数为7”的要求截断,由于展开式仅包含偶次项,能取到的最高幂次就是x⁶。此时在x=3.14(距离展开点3个多单位)的位置,截断误差达到0.2量级是正常的数学结果,根本不可能达到3.5e-12的精度。你看到的高精度值,需要把展开延伸到x^12及更高次项才能实现,远超出7阶截断的能力范围。 - 偏差产生的第二个核心原因是循环范围设置错误:
如果你本意是要尽可能逼近x=3.14处的真实值,仅循环到i=3(对应x⁶项)是远远不够的。你目前的交替符号判断逻辑(i为奇数时减项、偶数时加项)是完全匹配展开要求的,但需要把循环范围向外扩展,逐次累加x⁸、x¹⁰、x¹²等高次项,才能快速压低截断误差,最终得到接近真实值的结果。 - 代码实现的注意事项:
- 你直接把
result初始值设为2,已经提前计入了展开的常数项,要避免在循环里重复计算x^0对应的项,否则会引入1的常数偏差。 - 计算阶乘时要注意数值边界,当展开项数较多时,高次幂和阶乘的数值会快速增长,需要和TensorFlow的张量运算精度做好匹配。
- 你直接把
内容的提问来源于stack exchange,提问作者Naman Bansal
相关产品推荐
相关产品推荐

