|
1.4.2 シンボルの値
Mathematicaに x + xと式を入力すると 2xの答が返ってくる. Mathematicaでは,変数 xは純粋なシンボルとして認識され形式的な扱いを受ける.シンボルとしてあるとき, xはどのような式でも表すことができる.
しかし, xのようなシンボルに特定の値を置く必要がでてくる.場合によってはその値は特定の数値であったり,またより多くの場合,それは別の式であったりする.
1 + 2x等の式を入力し,その中にあるシンボル xを特定の値に置き換えるには,まず Mathematicaの変換規則を作り,次に,その規則を式に適用すればよい. xを値 3で置き換えるには,変換規則 x -> 3を作成する.ここで, ->は2つの文字から構成され,間にスペースは入れないことに注意してほしい. x -> 3は「 xが 3になる」規則としてとらえるとよいだろう.
特定の式だけに変換規則を適用するには,「式 /.規則」の書式を使う. /.は置換を行う演算子で,スラッシュと終止符の間にスペースは入れない.
x->3の規則を式 1 + 2xに適用する.
In[1]:= 1 + 2x /. x -> 3
Out[1]= 
xを置換するものは何でもよい.この例では 2 - yで置き換えさせる.
In[2]:= 1 + x + x^2 /. x -> 2 - y
Out[2]= 
変換規則だけを入力する.普通の代数式と同じように扱われる.
In[3]:= x -> 3 + y
Out[3]= 
上の規則を適用する.
In[4]:= x^2 - 9 /. %
Out[4]= 

式のシンボルを値と置換
複数の規則をリストにすることで一括で適用することができる.
In[5]:= (x + y) (x - y)^2 /. {x -> 3, y -> 1 - a}
Out[5]= 
置換の演算子 /.は,特定の式に限って変換規則を適用するときに使う.変換規則をどんな式にでも適用可能としたい場合はどうしたらよいだろうか.例えば,入力されるすべての式において,xを 3に変えたい場合はどうしたらよいだろう.
1.2.2で説明したように,これを行うには, x = 3を用いて xに3を割り当てればよい.一度 x = 3の割当てが行われると, xは現れるたびに常に 3に置き換えられる.
3を xに割り当てる.
In[6]:= x = 3
Out[6]= 
xが現れるたびに自動的に 3に置き換えられる.
In[7]:= x^2 - 1
Out[7]= 
今度は,式 1 + aを xの値として割り当 てる.
In[8]:= x = 1 + a
Out[8]= 
xが 1 + aで置き換えられる.
In[9]:= x^2 - 1
Out[9]= 
シンボルの値は数だけでなくどんな式としても定義することができる.ただし,一度,等号関係を定義したら,値を明確に変更もしくは除去するまでは,定義した値が内部に残るので注意が必要である.除去のし忘れが,ユーザの間違いの最も大きな共通した原因になっている.

シンボルへの値の割当て
シンボル xには先に割り当てておいた値がそのまま残っている.
In[10]:= x + 5 - 2x
Out[10]= 
xに割り当てた値を除去する.
In[11]:= x =.
今度は xは何も特定の値を持たない.このため,純粋にシンボル的な変数として使うことができる.
In[12]:= x + 5 - 2x
Out[12]= 
Mathematicaでは xのようなシンボルはいろいろ違った用途に対して使うことができる.事実, Mathematicaの持つ高い汎用性は,このように必要に応じて各種の用途に対応できる,という機能性に負うところが大きい.ただし,間違いを避けるためどんな用途で xを使っているのか,常に把握しておく必要はある.特に, xが別の式を表す名前として働くときの用途と,純粋な未知数としての用途は,きちんと区別しておく必要がある.
記号代数的な処理ができない従来のプログラミング言語では,変数を単なるオブジェクトの名前としてしか使うことができない.ここでオブジェクトとは数値を指し,その数値が変数の値として割り当てられる.一方, Mathematicaでは, xは各種変換規則が適用可能な純粋に形式的な変数として扱われる.もちろん,一度, x = 3のような割当て関係を定義したなら, xは常に 3に置き換えられることになり,形式的な変数としては働かなくなってしまう.
x = 3のような明確な割当て定義を行うと,それは大域的な効果を持つ.一方,expr /. x->3のような置換は,特定の式 exprだけに対して有効である.まぎらわしくならないように,必要不可欠でない限り,明確な割当ては行わない方がよいだろう.
割当てと置換は混ぜて使ってもよい.割当て定義を使うことで,置換したい項を持った式や,置換操作を施したい規則に名前を与えることができる.
シンボル tに値を割り当てる.
In[13]:= t = 1 + x^2
Out[13]= 
tの値が参照され,値の中にある xが 2に置換される.
In[14]:= t /. x -> 2
Out[14]= 
今度は別の xの値に対する tの値が求められる.
In[15]:= t /. x -> 5a
Out[15]= 
まず, xが Piで置換されたときの tの値が求められる.次に,結果が数値的に評価される.
In[16]:= t /. x -> Pi //N
Out[16]= 
|