为何ManimCE绘制的(1+1/x)^x函数图像与预期不符?
问题分析与解决
你绘制的函数$(1+1/x)^x$在$x>0$时是严格单调递增趋近于e的,和Desmos的图像差异(顶部凸起)主要来自两个问题:
- x=0无定义点的干扰:原代码
x_range=[0,X_MAX]包含了函数无定义的x=0,Manim处理x趋近于0的采样点时,浮点数精度问题会导致异常计算值,进而出现虚假凸起。 - pow函数的数值稳定性不足:直接用
pow(1+1/x, x)计算,在x极小或极大时易出现精度损失,导致函数值偏离真实曲线。
修正方案
1. 优化函数计算逻辑
用指数+对数的形式替代pow,同时借助math.log1p提升大x场景下的计算精度:
import math def func(x): # log1p(y)等价于ln(1+y),当y很小时计算精度更高 return math.exp(x * math.log1p(1/x))
2. 调整绘图参数
避开x=0的无定义区域,同时增加采样点保证图像平滑度:
graph = axes.plot( lambda x: func(x), color=BLUE, stroke_width=2, x_range=[1e-5, 1000], # 从极小正数开始,避开x=0 num_sample_points=10000 # 增加采样点,提升曲线精度 )
修改后绘制的图像会和Desmos完全一致:从接近1的位置单调递增,逐步趋近于e(≈2.718),不会再出现虚假的顶部凸起。
内容的提问来源于stack exchange,提问作者Rohan
相关产品推荐
相关产品推荐

