式
変数
他の大部分のプログラミング言語と同様に、MATLAB® は数学的な "式" を使いますが、他のプログラム言語と異なり、これらの式は行列全体を含んでいます。
MATLAB は、タイプの宣言や次元を宣言するステートメントを必要としていません。MATLAB は新しい変数名を使おうとするとき、自動的に変数を作成し、適切なサイズのストレージを割り当てます。変数が既に存在していると、MATLAB は必要ならその内容を変更し、新しいストレージを割り当てます。たとえば、次の例を考えてみましょう。
num_students = 25
は、1 行 1 列の num_students
と名付けた行列を作成し、その単一要素に値 25 を格納します。任意の変数に代入された行列を表示するには、変数名を入力するだけです。
変数名は、1 つの文字を先頭に、その後に任意の数の文字、数字、またはアンダースコアを続けて表します。MATLAB では大文字と小文字が区別されます。つまり、A
と a
は、同じ変数では "ありません"。
変数名は任意の長さにすることができますが、MATLAB は先頭から N
個の文字のみを使用して (ここでは N
は、関数 namelengthmax
から返される数字です)、それ以降の残りの文字を無視します。このため MATLAB が変数を識別できるように、各変数名の先頭から N
個の文字をユニークにしなければなりません。
N = namelengthmax N = 63
数字
MATLAB は、通常の小数点表示を行います。これは、オプションの小数点をもち、数字の先頭にプラスまたはマイナスの符号をつけます。科学表記として、10 のべき乗のスケール係数を設定する文字 e
を使います。虚数は、i
または j
をサフィックスとして使います。正しく表現された数字の例を示します。
3 -99 0.0001 9.6397238 1.60210e-20 6.02252e23 1i -3.14159j 3e5i
すべての数字は、IEEE® 浮動小数点標準で指定される long 形式を使用して内部的に保存されます。浮動小数点数はおよそ 16 桁の数字の有限精度をもち、10-308 から 10+308 の有限な "範囲" に入ります。
double 形式で表される数字は、52 ビットの最高精度をもちます。52 を超えるビット数が必要な double 型では、精度が多少低下します。たとえば、2 つの異なる値が切り捨てられることによって両方とも等しい値になることを、次のコードで示します。
x = 36028797018963968; y = 36028797018963972; x == y ans = 1
x = uint64(36028797018963968); y = uint64(36028797018963972); x == y ans = 0
MATLAB ソフトウェアは複素数の実数部と虚数部を格納します。そしてコンテキストに応じて様々な方法で、各部分大きさを取り扱います。たとえば関数 sort
は大きさに基づいて並べ替えてから位相角で順序を決めます。
sort([3+4i, 4+3i]) ans = 4.0000 + 3.0000i 3.0000 + 4.0000i
これは位相角が次のようになっているためです。
angle(3+4i) ans = 0.9273 angle(4+3i) ans = 0.6435
「等価」関係演算子 ==
は、実数部と虚数部の両方が等しいことを要求します。他の二項関係演算子 >
<
、>=
、<=
は数の虚数部を無視し、実数部のみを考慮します。
行列演算子
式には、馴染みの深い算術演算子と優先順位則を使います。
| 加算 |
- | 減算 |
| 乗算 |
| 除算 |
| 左除算 |
| べき乗 |
| 複素共役転置 |
| 演算順序の変更 |
配列演算子
線形代数の世界から離れたとき、行列は 2 次元の数値配列になります。配列上の代数演算は、要素単位で行われます。このことは、加算、減算では、行列も配列も同じで、乗算演算では異なることになります。MATLAB では、乗法的配列演算をドット、小数点を使って表現します。
演算機能の一覧を示します。
| 加算 |
| 減算 |
| 要素単位の乗算 |
| 要素単位の除算 |
| 要素単位の左除算 |
| 要素単位のべき算 |
| 共役を計算しないで転置のみを行う |
デューラーの魔方陣に、要素単位でそれ自身を乗算すると、
A.*A
結果は 1 から 16 までの整数の二乗を含んだ配列になります。
ans = 256 9 4 169 25 100 121 64 81 36 49 144 16 225 196 1
テーブルの作成
配列演算は、テーブルを作成するのに有効です。n
を列ベクトルとしましょう。
n = (0:9)';
したがって、
pows = [n n.^2 2.^n]
これは二乗と 2 のべき乗のテーブルになります。
pows = 0 0 1 1 1 2 2 4 4 3 9 8 4 16 16 5 25 32 6 36 64 7 49 128 8 64 256 9 81 512
初等数学関数は、配列上に要素単位で働きます。
format short g x = (1:0.1:2)'; logs = [x log10(x)]
により、対数テーブルを作成できます。
logs = 1.0 0 1.1 0.04139 1.2 0.07918 1.3 0.11394 1.4 0.14613 1.5 0.17609 1.6 0.20412 1.7 0.23045 1.8 0.25527 1.9 0.27875 2.0 0.30103
関数
MATLAB は、abs
、sqrt
、exp
、sin
を含む多くの標準的な初等数学関数を用意しています。負の数の平方根や対数は、エラーにはなりません。適切な複素数で表された結果が自動的に出力されます。MATLAB は、ベッセル関数やガンマ関数など、より高度な数学関数も提供します。これらの関数のほとんどは、複素数と共に使えます。初等数学関数の一覧を得るには、
help elfun
そして、より高度な数学関数や行列関数の一覧を得るのは、
help specfun help elmat
と入力します。sqrt
や sin
のような関数は、"組み込み" です。これら組み込み関数は、MATLAB のコアの一部で、非常に効率よく作られていますが、計算の詳細を見ることはできません。その他の関数は MATLAB プログラミング言語で実装されているため、計算の詳細を参照できます。
組み込み関数とその他の関数ではいくつかの違いがあります。たとえば、組み込み関数の内部コードを読むことはできません。その他の関数は内容を見ることができ必要なら内容を変更することもできます。
いくつかの特別な関数は、有用な定数値を用意しています。
無限大は、非ゼロ値をゼロで割った場合や、明確に定義された数式において realmax
を "オーバーフロー" する (超える) 値が求められた場合に生成されます。Not-a-number は、0/0
または Inf
-Inf
のようなうまく定義できない数学的な値を計算するときに作成されます。
関数の名前は、予約されていません。これらは、次のような新しい変数で上書きできます。
eps = 1.e-6
そしてその値は、その後の計算で使われます。もともと定義されている関数は、以下を使うことにより、既定の値に戻ります。
clear eps
方程式の例
MATLAB の式のいくつかの例を既に見てきました。ここでも、いくつかの例とその結果を示します。
rho = (1+sqrt(5))/2 rho = 1.6180 a = abs(3+4i) a = 5 z = sqrt(besselk(4/3,rho-i)) z = 0.3730+ 0.3214i huge = exp(log(realmax)) huge = 1.7977e+308 toobig = pi*huge toobig = Inf