如何绘制高斯函数图像?Maxima绘图异常及分段函数尝试问题
解决Maxima绘制f(x)=1/x - floor(1/x)图像的问题
嘿,我完全懂你遇到的糟心事——这个函数本质就是**frac(1/x)(1/x的小数部分)**,在x=1/n(n为正整数)处有密密麻麻的跳跃间断点,Maxima默认的绘图参数确实hold不住它,我给你几个实用的解决方案:
1. 调整采样点+避开x=0奇点
默认采样点数量太少,根本抓不住那些密集的间断点,而且x=0处函数无定义,直接包含x=0会触发数值错误。试试这个命令:
f(x) := 1/x - floor(1/x); plot2d(f(x), [x, 0.001, 1], [sample, 10000]);
- 把x起始范围设为
0.001,避开x=0的奇点,避免无意义的计算; [sample, 10000]把采样点拉到10000个,足够捕捉到大部分间断点,图像会清晰很多。
2. 变量替换简化绘图逻辑
这个函数的核心逻辑是:当x从0到1时,1/x从+∞降到1,函数值其实就是1/x的小数部分。我们可以换个变量t=1/x,把函数转换成frac(t),这样绘图更直观,Maxima也更容易处理:
plot2d(frac(t), [t, 1, 100], [xlabel, "x=1/t"], [ylabel, "f(x)"]);
这里t从1到100,对应x从1到0.01,frac(t)的图像是标准的锯齿波,把x轴标注为x=1/t,就能对应回原函数的图像,还不会有数值溢出的问题。
3. 为啥原来的绘图会报错?
你看到的plot2d: expression evaluates to non-numeric value somewhere in plotting range错误,大概率是因为x太接近0时,1/x的数值过大,超出了Maxima处理整数的范围,导致floor(1/x)无法返回有效数值。避开x=0附近的极小值就能解决这个问题。
如果想要更精细的图像,还可以把x范围拆成多个区间分别绘制(比如[0.001, 0.1]和[0.1,1]),给每个区间设置不同的采样点,不过一般来说第一种或第二种方法就足够用了。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

