1

Mathematica の点 (3,5,1) で関数の導関数を評価しようとしています。だから、それは私の入力です:

   In[120]:= D[Sqrt[(z + x)/(y - 1)] - z^2, x]
   Out[121]= 1/(2 (-1 + y) Sqrt[(x + z)/(-1 + y)])
   In[122]:= f[x_, y_, z_] := %
   In[123]:= x = 3
             y = 5
             z = 1
             f[x, y, z]
   Out[124]= (1/8)[3, 5, 1]

ご覧のとおり、奇妙な出力が得られます。(3,5,1) でその導関数を評価する際のヒントはありますか?

4

1 に答える 1

6

あなたが得た結果は、それが以前の定義からクリアされていなかっOut[124]たと私に信じさせます. 特に、フォームの式によって設定さfれる として知られているものを持っているようです。OwnValue

f = 1/8 

(コロンがないことに注意してください。)これを確認するには、次のコマンドを実行します。

g = 5;
OwnValues[g]

返す

 {HoldPattern[g] :> 5}

残念ながら、関数定義 (またはそのバリアントとして知られている) のような他の定義にOwnValues 取って代わります。したがって、定義DownValueUpValue

g[x_] := x^2

g[5]に評価されます5[5]。明らかにあなたが望むものではありません。したがって、Clear定義する前に関数として使用する予定のシンボル。そうは言っても、あなたの定義fはまだ問題に遭遇します。

問題は、 を定義するときにSetDelayed( ) を使用することです。これにより、代入の右側が後で実行されるまで値を取得できなくなります。例えば、:=ff

D[x^2 + x y, x]
f[x_, y_] := %

x = 5
y = 6
f[x, y]

代わりに を返します6。これは、6が最後に生成された結果であり、f事実上 のシノニムであるために発生し%ます。これには 2 つの方法があります。どちらかを使用しますSet( =)

Clear[f, x, y]
D[x^2 + x y, x];
f[x_, y_] = %

f[5, 6]

16期待どおりを返すか、それを取得する前にが%その値に置き換えられることを確認します。SetDelayed

Clear[f, x, y]
D[x^2 + x y, x];
f[x_, y_] := Evaluate[%]
于 2012-05-24T02:44:49.923 に答える