計算の進め方

前の結果の引用
計算を進めていく上で,直前の結果を引用したい場合がよくある.結果を引用するにはパーセント記号(%)を使う.
%
直前の結果を引用
%%
2つ手前の結果を引用
%%% k
k 個前の結果を引用
%n
Out[n]に出力された結果を引用(使用には注意が必要)
結果の引用
最初の計算結果を得る:
直前の結果に1を加える:
1つ前と2つ前の結果を使う:
入力行と出力行には計算順を示す番号が付けられる.この番号を参照することでどんなに前の結果でも引用できる.
2番目と3番目の結果を足し合せる:
テキスト型インターフェースを使って計算を進めると,入力行と出力行が交互に続いて表示される.しかし,ノートブック型インターフェースでは,入力行と出力行は必ずしも交互に表示されない(詳しくは「ノートブック型インターフェース」を参照).例えば,ユーザがどこか前の入力行までスクロール移動してそこで新しい式を挿入したとすると,古い入力行の次に最新の入力行が続くようになり,その後に,また,古い出力行が続くことになってしまう.% 記号を使う上で,それが,必ずしもノートブック文面の現在位置から見てすぐ上にある結果になるとは限らないことに注意してほしい.% は常に過去直前の結果を示す.ノートブック型インターフェースでは,結果がいつ出されたものか確実に知るには,必ず行番号Out[n]を参照する.ノートブック文書ではいつでもどこでも式を挿入したり削除したりできるので結果が処理された時間通りに順序よく並んでいるとは限らない.
変数の定義
長引く計算では変動する値を持つ数に分かりやすい名前を付けておくと参照しやすくなり便利である.数学や他のプログラミング言語で行うのと同様に,名前を付けた変数を用いることができる.
変数x5を割り当てる:
xが現れるたびに5が代入される:
ここで新たな値をxに割り当てる:
piに40桁精度の の近似値を割り当てる:
piの内容を確認する:
を近似させる.piと同じ桁精度で表示される:
x=value
値を変数 x に割り当てる
x=y=value
値を変数 xy に割り当てる
x=.
または
Clear[x]
変数 x に割り当てられている値を消去する
変数への値の割当て
変数に割り当てた値は半永久的である.一度ある値を変数に割り当てたなら,明確に消去しない限りその値は変わらない.もちろんWolfram言語を再起動すればすべての変数が消え失せる.
Wolfram言語の計算でよく見掛ける間違いは,ユーザが前に定義した変数を消し忘れたことが原因で起こるものである.例えば,x=5と割り当てたら,明確に消去しない限り5の値を持ったxが存在し続ける.必要なくなったら,変数が保持する値は消去しておく.
値が割り当てられている変数を使い終えたら,直ちにその値を消去すること.
変数使用終了の注意点
変数にはどんな名前を付けても構わない(一部例外あり).名前の長さには制限はないが,名前は数字で始まってはいけない.例えば,x2は変数名として有効だが,これに似た2x2*xと同義であるから,変数名としては使えない.
変数名の解釈において大文字と小文字は区別される.組込みオブジェクトはすべて大文字で始まる.これと混同しないようにユーザ定義の変数は小文字で始めるとよい.
aaaaa
小文字だけで記述される変数名の書式(ユーザ定義の名前)
Aaaaa
組込みオブジェクトの名前は大文字で始まる
変数名定義の規則
変数の使い方は一般の数学における使い方と同じである.ただし,以下の点に気を付ける必要がある.
x yx掛けるyを意味する.
間にスペースのないxyxyという名前の変数である.
5x5掛けるxを意味する.
x^2y(x^2) yに等しいが,x^(2y)には等しくない.
変数を使う際の注意点
シンボルの値
Wolfram言語にx+xと式を入力すると2xの答が返ってくる.Wolfram言語では,変数xは純粋なシンボルとして認識され形式的な扱いを受ける.シンボルとしてあるとき,xはどのような式でも表すことができる.
しかし,xのようなシンボルに特定の値を置く必要が出てくる.場合によってはその値は特定の数値であったり,またより多くの場合,それは別の式であったりする.
1+2x等の式を入力し,その中にあるシンボルxを特定の値に置き換えるには,まずWolfram言語の変換規則を作り,次に,その規則を式に適用すればよい.xを値3で置き換えるには,変換規則x->3を作成する.ここで,->は2つの文字から構成され,間にスペースは入れないことに注意してほしい.x->3は「x3になる」規則としてとらえるとよいだろう.
特定の式だけに変換規則を適用するには,expr/.rule の書式を使う./.は置換を行う演算子で,スラッシュと終止符の間にスペースは入れない.
x->3の規則を式1+2xに適用する:
xを置換するものは何でもよい.この例ではx2-yで置き換えさせる:
変換規則だけを入力する.普通の代数式と同じように扱われる:
上の規則を式x^2-9適用する:
expr/.x->value
exprx を値 value で置換する
expr/.{x->xval,y->yval}
複数の置換を行う
式のシンボルを値と置換
複数の規則をリストにすることで一括で適用することができる:
置換の演算子/.は,特定の式に限って変換規則を適用するときに使う.変換規則をどんな式にでも適用可能としたい場合はどうしたらよいだろうか.例えば,xが現れるたびにx3に変えたい場合はどうしたらよいだろう.
「変数の定義」で説明したように,これを行うには,x=3を用いてx3を割り当てればよい.一度x=3の割当てが行われると,xは現れるたびに常に3に置き換えられる.
3xに割り当てる:
xが現れるたびに自動的に3に置き換えられる:
今度は,式1+axの値として割り当てる:
x1+aで置き換えられる:
シンボルの値は数だけでなくどんな式としても定義することができる.ただし,一度,等号関係を定義したら,値を明確に変更もしくは除去するまでは,定義した値が内部に残るので注意が必要である.除去のし忘れが,ユーザの間違いの最も大きな共通した原因になっている.
x=value
常に x に割り当てられる値を定義する
x=.
x に対して定義されている値を消去する
シンボルへの値の割当て
シンボルxには先に割り当てておいた値がそのまま残っている:
xに割り当てた値を除去する:
今度はxは何も特定の値を持たない.このため,純粋にシンボル的な変数として使うことができる:
Wolfram言語ではxのようなシンボルはいろいろ違った用途に対して使うことができる.事実,Wolfram言語の持つ高い汎用性は,このように必要に応じて各種の用途に対応できる,という機能性に負うところが大きい.ただし,間違いを避けるためどんな用途でxを使っているのか,常に把握しておく必要はある.特に,xが別の式を表す名前として働くときの用途と,純粋な未知数としての用途は,きちんと区別しておく必要がある.
記号代数的な処理ができない従来のプログラミング言語では,変数を単なるオブジェクトの名前としてしか使うことができない.ここでオブジェクトとは数値を指し,その数値が変数の値として割り当てられる.一方,Wolfram言語では,xは各種変換規則が適用可能な純粋に形式的な変数として扱われる.もちろん,一度,x=3のような割当て関係を定義したなら,xは常に3に置き換えられることになり,形式的な変数としては働かなくなってしまう.
x=3のような明確な割当て定義を行うと,それは大域的な効果を持つ.一方,expr/.x->3のような置換は,特定の式 expr だけに対して有効である.まぎらわしくならないように,必要不可欠でない限り,明確な割当ては行わない方がよいだろう.
割当てと置換は混ぜて使ってもよい.割当て定義を使うことで,置換したい項を持った式や,置換操作を施したい規則に名前を与えることができる.
シンボルtに値を割り当てる:
tの値が参照され,値の中にあるx2に置換される:
今度は別のxの値に対するtの値が求められる:
まず,xPiで置換されたときのtの値が求められる.次に,結果が数値的に評価される:
Wolfram言語での4種類のカッコ
これまでの解説で4種類のカッコが登場してきた.各々違った役割を担っているので,確実に使い分けができるようにここで再確認しておく.
(term)
丸カッコは式の項をまとめる
f[x]
角カッコは関数に引数を与える
{a,b,c}
中カッコはリストを定義する
v[[i]]
二重角カッコはリスト要素を抽出する(Part[v,i]に等しい)
4種類のカッコの使い分け
リストを使い複雑な式を構築するときは,角カッコの中に余分にスペースを入れておくと式全体が読みやすくなる.カッコの数を合わせるのにも楽になる.例えば,v[[{a,b}]]よりv[[ {a,b} ]]の方が読みやすい.
複合式
計算を進める上で,複数のステップを踏んで処理をしなければいけないことがよくある.各ステップの処理を別々の入力行(セル)を使って行ってもよいが,簡単にするため,いくつかのステップを単一行にまとめてもよい.そうした場合,式のステップごとにセミコロンで分ける.
expr1;expr2;expr3
複合式の定義(結果表示あり).複合式を一括定義し,最後の式の答を表示する
expr1;expr2;
複合式の定義(結果表示なし).2つの式を一括定義し,答は表示しない
複合式の書き方
3つの式を単一行(セル)に一括入力する.返ってくる結果は最後の式のものである:
入力行をセミコロンで終ると一連の操作の最後に空処理をすることになる.計算が終了した後でも,出力は一切表示されない.
expr;
出力の非表示.処理は行うが結果は表示しない
計算結果の表示禁止
入力行の終りにセミコロンを付けて答が表示されないようにする:
表示しなかった結果でも%を使えば後で確認することができる: