情報系のための離散数学
猪股俊光・南野謙一著
https://www.kyoritsu-pub.co.jp/bookdetail/9784320114364

1

付録 C

MATLAB による行列と数式の計算

C.1 MATLAB の基本操作
MATLAB は，行列計算を中心とした科学技術計算アプリケーションであり，各種領域向けのツール群の他，プログラミング言語によるプログラム作りも可能である．以下は，「バージョン R2020b」による実行例である1) ．

MATLAB を起動すると，画面の中央付近にプロンプト「>>」が表示されたコマンドウィンドウが表示される．プロンプトに対してコマンドを入力し，「ans = 」に続けて表示される．このとき，「;を打てば結果が」とすれば，結果は表示されない．


>> 1+2+3
ans =6>> 1+2+3;>>

なお，プロンプトのもとでカーソルキー Ò と Ó が使えば，コマンド行に入力した履歴が再表示される．

C.2 MATLAB の基本事項以下に，使用上，必要となる用語や記号について示す．
変数

英字で始まる英数字（A„Z, a„z, 0„9）と特殊文字（_）の文字
列．大文字と小文字は区別される．
ただし，処理系にあらかじめ登録されている関数名（i, j,char,mode, size など）を変数とすることができない2) ．
データ型

int 型（整数），real（実数），logical（論理型）

定

pi=3.1416．Inf は 8．

数1) 最新情報は，https://jp.mathworks.com/を参照のこと．
2) i,j は虚数単位として用いられるため，変数名として使用できない．

情報系のための離散数学
猪股俊光・南野謙一著
https://www.kyoritsu-pub.co.jp/bookdetail/9784320114364

付録 C MATLAB による行列と数式の計算

2
論理値真ならば 1，偽ならば 0．true と false も用いることができる．

算術演算子

加減乗除は，+, -, *, /，ベキ乗 は ^．演算子には優先順位あり，2*3^2+4*5 ùñ 38．

比較演算子

不等号・等号の ą, ŕ, ă, ő, “, ­“ は，順に >， >=， <， <=，==，~=．計算結果は真ならば 1，偽ならば 0．
論理演算子^ と _ は，| と &．計算結果は真ならば 1，偽ならば 0．

コメント記号「%」はコメントのはじまりを表す．この記号から行末までは実行されない．

C.3 行列の表し方
MATLAB では，行の要素は「空白」で区切り，行どうしは「;」で区切る．そのため，
たとえば，

˜
a11M“
a21a12a13a22a23¸
は，a12 ; a21[a11a22 ]と表す．

行列を表す主なコマンドを次表に示す．
項目

説明コマンド例

単位行列eye(n)nˆn 型の単位行列eye(3)零行列zeros(m, n)

mˆn 型の零行列

zeros(3, 3)

C.4 行列の演算
行列の演算に関する主なコマンドを次表に示す．
項目

コマンド説明

例

行列の和

A+B

行列 A と B の和

[1 2;3 4]+[1 -1;-2 1]

行列の積

A*B

行列 A と B の積

[1 2]*[3; 4]（A*A は A^2 も可）[1 2; 3 4]^2

行列 M の転置行列[1 0; 0 1]’

転置行列

M’

以下に，一般的な行列の演算例や，，0-1 行列の演算例を本文で示した例題をとりあげながら述べる．なお，紙面の都合上，処理系からの出力の一部（空白行など）を省略している3) ．

3) format

compact を入力することで出力結果の行数が少なくなる．

情報系のための離散数学
猪股俊光・南野謙一著
https://www.kyoritsu-pub.co.jp/bookdetail/9784320114364

C.5 0-1 行列の演算

3【例 C.1】行列の演算— 【例 A.2】>> [3 2;1 0]+[0 -1;3 -2]
ans =314-2>> [2 1;1 2]*[3 2;4 1]
ans =105114>> [1 2 3;2 0 1;3 1 0]*[1 0 0;0 2 0;0 0 3]
ans =
14920
3320

C.5 0-1 行列の演算
0-1 行列に対する演算 ‘ と b にあたる演算子は MATLAB にはなく，+ と * による計算結果は 0 と 1 とは限らない．そのため，各要素に対して「>= 1」かどうかの判定をすることで計算結果を 0-1 行列にする（1 以上である要素だけが 1）．
【例 C.2】0-1 行列の演算— 【例 5.8】>> MR = [1 1;0 0];% M_R>> MQ = [1 1;0 1];% M_Q>> MR+MQ% 関係の和（一般的な行列の和）
ans =2201>> MR+MQ >= 1% 行列の和の各要素が >=1 かどうかの判定
ans =2 × 2 の logical 配列
11% 0-1 行列としての計算結果
01>> MR*MQ >= 1% 関係の積（行列の積）の各要素がans =%>=1 かどうかの判定
2 × 2 の logical 配列
11% 0-1 行列の積としての計算結果
00C.6 グラフの解析
第 7 章「グラフ」における隣接行列と連結行列を使った解析の計算例を示す．

情報系のための離散数学
猪股俊光・南野謙一著
https://www.kyoritsu-pub.co.jp/bookdetail/9784320114364

付録 C MATLAB による行列と数式の計算

4【例 C.3】グラフの行列演算— 【例 7.18】>> I4=eye(4);% 4 × 4 の単位行列>> A=[0 1 1 0;1 0 0 1;1 0 0 1;0 1 1 0]; % 隣接行列>> I4+A+A^2+A^3 >= 1 % 連結行列の計算
ans =
1
1
1
1
1
1
1
1
1
1
1
1
1
111
さらに，第 9 章「ネットワーク」における到達可能行列の計算例を示す．
【例 C.4】ネットワークの到達可能行列— 【例 9.17】>> I4=eye(4);>> A=[0 1 0 0;0 0 1 0;0 1 0 1;0 0 0 0]; % 隣接行列>> L=(A+I4)^3 >= 1 % 到達可能行列の計算
L =1111011101110001

C.7 整数関数
第 6 章の「関数」で現れる整数関数（【例 6.3】）のうち，MATLAB の関数として次のものが利用できる．
項目コマンド例床関数

floor(x)floor(3.14) ñ 3

天井関数

ceil(x)ceil(3.14) ñ 4

剰余関数

modl(x, y)ceil(10, 3) ñ 1

C.8 シンボリック計算
C.8.1 シンボリック変数
MATLAB には，数値計算以外に，文字式，たとえば，px ` yq2 を x2 ` 2xy ` y 2 と展開するための数式処理の機能もある．この機能により，論理演算，多項式の演算，文字を要素とする行列の演算などが行える．そのための変数はシンボリック変数とよばれ，次のように宣言する．

情報系のための離散数学
猪股俊光・南野謙一著
https://www.kyoritsu-pub.co.jp/bookdetail/9784320114364

C.8 シンボリック計算

5

syms var1 var2 ¨ ¨ ¨ varn type
これらの変数 var1 , var2 , ¨ ¨ ¨ , varn はデータ型 type を値とする．なお，type が省略された場合には，複素数を値とするシンボリック変数とされる．

C.8.2 命題論理
bool 型を値とする変数をシンボリック変数として宣言することで，第 1 章の命題論理に関する計算が行える．
【例 C.5】命題論理の演算— 第 1 章「命題論理」>> syms p q r bool % bool 型のシンボリック変数の宣言>> p | ~p% 【例 1.6】 p ∨ (￢ p)ans =symtrue% 真を表す（恒真）>> p & ~p% 【例 1.6】 p ∧ (￢ p)ans =symfalse% 偽を表す（恒偽）>> ~(p | q)
% 1.3.5 ド・モルガンの法則 ￢ (p ∨ q)ans =~p & ~q>> ~(p & q)
% 1.3.5 ドモルガンの法則 ￢ (p ∧ q)ans =~p | ~q>> p | ~(p & q)
% [問 1.10] p ∨ (￢ (p ∧ q))ans =symtrue% 真を表す（恒真）>> (p & q) & ~(p | q) % [問 1.10] (p ∧ q) ∧ (￢ (p ∨ q))ans =symfalse% 偽を表す（恒偽）C.8.3 多項式
文字 x, y, z を変数とする多項式の計算は次のようにして行える．
【例 C.6】多項式の演算>> syms x y z real>> 2*x+x+y-3*y
ans =3*x - 2*y>> expand((x+y)^2)
ans =x^2 + 2*x*y + y^2% 2x+x+y-3y の計算% (x+y)^2 の展開多項式の計算により，第 4 章の母関数（4.8 節）の計算が行える．

情報系のための離散数学
猪股俊光・南野謙一著
https://www.kyoritsu-pub.co.jp/bookdetail/9784320114364

付録 C MATLAB による行列と数式の計算

6【例 C.7】母関数— 【例 4.10】

p1 ` x ` x2 ` x3 ` x4 ` x5 qp1 ` xqp1 ` x ` x2 ` x3 q を展開して得られる多項式の係数は次のようにして求められる．

>> expand((1+x+x^2+x^3+x^4+x^5)*(1+x)*(1+x+x^2+x^3))
ans =x^9 + 3*x^8 + 5*x^7 + 7*x^6 + 8*x^5 + 8*x^4 + 7*x^3+ 5*x^2 + 3*x + 1