連載
» 2013年12月04日 10時00分 UPDATE

無償ソフトで技術計算しよう【入門編】(2):モンテカルロ法で円周率を計算して、グラフにプロットする (1/2)

無償工学技術計算ソフト「FreeMat」の操作に関する留意点と変数、内部定数を一通り確認する。次に、モンテカルロ法で円周率を計算して、グラフにプロットする例題を解いてみる。

[伊藤孝宏,MONOist]

 無事FreeMatをインストールできましたでしょうか?(インストールについては前回参照)。今回は操作についての留意点と変数、内部定数について説明します。

筆者注:FreeMatはコマンド入力後にエンターキーを押すとコマンドを実行します。本連載ではエンターキーの記述を省略しますが、操作の際にはコマンド入力後にエンターキーが必要です。



操作についての留意点

 FreeMatではコマンドウィンドウに入力した内容をカーソルキー上下で再呼び出しできます。例えば、「a=1; b=2; a+b」と入力すると、「3」と表示され、入力待ち(「-->」の後に「■」の点滅)の状態となります。ここで、上方向カーソルキー(以降、「↑キー」)を押すと、1つ手前の入力内容が表示されます。↑キーを押すごとにさかのぼります。入力待ちの状態からは↑キーで入力内容をさかのぼるしかありません。さかのぼると下方向カーソルキー(「↓キー」)で下ることもできます。

係数を変更する

 ↑キーは、入力を変更して計算する場合に便利です。例えば、「a=2」として再度、「a+b」を計算するときは、↑キーを何度か押して「a=1」を呼び出し、「a=2」に書き換えてエンターキーを押した後に↑キーを何度か押して、「a+b」を呼び出してエンターキーを押すことで、「a=2」が反映された結果として「4」が表示されます。「b=2」は確定しているので、再度「b=2」とする必要はありません。

ミスタイプを修正する

 他にも、↑キーは入力をタイプミスした場合にも便利です。例えば、「a+b」を「a*b」と入力してしまった場合、↑キーを押して再呼び出し後に修正します。これは、入力内容が長い場合、最初から入力しなおす手間が省けるため便利です。「Tools→History」で入力内容の履歴を示すHistoryウィンドウを表示させ、直接入力内容をダブルクリックしても同様のことが可能です。

入力履歴の消去

 なお、入力履歴はFreeMatを終了しても消えません。他人に知られると困るとか、入力ミスだらけではずかしいといった方は、「Tools→Clear History Tool」として、確認ダイアログで「Yes」をクリックすると入力履歴を削除することができます。

複数の行を入力する

 複数行を入力する場合、カンマ「,」でつなぐと、入力した分の結果が表示されます。例えば、「a=1,b=2,」とすると、「a=1 b=2」と表示されます。一方、セミコロン「;」でつなぐと、結果は表示されません。

 逆に入力行が長すぎて一行に納まらない場合は、最後に小数点3個「...」入力後エンターキーを押すと、「-->」のない入力待ちとなるので、次の内容を入力すると、前の行とつなげて同じ行として認識してくれます。例えば、「(a+b)/...」「(a-b)」 と入力すると、「(a+b)/(a-b)」と認識してくれます。

ヘルプを表示する

 ヘルプを表示するには、F1キーを押す、「Help→Online Manual」、あるいは「helpwin」と入力するのいずれでもヘルプファイルを表示できます。ヘルプは図1に示すような画面で、「Topic List」と呼ばれるカテゴリ別に別れたコマンドの説明タブと「Search」と呼ばれる「調べたいコマンド」を入力して検索するタブとに分かれます。

yk_FreeMat02_01.jpg 図1 ヘルプ画面

 なお、ヘルプファイルをカテゴリごとに順に勉強するようなことは、全て記憶できるような人以外、あまり意味がないので、必要に応じて利用するようにしましょう。ここで、次に説明する、結果表示の精度を変更する「format」コマンドについて調べてみましょう。

ドキュメント一覧とformat

 図1に示すようにヘルプ画面で「Search」タブをクリックして「Search Text」欄に「format」と入力するとformatを含んだドキュメントの一覧が下に表示されるので、目的の項目、ここでは「format(io)」をクリックすると、中央の欄にどのカテゴリに属するのかツリー構造で、また、右端の欄にはformatの説明が表示されます。

 説明内容の一部を下記に示します。

FreeMat supports several modes for displaying matrices (either through the disp function or simply by entering expressions on the command line. There are several options for the format command. The default mode is equivalent to format short.

 訳すと、「FreeMatは複数の表示モードを有している。formatコマンドには幾つかのオプションがあり、デフォルトでは、format shortと同じである」。

 ヘルプファイルの内容はこんな感じで、概念的な表現やこの時点では意味が分からないもの(disp function)などを含むので、よく分からなくてもかまいません。適当に読み飛ばして、「Example」として記載されている使用例で実際に試してみることをお勧めします。

 ただし、「Note」と記載されている部分には重要なことが書かれている場合があるので、注意した方がよいです。例えば、formatでは下記のように記載されています。

Note that in the short format, these two matrices are displayed with the same format. In long format, however, they display differently.

 訳すと、「shortフォーマットでは、2つの行列は同じように表示されているが、longフォーマットでは異なって表示される」。――どういうことかというと、小数点以下の表示桁数が4桁のshortでは同じように見えても、表示桁数が14桁のlongでは異なっているということで、これは、FreeMatの内部変数は倍精度のlongであり、shortとは表示だけを小数点以下4桁としているためです。formatについて、書式、内容の順に下記にまとめておきます。

  • format short:小数点以下4桁で表示
  • format long:小数点以下14桁で表示
  • format long e:小数点以下14桁の浮動小数点表示(*.**×10±**を*.**e±**として表示)


 また、「s=format」と入力すると、「s=long e」などと現在の表示状態を教えてくれます(sは変数名で、sでなくとも構いません)。

変数

 FreeMatでは、CやJavaなどで必須となる変数の宣言やスコープといった手続きは不要です。変数の宣言とは、変数を使用する前に整数型であるなどの宣言を行うことで、スコープとは変数が有効な範囲を示します。

 これらは、複数の人間がソフトウェアの開発に関わる場合に変数が重なってしまうといった不具合を防ぐために必要とされています。FreeMatにも変数の型とローカル変数/グローバル変数といったスコープが存在しますが、変数の宣言を行わなくとも、倍精度の配列として扱ってくれます。また、普通に使う分には変数のスコープについて気にする必要はありません。

変数と倍精度

 具体的には、例えば、「a=5」と入力するだけで変数aには倍精度で5が設定されます。

変数名で使える文字

 変数名には、英字で始まり、つづく英字、数字、アンダーバー(_)の組み合せが使えます。

 また大文字と小文字は区別されます。例えば、「A_5=5,a_5=50」と入力すると、それぞれ「5」と「50」と異なる数値となることが確認できます。

予約語は変数として使えない

 変数名にはコマンドや関数などの予約語は使えません。予約語を変数として使おうとすると、エラー表示で教えてくれるので、自分が知っている範囲で予約語は変数として使わないようにしてエラーが表示されたら、都度対応するようにしましょう。例えば、「for=5」と入力すると、「Error: expecting identifier」と表示されます。また、残念ながら日本語入力には対応していません。

英文字の扱い

 FreeMatでは英文字も扱うことができます。この場合、シングルクォーテーション「'」で挟みます。例えば、「a='b'」と入力すると、変数aにはbという文字が設定されます。変数aは文字型となりますが、数値型と混在してもエラーとはなりません。例えば、「a='b';c=5;」と入力して「a+c」とすると、「ans=103」と計算してくれます。これは文字bをasciiコードに変換して「98+5」を計算した結果です。

エンジニアリング用の内部定数

 FreeMatは円周率などのエンジニアリング用の定数を内部に持っています。内部定数についてはこの後で説明しますが、内部定数を変数名とすると、警告なしに上書きしてくれます。例えば、FreeMatは「pi」という名前で「3.14159265358979」という値を内部に持っていますが、「pi=3」と入力しても受け付けてくれますが、この場合「pi=3」(小数点以下切り捨て)になってしまいます。FreeMatを終了すると、piは元の値に戻りますが、この他にも複素数を構成する際に必要な「i」や「j」も変数として利用すると、複素数を使えなくなりますので、くれぐれも内部定数を変数として使わないようにしてください。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.