algorithm - 如何找到最佳(信息量最大)的绘图限制?

标签 algorithm plot wolfram-mathematica

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

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

注意事项:

  • 这里没有很好地定义有趣的情节限制。这是问题的一部分:情节中最有趣的部分是什么?
  • 我已经有了一个算法来确定 x 值的范围,其中函数 f 具有有限值。
  • 我正在使用 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) 没有选择我认为信息量最大的限制。但这对我来说已经足够好了。

更新:

我发现 Mathematica 中的 PlotRange 可以很好地自动执行此操作(参见 here)。是否提供源代码或解释算法的引用资料?我到处都找不到它。

更新:

我开始使用自适应优化算法来寻找信息丰富的绘图范围,灵感来自 this site .目前还不是很完美,但是目前的进度已经在我的项目中实现了here .您可以尝试绘制一些函数,看看它是如何工作的。当我有一个完整的工作版本时,我可以发布一个答案。

最佳答案

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

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

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

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

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

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

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

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

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

  2. 如果范围尚未包含 x=0,请扩展范围以包含 x=0。

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

  4. 设置 y 范围,使函数绝对值的积分为(比方说)绘图窗口面积的 30%。

关于algorithm - 如何找到最佳(信息量最大)的绘图限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16862822/

相关文章:

python - 缩小 PNG 图像会增加图像尺寸

python - matplotlib:绘图完成后释放内存

jquery - float 相同范围的刻度

list - 使用纯函数访问和选择特定的子列表元素

wolfram-mathematica - 如何模拟 InStr[]?

optimization - 数学 : Evaluation order during numerical optimisation of black box functions

c++ - 汽油泵循环游

algorithm - 在面板上放置随机的非重叠矩形

algorithm - 在动态环境中使用 Paxos

r - 如何增加 R 箱线图中箱线的粗细?