2011-09-12 43 views
1

遇到以下示例代碼的問題,我希望這有一個解決方法。Mathematica中的最佳字符分配方法

說我已經定義了一個函數:

f[x_,y_,z_] = x + y + z + x Log[x] + y Log[y] +z Log[z] 

,我是分配

f[x_,y_,z_] = x + y + z + x Log[x] + y Log[y] +z Log[z]//.x->1//.y->1//.z->0 

但是,而不是有數學與0替代Z I只想Z到可以忽略給結果而不必定義一個新的功能。將上面的代碼輸入到Mathematica中會產生明顯的Indeterminate解決方案

幫助這個新手出來非常感謝。

+1

@ZB請允許我歡迎你們來的StackOverflow,並提醒三件事,我們通常在這裏做的:1)當你得到幫助,儘量給它太**回答問題**在你的專業知識領域2)['閱讀常見問題](http://tinyurl.com/2vycnvr)3)當你看到很好的問答時,用['灰色三角形](http:// i .imgur.com/kygEP.png),因爲系統的可信度基於用戶通過分享知識獲得的聲譽。還請記住接受更好地解決您的問題的答案,如果有的話['通過按複選標記符號'](http://tinyurl.com/4srwe2t) –

+0

如何在函數中檢查參數的簡單If語句有問題的時候,就像我們過去在過去的美好時光裏所做的那樣:),根據IF聲明的結果,你做了一件事,而不是另一件事。 它也使邏輯更清晰,更便攜。任何方式,這是我將如何做到這一點。 – Nasser

+0

@Nasser如果你沒有定義第三個參數爲可選項,那麼3個參數函數將不會以2個參數 –

回答

4

假設你想你描述z治療適用於xy以及,你可以這樣做:

f[x_, y_, z_] := g[x] + g[y] + g[z] 

g[0] = 0; 
g[x_] := x + x Log[x] 

幫助函數g明確地處理了零情況。這些定義產生的結果像這樣:

f[1, E, E^2] 
(* 1 + 2*E + 3*E^2 *) 

f[1, 1, 1] 
(* 3 *) 

f[1, 1, 0] 
(* 2 *) 

f[0, 0, E] 
(* 2*E *) 
+0

好! (10個更多的字符去) –

2

首先,功能應用時通過調用函數:

f[1,1,1] 

其次,爲什麼不引進使用極限的新功能?

f[x_,y_,z_] := x + y + z + x*Log[x] + y*Log[y] +z*Log[z] 
g[x_,y_]:=Limit[f[x,y,z],z->0] 
g[1,1] 

這應該給你的2,雖然我在數學面前我不是現在,所以我還沒有檢查

+3

你不需要一個新的功能名稱。 'f [x_,y_]:= Limit [f [x,y,z],z - > 0]'在用作f [1,1]時也可以工作。Mathematica模式匹配引擎將控制使用正確的定義 –

相關問題