next up previous
Next: 5.15 微分 Up: 5 電卓的な使用 Previous: 5.13 複素数


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]  
x^3 /. sol 解の $ 3$ 乗を計算してみる
Simplify[%] 簡単化
xv=x /. sol 解を並べたベクトルを作る
ComplexExpand[xv] $ a+ b i$ の形に表示する。
Remove[x,sol,xv]  

(なお、 $ (-1)^{1/3}$ $ \left(1+i\sqrt{3} \right)/2$ を意味します。 これを確かめたければ、 上のコマンド例にあるように、 ComplexExpand[(-1)^(1/3)] とすると良いでしょう。 なお、 Solve[] の結果 (置き換え規則) をいきなり ComplexExpand[] してもダメで、 上のように xv に代入して、 式にしてから ComplexExpand[] を施す必要があるらしい。 ここらへんは Mathematica のバージョンにもよるようです)

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

そうそう、3 次方程式の根 (結果はかなり複雑) のチェックをしてみましょう。
3次方程式を解いて、解であるか確かめる
  f[x_]:=x^3+2x^2+3x+4
  sol=Solve[f[x]==0,x]
  f[x] /. sol
    → すごいことになるが
  Simplify[%]
    → 納得するはず
  ComplexExpand[x /. sol]

  Remove[x,f,sol]

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


next up previous
Next: 5.15 微分 Up: 5 電卓的な使用 Previous: 5.13 複素数
Masashi Katsurada
平成23年1月30日