2011-09-12 15 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 

を割り当てることだった。しかしよりもむしろ、私はちょうどzが、結果を出すために無視することにしたいMathematicaは0とZ置き換える必要がありf[x_,y_] = 2新しい機能を定義する必要はありません。 Mathematicaに上記のコードを入力すると、明白なIndeterminateの結果が得られます。

この初心者の手助けは大歓迎です。

+1

@ZBは私がStackOverflowのにあなたを歓迎し、我々は通常、ここで行う3つのことを思い出させるために許可する:あなたが助けを受けると1)、質問に答える**あまりにもそれを与えることを試みる**であなたの専門分野2)[「よくある質問を読む」](http://tinyurl.com/2vycnvr)3)良いQ&Aを見たら、「灰色の三角形を使って」投票してください(http:// i .imgur.com/kygEP.png)。システムの信頼性は、ユーザーが知識を共有して得た評判に基づいているためです。また、あなたの問題をよりよく解決する答えを受け入れることを覚えておいてください。[チェックマーク記号を押してください](http://tinyurl.com/4srwe2t) –

+0

引数をチェックする関数の単純なIf文私たちが古き良き時代にやっていたように、IF文の結果に基づいて、あなたは一つのことと他のことを行います。 これにより、ロジックがより明確になり、移植性も向上します。いずれにせよ、それは私がそれをやる方法です。 – Nasser

+0

@Nasser 3つ目の引数をオプションとして定義しないと、3つの引数関数は2つの引数で実行されません –

答えて

4

を確認haventは

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

Nice! (行くべき10の多くのchars) –

2

まず、機能アプリケーションが関数を呼び出すことによって発生します。

f[1,1,1] 

第二に、なぜ制限を使用して新しい機能を紹介しませんか?

あなた 2を与える必要があります
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] 

、私は今のMathematicaの前にいないんだけれどもので、私はあなたがzのために説明し、治療も同様xyに適用したいと仮定すると、

+3

あなたはfuctionの新しい名前は必要ありません。 'f [x_、y_]:= Limit [f [x、y、z]、z - > 0]'はf [1,1]として使われても動作します。Mathematicaパターンマッチングエンジンが正しい定義を使用するように制御する –

関連する問題