演算子と関数を駆使して統計的な計算をグラフプロットする:無償ソフトで技術計算しよう【入門編】(3)(1/2 ページ)
今回は、FreeMatの演算子と関数について説明する。また中心極限定理の実験でグラフをプロットしてみる。
FreeMatの開発者でもないのに、こんなことを聞くのも変ですが……、FreeMatはお気に召したでしょうか? アプリケーションソフトとは違い、プログラミング系のソフトは修得にある程度の時間を要するために、長い付き合いとなります。他人がどう言おうと、自分にしっくりくるものを使うのが一番です。さて、今回は、配列についての説明の後、演算子と関数について説明します。
筆者注:FreeMatはコマンド入力後にエンターキーを押すとコマンドを実行します。本連載ではエンターキーの記述を省略しますが、操作の際にはコマンド入力後にエンターキーが必要です。
配列
FreeMatの「Mat」は「matrix(行列)」のことで、行列の計算に威力を発揮します。従って、行列について理解しておく必要があります。行列とは要素が縦横に並んだ配列のことで、FreeMatは配列を変数として扱うことができます。
筆者注:説明の都合上、配列と行列が混在していますが、両者はほぼ同じものです。配列がプログラミングで用いられる用語で、行列が数学で用いられる用語であるのと、行列が複数の行と列の要素の集合を指すのに対して、配列は1行あるいは1列のものも配列に含みます。
FreeMatで配列に要素を代入する場合、横方向にはカンマ,でつなぎ[]で囲みます。
また、縦方向にはセミコロン;でつなぎ[]で囲みます。
[[a11,a12,a13];[a21,a22,a23];[a31,a32,a33]]と入力します。
中の[ ]は省略でき、[a11,a12,a13;a21,a22,a23;a31,a32,a33]としてもかまいません。通常はこちらの方法で入力します。また、カンマの代わりにスペースを用いて、[a11 a12 a13;a21 a22 a23;a31 a32 a33]としてもかまいません。
縦方向に入力することも可能で、[[a11;a21;a31],[a12;a22;a32],[a13;a23;a33]]としますが、この場合、中の[ ]は省略できません。また、それぞれの行の長さあるいは列の長さは同じにならなければなりません。例えば、[1,2,3;4,5]と入力すると、下記のようなエラーとなります。
Error: Mismatch in dimension 2 for elements being concatenated along dimension 1
「2行目の要素はミスマッチにより1行目の要素と組み合わせることができない」という意味です。
逆に配列から要素を取り出す場合、2種類の方法があります。1つは変数名(要素の最初から何番目か?)と指示します。この場合、1列目上から順に、2列目上から順に〜という順番で場所を示す数字は1から順に1ずつ大きくなります。
例えば、x=[1,2,3;4,5,6]と入力すると、
5を取り出そうとする場合、x(4)と入力します。
もう1つの方法は、変数名(「何行目か?」「何列目か?」)と指示します。先ほどの例で、6を取り出そうとする場合、x(2,3)と入力します。通常はこちらの方法を使います。
「:」(コロン)を用いると、特定の行あるいは列を取り出すことが可能です。例えば、先の例で、1行目を取り出す場合、列の指示を:にします。こちらは、x(1,:) ans = 1 2 3となります。1列目を取り出す場合は、x(:,1)です。
演算子
演算子とは、記号を用いて演算を指示するもので、代入演算子、算術演算子、比較演算子、論理演算子があります。それぞれ、代入という操作、算術計算という操作、比較という操作、論理判断という操作の記号の集まりです。
代入演算子は「=」(イコール)の1種類のみで、右の結果を左に格納するという意味です。a=5は「aという変数に5という数値を格納しなさい」ということです。C言語などで使われる多重定義(a=b=1のような使い方)はできません。
算術演算子は「+」「-」「*」「/」「\」「^」「.*」「./」「.\」「.^」です。演算子の左右の値の和、差、積などを計算した結果を表示します。
- + 加算
- - 減算
- * 乗算
- / 除算
- \ バックスラッシュ演算
- ^ べき数
\のバックスラッシュ演算は、/が「左側/右側」と除算を行うのに対して、「右側/左側」と逆向きに除算を行います。4/2は2となるのに対して、4\2は0.5となります。キーボード上の¥はフォントによっては、「∖」と表示されることもあります。
^はべき乗を表し、3^2は9となります。
以下は、「ドット演算子」と呼ばれ、それぞれの要素ごとに演算を行います。
- .*
- ./
- .\
- .^
比較演算子は、「==」「~=」「<」「>」「<=」「>=」の6種類で、左側と右側の関係が成立する(True)場合は1を、成立しない場合(False)は0を出力します。
それぞれの意味は、以下のようになります。
- == 「左右が等しい」
- ~= 「左右が等しくない」
- < 「右側が左側より大きい」
- > 「右側が左側より小さい」
- <= 「右側が左側以上」
- >= 「右側が左側以下かどうかを判断します」
結果を変数に残す場合は、s=a<b のように代入演算子と組み合わせて使います。
論理演算子は、「&」「|」「~」の3種類です。
- & 論理積AND
- | 論理和OR
- ~ 否定NOT:~は項目の前に付けて結果を反転させます。例えば~1は0となります。
演算子は( )で入れ子構造にすることも可能です。例えば、(1>0)&(2>1)は、「1は0より大きく、かつ、2は1より大きい」ため、Trueとなり、1と出力されます。
関数
関数は演算子よりも高度な処理を行うもので、関数名(引数)といった形で与えると結果を返します。例えば、cos(pi)とすると、-1が出力されます。結果を変数に入れるには、代入演算子と組み合わせて、x= cos(pi);などとします。FreeMatの関数は配列を引数とすることが可能です。
例えば、cos(pi*[0,0.5,1]))とすると、1と0と-1が出力されます。ちなみに、sin、cos、tanなどの三角関数の引数は「radian単位」となります。度から「rad」(ラジアン単位)への換算はpi/180を掛けますが、FreeMatでは単位換算関数も用意されていて、「deg2rad」関数で度からradに、「rad2deg」関数でradから度に換算してくれます。また、単位が度の三角関数も用意されていて、「sind」「cosd」「tand」などの引数は度です。また、cosd([0,90,180])とすると、1と0と-1が出力されます。
三角関数、指数関数、対数関数などの初等関数についてはほぼそろっています。意外な関数を紹介すると、ベクトル演算の内積と外積を行う関数が用意されています。「内積」とは、「2つのベクトルの長さ同士の積×ベクトルの成す角のコサイン」で表される量です。
例えば、x軸の単位ベクトルとy軸の単位ベクトルの内積は、dot([1,0,0],[0,1,0])で、0が出力されます。一方、外積とはベクトルで、長さは2つのベクトルの長さ同士の積×ベクトルの成す角のサインで、向きは2つのベクトルに直角で右ネジが進む方向です。先ほどのx軸の単位ベクトルとy軸の単位ベクトルの例で言えば、外積は、cross([1,0,0],[0,1,0])で、[0,0,1]が出力され、これはz軸の単位ベクトルとなります。
参考までにヘルプファイルのカテゴリで関数に関連するものを下記に示します。関数については膨大な種類があり、人によって頻繁に使うものとそうでないものがあります。従って、解析を行うごとに覚えていくしかありません。また、ちょっと手が込んでいますが、MATLABとの高い互換性を利用して、行いたい処理のキーワードを使ってインターネットで検索します。MATLABの事例は豊富にあるので、その中から関数名と使用方法を探し出します。次に、FreeMatのヘルプのテキスト検索でその関数があるか、検索します。あれば、FreeMatのヘルプの使用方法に従って使えます。また、該当する関数がない場合でも、「プログラミング編」(本連載完結後に予定)で紹介する「mファイル」で自分用の関数を作成することも可能です。
- Mathematical Functions:三角関数などの数学関数
- Elementary Functions:平均などの数学関数
- Type Conversion Functions:整数型、文字列型への変換など
- Array Generation and Manipulations:配列の生成と操作
- Random Number Generation:乱数発生
- Input/Ouput Functions:ファイルの入出力を行う関数
- String Functions:文字列を扱う関数
- Transforms/Decompositions:逆行列を求める、FFT処理を行うといった関数
- Handle-Based Graphics:グラフ作成などを行う関数
Copyright © ITmedia, Inc. All Rights Reserved.