5.14 一時的な代入 /.

式に含まれる変数に一時的に値を代入して式の値を求めたい場合は、 置換演算子 /. (スラッシュ・ドットと読む) を用いて、

式 /. 名前 -> 値
のようにします。ここで「名前 -> 値」は置き換えの規則を表わします。

具体的には、例えば
一時的な代入 (1)
y = x^2  
y /. x->3  
x  
y     x, y 自体は変っていない
Remove[x,y]  
一度に複数の代入をするには、括弧 { } でくくって、

式 /. {名前 -> 値, 名前 -> 値,...}
とします。
一時的な代入 (2)
(x + y + z + w)^2  
% /. {y->1,z->2} y$ 1$ を、z$ 2$ を代入
Remove[x,y,z,w]  
方程式の解を、 Solve[] (詳しいことは後述) を用いて求めたときの結果は、 この代入をするのに便利です。 例えば $ x^2+x+1=0$ の根の $ 3$ 乗を計算するには、 次のようにすれば OK です。
方程式の解を代入してチェックする
sol=Solve[x^2+x+1==0,x]  
  $ (-1)^{1/3}$ みたいのが出て来て良く分からないので…
ComplexExpand[sol] $ a+ib$ の形にする
x^3 /. sol 解の $ 3$ 乗を計算してみる
Simplify[%] 簡単化
Remove[x,sol]  

(なお、Mathematica は細かい部分でバージョンにより動作が異なり、 以前は sol のような置き換え規則に ComplexExpand[] を施しても何もしてくれませんでした。)


一方、 $ x^2-3x+2=0$ の解を x1, x2 とおくには、
  sol=Solve[x^2-3x+2==0,x]
  {x1,x2}=x /. sol
とすれば OK です。


もう少し複雑な 3 次方程式の根 (結果はかなり複雑) のチェックをしてみましょう。
3次方程式を解いて、解であるか確かめる
  f[x_]:=x^3+2x^2+3x+4
  sol=Solve[f[x]==0,x]
  f[x] /. sol
    → すごいことになるが
  Simplify[%]
    → 納得するはず
  ComplexExpand[sol]  または  ComplexExpand[x /. sol]
    → うーん… (訳が分からない!?)
  N[sol]
    → 近似値を見ると複素平面上で大体どの辺にあるか分かります

  Remove[x,f,sol]

解けたらしいけれど、簡単な答を教えてくれない…どうしてでしょう??

(2019/11/2 追記: Mathematica 11.x では、3次方程式を Solve[] で解くと、 Cardano の公式を適用した結果を表示してくれたのですが、 Mathematica 12 ではそれはやらなくなりました。 ちょっと残念。 Solve[f[x]==0,x,Cubics->True] とするのかな。)



桂田 祐史