2013-01-16 85 views
2

怎麼可能用一個數學函數作爲模塊 - 參數功能參數模塊

如:

PersonalPlot[fun0_, var0_, min0_, max0_] := 
Module[{fun = fun0, var = var0 , min = min0, max = max0}, 

    (*this is incorrect*) 
    fun = fun[var_]; 

    Plot[fun, {var, min, max}] 
] 

PersonalPlot[x^2,x,0,3]; 

回答

4

你說得對,這種說法是不正確。數學計算結果爲類似

x^2[x] 
當你打電話 PersonalPlot

和計算結果爲,那麼,用文字x to the power of 2 of x不使有很大的意義。解決問題的方法有很多。最簡單的將是完全與模塊分配和定義:

PersonalPlot1[fun0_, var0_, min0_, max0_] := Plot[fun0, {var0, min0, max0}] 

,你會叫這樣的:

PersonalPlot1[x^2, x, 0, 3] 

注意,這類PersonalPlot1[x^2, y, 0, 3]呼叫產生一個空的情節,因爲在變量傳入的函數與第二個參數不是同一個變量。請繼續閱讀。

如果要定義一個模塊,它需要一個函數作爲參數,那麼這就是做這件事的一種方法:

PersonalPlot2[fun0_, var0_, min0_, max0_] := 
Module[{fun = fun0, var = var0, min = min0, max = max0}, 
    Plot[fun[var], {var, min, max}]] 

,你會調用此類

PersonalPlot2[#^2 &, x, 0, 3] 

注意:

  • 傳遞給函數的函數是純函數。如果您還不熟悉Mathematica的純函數,現在是查閱文檔相關部分的好時機。
  • 這明確告訴Plot命令在您指定的範圍內評估fun[var]
  • 您的局部變量不是嚴格必要的,因爲您的函數通過副作用工作,產生一個繪圖而不是操縱(副本)傳遞給它的參數。你可以改寫這個簡稱爲:

    ​​

另一種可能性是下降表示輸入傳遞給PersonalPlot函數變量參數,如下所示:

PersonalPlot3[fun0_, min0_, max0_] := Module[{x}, 
    Plot[fun0[x], {x, min0, max0}]] 

,你會這樣調用

PersonalPlot3[#^2 &, 0, 3] 

在這個版本我做x本地到Module以避免與任何工作區變量(也稱爲x)發生衝突。這樣可以避免使用函數參數的不同名稱(純函數沒有參數名稱)和第二個參數PersonalPlot;現在已經下降了。

無論這些函數是否使用模塊,可能還有其他幾種有用的方法將參數傳遞給函數。

編輯

我們大多數人誰用過數學一會兒不這樣做,我認爲,對於#^2&的東西,以避免。如果你不喜歡它,你可以使用更明確的語法,就像這樣:

fun1 = Function[x,x^2] 

然後你就可以繞過這樣

PersonalPlot[fun1,0.0,4.0] 

通過使用這種方法可以讓你的功能通過要求正確的類型被傳入,這樣的錯誤少一些,像這樣

PersonalPlot[fun_Function, min_Real, max_Real] := ... 

但是它真的取決於你。

關閉我的頭頂我不知道如何Plot做到這一點,我不得不看看文檔。

+0

首先,非常感謝這個宏偉的 - 我會稱它爲一篇文章。但問題是,我並不是真的想做一個簡單的劇情,而是做更多的操作......此外,模塊的使用應該儘可能簡單......所以沒有辦法繞過這個' #^ 2&'? thx –

+0

這是怎麼做的繪圖本身? –

+0

HPM,我希望你會在Mathematica.SE更頻繁地發佈。 –