6

我正在为 1 个变量的函数开发一个 2D 绘图程序。它的设计非常简单,因此用户不必选择初始绘图限制(或“范围”)。

是否有已知算法可以找到最有趣的绘图限制,只知道函数f(x)

笔记:

  • 有趣的情节限制的定义在这里没有很好地定义。这是问题的一部分:情节中最有趣的部分是什么?
  • 我已经有一个算法来确定函数f具有有限值的x值的范围。
  • 我正在使用 Javascript,但任何语言都可以。
  • 我不想使用现有的库。
  • 函数f仅限于用户可以使用基本数学运算符+ - * / ^和函数编写的表达式exp log abs sqrt sin cos tan acos asin atan ceil floor
  • 使用 Google 图表,您可以获得一些自动限制的示例。打字graph sin(x)效果很好,但graph exp(x)graph log(x)没有真正给出最好的结果。此外,graph sin(x*100)*exp(-x^2)不选择我认为信息最多的限制。但这对我来说已经足够了。

更新:

我发现PlotRangeMathematica中自动执行此操作非常好(请参见此处)。源代码是否可用,或解释算法的参考?我在任何地方都找不到它。

更新:

受此站点启发,我开始使用自适应细化算法来查找信息丰富的绘图范围。它还不能完美地工作,但目前的进展是在我的项目中实现。您可以尝试绘制一些函数,看看它是如何工作的。当我有一个完整的工作版本时,我可以发布一个答案。

4

1 回答 1

0

我没有完整的答案,但我可能有一些有用的想法可以开始。

对我来说,图表中有趣的部分包括:

  • 函数的所有根,除了有无限数量的根(我们可能对每个根不超过 8 个感兴趣)。

  • 函数的一阶和二阶导数的所有根,除根数无限的情况外。

  • 函数在 x = 0 附近的行为。

  • 渐近线的位置,尽管我不希望图表一直绘制到无穷大。

  • 要查看图形的特征​​,我希望它占用“合理”数量的矩形图形窗口。我认为这可以通过使函数的绝对值在绘图范围内的积分等于在图形窗口的 20-80% 范围内来实现。

因此,用于设置绘图限制的启发式草图可能类似于:

  1. 找到包含函数的所有根、它的一阶和二阶导数的范围,或者(对于具有无限个根的函数)(例如)最接近 x=0 的 8 个根。

  2. 如果范围不包括 x=0,则扩大范围以包括 x=0。

  3. 例如,将 x 范围在每个方向上扩大 10%,以确保所有“有趣”的点都在窗口内。

  4. 设置 y 范围,使函数绝对值的积分为(例如)图形窗口面积的 30%。

于 2013-05-31T23:42:40.350 回答