2010-08-13 8 views
5

你能給我一個算法的例子嗎? alt text http://ryancalderoni.com/archive/ideal_curve.jpg什麼樣的算法可以製作像這樣的曲線(img),並且可以在JavaScript中使用flot來完成?

編輯:然後我將如何使用Javascript來計算數學?有人可以添加嗎?遺憾地不包括上下文原本..

注:我使用「海軍報」來繪製它和用於海軍報輸入是一個JavaScript陣列是這樣的:

[[X,Y],[X, y],[x,y] ...]

因此,給定改變曲線的值,我將所有的點輸出到一個帶有循環的數組中,並將它吐出來以圖形化。

+2

上math.stackexchange更好?編輯:不知道有兩個。 – James 2010-08-13 18:53:10

+3

您可能想嘗試在http://math.stackexchange.com/處詢問。 StackOverflow適用於與編程相關的問題。 – derekerdmann 2010-08-13 18:53:19

+3

@詹姆斯:不,絕對不會。數學溢出是針對研究水平的數學問題,而不是針對本科生可能思考的問題(主要是,至少)。請停止爲你在這裏看到的每個數學問題推薦一個,因爲它通常在那裏超出範圍。 – Joey 2010-08-13 18:54:45

回答

4

典型的S形曲線是tanh(x)曲線。

根據定義,

tanh(x) = sinh(x)/cosh(x) = 
      = [(1/2) (e^x - e^-x)]/[(1/2) (e^x + e^-x)] = 
      = (e^x - e^-x)/(e^x + e^-x) = 
      = (e^(2x) - 1)/(e^(2x) + 1) 

http://privat.rejbrand.se/tanh.png
(High-res)

注意對稱線相對於你的樣品圖片移動。爲了使正切曲線看起來更像你的榜樣,只需將其向上和向右:

y = 1 + (e^(2x - 6) - 1)/(e^(2x - 6) + 1) 

http://privat.rejbrand.se/tanh2.png
(High-res)

在JavaScript中,你最有效地爲

exp2x = Math.exp(2*x) 
y = (exp2x - 1)/(exp2x + 1) 

實現這個表達式更新(再次)

好的,如果你想讓y的範圍從0到100,而x的範圍從0到100,t韓你可能想嘗試

y = 50 + 50*tanh((x−50)/10) 

它看起來像

http://privat.rejbrand.se/tanh3.png
(High-res)

現在

y = 50 + 50 * tanh((x−50)/10) 
    = 50 + 50 * (e^((x−50)/5) - 1)/(e^((x−50)/5) + 1) 

誤差函數,ERF,看起來頗爲相似,但計算更加困難(除非JavaScript具有內置的erf樂趣ction)。


瑞恩(OP)補充說:實現!

var y = 50 + 50 * tanh((n-50)/10); 

function tanh (arg) { 
    return (Math.exp(arg) - Math.exp(-arg))/(Math.exp(arg) + Math.exp(-arg)); 
} 
+0

謝謝,但我的實現不像我所期望的那樣工作,對於每個X值我添加它返回相同的Y值(直線出來) – BigOmega 2010-08-13 19:28:07

+0

@Ryan:這可能是因爲你忘記每次更新exp2x。這個表達式真的是'y =(Math.exp(2 * x)-1)/(Math.exp(2 * x)+ 1'。我只是通過減少一個相同的調用來優化一點慢'exp '函數 – 2010-08-13 19:29:30

+0

查看已添加的細節,+1爲你的幫助到目前爲止,離答案投票更近一步:) – BigOmega 2010-08-13 19:35:34

3

如果你想要一個單一的分析函數,那麼ArcTangent和雙曲正切都具有這種形狀,你只需要稍微改變一下。如果你希望它只從原點開始並且平坦,看看Exp [-1/x^n],對於n> = 1。這會產生一個在原點非常平坦的曲線。

+0

打我1;)。 – 2010-08-13 18:59:51

+0

更新了顯示編程關係的問題,任何想法如何把這個算法在javascript中? – BigOmega 2010-08-13 19:04:47

1

也許我sugggest:

  • 誤差函數(erf(x)在C)
  • 的正態累積分佈函數(0.5 * erfc(-x/sqrt(2))
  • 邏輯函數(1.0/(1.0 + exp(-x))
  • 任何其他乙狀結腸功能
+0

對於'sigmoid'關鍵字+1( - > http://en.wikipedia.org/wiki/Sigmoid_function) – mykhal 2010-08-13 19:11:25

0

你在找什麼叫做乙狀結腸功能。你可以在維基百科查看它。一些用於此的功能是錯誤功能或邏輯功能。這些最常用於神經網絡。

0
相關問題