如何绘制高斯函数图?

How to draw graph of Gauss function?

对于正整数,

Gauss function 在 x = 1/n 处有无限数量的跳跃不连续点。

我想画高斯函数图。

使用 Maxima cas 我可以用简单的命令绘制它:

  f(x):= 1/x - floor(1/x);  plot2d(f(x),[x,0,1]);

但是效果不好(x=0附近应该是here

Maxima 也声称:

plot2d: expression evaluates to non-numeric value somewhere in plotting range.

我可以定义分段函数(在 x = 1/n 处跳跃不连续,对于正整数)

所以我试过了:

define( g(x), for i:2 thru 20 step 1 do if (x=i) then x else (1/x) - floor(1/x));

但它不起作用。

我还可以使用切比雪多项式来近似函数(例如:Corless、Robert、Fillion、Nicolas 从后向误差分析的角度对数值方法的研究生介绍)

如何正确操作?

对于plot2d,您可以设置adapt_depthnticks参数。默认值分别为 5 和 29。 set_plot_option()(即没有参数)returns 当前选项值列表。如果增加 adapt_depth and/or nticks,那么 plot2d 将使用更多点进行绘图。或许这让身材看起来足够好吧。

另一种方法是使用 draw2d 函数(在 draw 包中)并明确告诉它绘制每个线段。我们知道在 1/k 处存在不连续点,因为 k = 1, 2, 3, .... 我们必须决定要绘制多少段。假设 20.

(%i6) load (draw) $
(%i7) f(x):= 1/x - floor(1/x) $
(%i8) makelist (explicit (f, x, 1/(k + 1), 1/k), k, 1, 20);
(%o8) [explicit(f,x,1/2,1),explicit(f,x,1/3,1/2),
       explicit(f,x,1/4,1/3),explicit(f,x,1/5,1/4),
       explicit(f,x,1/6,1/5),explicit(f,x,1/7,1/6),
       explicit(f,x,1/8,1/7),explicit(f,x,1/9,1/8),
       explicit(f,x,1/10,1/9),explicit(f,x,1/11,1/10),
       explicit(f,x,1/12,1/11),explicit(f,x,1/13,1/12),
       explicit(f,x,1/14,1/13),explicit(f,x,1/15,1/14),
       explicit(f,x,1/16,1/15),explicit(f,x,1/17,1/16),
       explicit(f,x,1/18,1/17),explicit(f,x,1/19,1/18),
       explicit(f,x,1/20,1/19),explicit(f,x,1/21,1/20)]
(%i9) apply (draw2d, %);

我已经制作了一个带有结束点的片段列表。结果是:

完整代码是here

编辑:在几乎是直线的情况下,更小的尺寸和更短的列表,

if (n>20) then iMax:10 else iMax : 250,

在 GivePart 函数中