如何绘制高斯函数的图形?

3

高斯函数在正整数x = 1/n处具有无限个跳跃间断点。

我想画出高斯函数的图表。

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

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

在这里输入图片描述

但结果并不好(在x=0附近应该像这里)。

此外,Maxima声称:

plot2d:表达式在绘图范围内的某个地方评估为非数字值。

我可以定义分段函数(在正整数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)。

如何正确地做到这一点?

2个回答

4
对于plot2d,您可以设置adapt_depthnticks参数。默认值分别为5和29。set_plot_option()(即没有参数的情况下)返回当前选项值列表。如果您增加adapt_depth和/或nticks,那么plot2d将使用更多点进行绘制。也许这样可以使图像看起来足够好。
另一种方法是使用draw包中的draw2d函数,并明确告诉它绘制每个线段。我们知道在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, %);

太好了。它的效果更好了。那子域名的端点怎么样,比如:https://commons.wikimedia.org/wiki/File:Upper_semi.svg? - Adam
我不确定你的意思。draw2d(explicit(x ^ 2,x,-2,1),explicit(3-(x-2)^ 2,x,1,4))绘制了你链接的图形。这只是使用我上面展示的相同方法 - 在一个draw2d中使用多个explicit表达式。 - Robert Dodier
我已经制作了新的图片,请见下方。 - Adam

3
我已经列出了一份带有结束点的分段清单。结果如下:enter image description here 完整的代码在这里
编辑:如果几乎是直线,则在较短的列表中使用更小的尺寸,代码如下:
如果(n>20)则iMax:10 else iMax:250,
在GivePart函数中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接