2011-05-26 46 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(最大麴率,大概分鐘。曲率可能不是很有趣)