見本 PDF

特集
第 2 章 MATLAB の素晴らしさと，気をつけるポイント

通信工学のための MATLAB 入門
神谷 幸宏
Yukihiro Kamiya

この章では，MATLAB の素晴らしさを紹介するとともに，気をつけないといけないことについても，重要な項目をまとめて説明します．
以下に説明するように，MATLAB はもともと行列演算をするための言語として認識されていて，通信工学とのかかわりが密接というわけではありませんでした．しかし行列を使うと通信工学の諸技術を効率的に表現できることや，近年 MIMO で行列に関する数学を駆使することになったこともあって，重要性をますます増しています．
以下で，その概要のうち重要な項目を厳選して説明します．

2.1 なぜ，MATLAB か

その特徴

MATLAB は特集イントロダクションで説明したよ
うに，MathWorks 社が提供する行列演算プログラミング言語です．
初めて MATLAB に出会ったのは，大学 4 年生で卒業研究をしたときです．そのとき私は MATLAB を「行列の固有値を計算するソフトウェア」だと思っていました．MATLAB を通信技術の研究開発に使うことにな っ た の は 社 会 人 に な っ て か ら で， そ の 際「 な ぜMATLAB で？」という疑問をもったことを覚えています．MATLAB は行列の計算プログラムだというイメージが強かったからです．
しかし今では当然のように，通信分野で MATLABは広く使われています．海外でも同様の状況です．いつの間にそんな状況になってしまったのかという感じですが，私が思う MATLAB の便利さを以下にまとめてみます．その後，気をつけないといけない点も挙げます．

■ 2.1.1 MATLAB の便利なところ● 2.1.1.a プログラムを簡単に書ける
まず挙げるべきはプログラムを簡単に書けるという点です．具体的には，例えば C 言語で必要な変数宣言やメモリ管理といったことが不要です．拙著（14）をご16覧いただくとわかるように，C 言語では本当にいろいろなことを考えてプログラムを書かなければなりません．また，できあがったプログラムがとても長くなることがわかります．それはそれでまた楽しくないわけでもないのですが……．
その点，MATLAB は本当に楽です．C 言語では「プログラムを書く」作業にかなりのエネルギーを使うのですが，MATLAB では実現したいテクノロジそのものに専念できます．できあがったプログラムも，とても短いものとなります．変数宣言などのオーバーヘッドがないからです．
● 2.1.1.b 充実した行列関連の関数ライブラリ
MATLAB はさまざまな便利な関数を提供しています．例えば高速フーリエ変換（FFT）といった，ディジタル信号処理で頻繁に使うツールは，ほとんど関数としてすでに標準で含まれています．こうした関数を使うことによって，開発にかかる時間が大幅に短縮されることも魅力です．
● 2.1.1.c 可読性が高い
可読性が高い理由の第 1 は，MATLAB が行列の演算を基本としたプログラムを可能とするからです．なぜ行列で演算を表現すると可読性が高まるのか，という点については，第 2.2 節で詳しく説明します．
第 2 に，前述した豊富な関数を使うことによって，プログラムの可読性が高まります．例えば C 言語でも当然，関数を使えますが，関数を自分で作ることになるので，関数の名前，引き数，戻り値といった仕様が，その関数を作った人によってまちまちになります．それが他人にとって，また時間が経ってしまった後の自分にとって，可読性を下げる要因となります．
MATLAB を使っていると，標準で提供されている関数を使うことが多くなるため，その仕様は共通であり，他人が読んでもわかりやすいプログラムを書くことが容易です．
● 2.1.1.d 結果の可視化が充実
結果の可視化というと難しいですが，要はグラフを描けるということです．MATLAB のグラフ化ツールは非常に充実しています．それを Word や Powerpoint

No.31

特集

MATLAB Home で理解する 5G への道に貼ったり，EPS形式で保存してTeXで利用するなど，ムを書くことも可能です．しかし，それをしてしまう効率的に報告書や論文を作成できます．と，ちゃんと答えは出るのですが，計算にとても時間● 2.1.1.e インタプリタ型の言語でインタラクティブがかかってしまいます．このようなポイントは，今お（対話的）なプログラミング

話した行列を意識したプログラミング以外にもいくつ

MATLAB はインタプリタ型の言語です．したがって コ ン パ イ ル が 不 要 で， す ぐ に 実 行 で き ま す．
MATLAB のエディタ，つまり開発環境と合わせると，インタラクティブに，すなわち MATLAB と対話するようにプログラミングを進めることができます．デバッグのときにとても便利です．
● 2.1.1.f そこそこ速い
計算スピードについては，残念ながら C 言語のような，より低級の言語には遠くおよびません．遅いです．
しかし，適切な使い方をすると，それなりに速くなることもまた事実です．適切な使い方とは，おもに（1）行列を使った計算をもとにしてプログラムを書く，（2）できるだけ関数化する，（3）適切に変数の初期化をする，などの点が挙げられます．これらのポイントは，現状では少々意味がわからないと思いますが，それぞれ第 2.4 節で詳しく説明します．
最近，プログラミング言語の Python（15）も行列演算かあり，第 2.4 節にまとめますので，またのちほど．
今ほど MATLAB が普及しておらず，またコンピュー タ の 性 能 が 今 ほ ど 素 晴 ら し く な か っ た 時 代，
MATLAB は遅いと盛んにいわれていました．そうおっしゃる方のプログラムで，私が拝見したいくつかは「C 言語のようなプログラム」になっていました．そのあたりが，遅いと強調された時代の原因だったのかな？と思うこともあります．
以上，MATLAB の魅力と問題について述べました．
結局のところ，MATLAB を楽しく使うには，行列への理解が鍵となるということがおわかりいただければと思います．というわけで，次は MATLAB をいったん離れて，行列の魅力について述べます．

パッケージを充実させ，MATLAB と同様の魅力を持ち始めているようです．しかも Python は無料です．
こちらは大変おもしろそうな状況が進行していて目が離せま せ ん が， 今 日 の時点では実際に測定するとMATLAB は Python よりかなり速く動作するようです． 最 近 の コ ン ピ ュ ー タ の 性 能 向 上 に 伴 い，MATLAB の遅さはそれほど気にならなくなってきているように思います．
● 2.1.1.g 世界標準に最後に挙げる MATLAB の魅力は，工学のさまざまな分野における研究開発の現場で，事実上の世界標準といって過言ではないほど普及していることです．通
信工学の現場でも，そういえると思います．
以上，MATLAB の魅力を説明してきました．しかし，何事も完璧ということはないもので，MATLABにも問題はあります．次節では，その問題をまとめてみます．

■ 2.1.2 MATLAB で注意しなくてはいけないところ
MATLAB のプログラミングは本当に簡単です．私の知人が昔，MATLAB を称して「高級電卓」（性能というより値段が高級）といっていましたが，言い得て妙の感じもします．ここでいう「簡単」ということの実体は，プログラミングの自由度の高さです．
前に述べたように，MATLAB は行列の演算を簡単に表現できます．しかし，行列表現を使わなくてはいけないわけではなく，例えば C 言語のようなプログラ

No.31

2.2 行列の魅力「行列の魅力」などといわれると不可解と思えるほど，行列とは厄介な存在ではなかったでしょうか．学校の数学の時間に習った行列の話は天下り的に計算ルールを教えてもらうことがメインで，なんでこんなことをしなくてはならないのかと思いながらも，卒業のためにとりあえず単位が必要ということで頑張った，というのが私自身の実情です．
しかし今，数学を道具として通信技術の研究開発に使おうとすると，行列は本当に素晴らしい道具なのです．ここでは，その魅力について説明します．具体的な計算ルールについては，またあとで，第 3.3 節でまとめます．魅力がわからないのにルールだけ覚えるのは大変な苦痛です．そうならないように，ここで「行列はこんなことをしたいアイデアだったのか！ 」というインスピレーションが得られるようなお話を通信工学の観点からまとめたいと思っています．

■ 2.2.1 行列の魅力（その 1）
ごちゃごちゃした計算を一発で表現する
前節でお話したように，MATLAB では行列を必ずしも使う必要はないのですが，使うととても速くて読みやすく，短いプログラムを書くことができます．その理由は，たくさんの計算を一つの式として「一発で」表現できることです．例えばディジタル信号処理でよく計算することになるのが，図 2.1 のような計算です．
この出力の計算を数式で表すと，次のようになります．

y ＝s 1w 1 ＋s 2w 2 ＋s 3w 3 ＋s 4w 4
（2.1）
このような計算は「積和演算」と呼ばれます．文字通り「積の和」だからですね．四つの乗算と加算から

17