2011-05-26 82 views
2

我正在研究图形计算器(您知道,在公式中输入一个公式,让我们假设x^2,然后获取该函数的图形) 。我遇到的问题是如何抵消和缩放图的视图,以显示该函数的有趣部分。图形计算器:如何找到图形的相应部分以显示

我用尽了所有'简单'的想法。让我举一个例子: - sin(x)=>有趣的部分在y = [-1,1]和offset(0,0)之间 - x^2 =>有趣的部分在y = [0,100 ]和偏移量是(0,0)。 (100已被任意挑选) - 100x^2 - 10000 => y = [-10000,100 *]和偏移量是(-10000,0)

我想我可以指定'range'和'offset '为每种类型的功能,并创建一些数学,以加/乘这些范围在一起,结果将被计算相同的方式。但是,这需要“创造”一些数学,潜在的隐藏的逻辑缺陷太高。

必须有一个不太困难的方法来做到这一点,但我无法找到它。是否有一些特定的术语要搜索?任何指向算法的指针?

+1

我认为没有“简单”的方法。识别“有趣的区域”需要检测不连续性,导数和函数零点,渐近线等 – 2011-05-26 03:58:15

回答

2

多么有趣的问题。我从来没有想过这个,但我会先找到:

  1. 方程的两个根最接近原点(可以使用Newton-Raphson算法)。
  2. 最大值和最小值。为此,您需要找到函数的导数为0的位置。您可以执行numerical differentiation并大致找到导数穿过0的点,或者如果您觉得雄心勃勃,则可以使用automatic differentiation。一旦找到了导数的0交叉点,返回并在这些点处评估原始方程。
  3. 在这些x轴点的每个点处的函数值。

然后取每个轴上最远的点,给它们加10%,并用它们作为边界框坐标。

有明显的边缘情况:函数可能没有,一个或无限多的根。该功能可能没有最大值或最小值。我不确定你如何检测这些情况,但是你可能想要限制步骤(1)和(2),比如找到第一个N根或第一个N极值,从0开始计数。另一个极限可能会确保您在一个坐标轴上的偏移量不会超过另一个坐标轴上的偏移量的N倍。

1

大多数常见图的两个有趣点是坐标系的原点(对于方向)和函数的y截距,这很容易计算。因此,我会选择比例尺,使得原点(0,0)和y轴截距(0,y0)都可见,再加上一些填充,即区间[-y0 - y0/5; y0 + y0/5]。如果原点和Y轴截距恰好接近或相同,我会选择一个可见区间,例如[-5; 5]。

这背后的基本原理是,一个良好的公式化函数应该有一个有趣的部分在原点附近,或者至少在y截距附近。如果没有,你根本就看不出用户想看到什么,所以他应该自己照顾。

0

一个有趣区的可能的定义是以下各点的密度:

  1. F(X)= 0(交叉的x zxis)
  2. F'(X)= 0(最小/最大)
  3. F ''(X)= 0(改变曲率的方向)
  4. F '''(X)= 0(最大曲率,大概分钟。曲率可能不是很有趣)