早稲田大学 > 政治経済学部 > 近藤研究室 > コンピュータ関連情報

MATLAB おぼえがき

応用計量経済学の研究のために, 日常的に MATLAB というソフトウェアを使っています. 私が MATLAB を使う中で「知っていると便利」と感じたことを 以下で紹介します. 一般ユーザ向けの情報提供というよりも, 自分のための「おぼえがき」という性格のものですが, ご参考になれば幸いです.

ご意見や情報のご提供を歓迎いたします.

おぼえがき (整理済み)

おぼえがき (未整理:不定期な日記のようなもの)

2003/01/09

Release 12 以降 Java ベースの MATLAB Desktop が導入されて 大変便利になったのだが,起動には随分と時間がかかるようになった. 一方, Excel Link の機能で Excel 起動時に MATLAB を自動起動する場合には, MATLAB Desktop は起動せず,MATLAB Command Window だけが起動する. MATLAB Desktop が起動しない分だけ起動にかかる時間は短いが, MATLAB Command Window が無いと不便なので, 私の startup.m には try, desktop, catch, end と書いてある.

Excel Link 導入時にはマニュアルに従って =MLAutoStart("yes") を 1 回だけ実行した. これで Excel 起動時に MATLAB が自動起動するようになる. この設定でずっと使ってきたが, MATLAB をまったく使わないときでも起動の際に随分と待たされるのに 我慢ができなくなったので =MLAutoStart("no") として MATLAB の自動起動は取りやめにした. 必要なときだけ =MLOpen() または マクロ MLOpen または matlabinit を実行して MATLAB を起動させようという戦略である.

以下,MATLAB の機能というよりは, Excel のカスタマイズ一般に関することを書いておく. これを実行しておくと, 便利にマクロ matlabinit を実行することが可能になる.

  1. メニューから [ツール] → [ユーザー設定] を選び, [コマンド] タブをクリック.
  2. [分類] ボックスで [マクロ] をクリックすると, [コマンド] ボックスに [ユーザー設定メニュー項目] が表示されるので, それをドラッグしつつ タイトルバー直下のメニューバーの中の [ツール] をポイントする. [ツール] の中には多くのメニュー項目があるが, その一番下の位置でドロップする. これで,新しいメニュー項目が追加される.
  3. 新しく追加されたメニュー項目は「ユーザー設定メニュー項目(C)」 と表示されている. これを右クリックする. [名前] の右にあるボックス内には「ユーザー設定メニュー項目(&C)」 と表示されているので, これを (例えば) 「MATLAB Start (&L)」に変更する (丸括弧の部分は ショートカットキーに対応しているので, 不要であれば「MATLAB Start」と名称だけを入力すれば良い).
  4. 続いて,[マクロの登録] をクリックし, [マクロ名] ボックスに「matlabinit」と入力し, [OK] をクリックする.
  5. 続いて,[グループの始まり] をクリックする.
  6. [ユーザー設定] ダイアログの [閉じる] をクリックして作業を終了する.

2001/05/10

最近の MATLAB には「オーバーロード (overload)」という機能がある. 存在は知っていたが,使ったことが無かったので試してみた. この機能を使うと演算子の再定義が出来て便利. 計量経済分析や多変量解析をする人には特に便利だと思う. 例えばこんな具合に.

2001/05/10

Release 12 (MATLAB は Version 6) になって, Java ベースの MATLAB Desktop が導入された. Release 11 (MATLAB は Version 5) の頃の MATLAB Command Window だけの環境と比べると,まず見た目が大きく違う. 実行したコマンドの履歴 (history) が表示されるのは, 大変便利になったと思う. これまでは,diary コマンドを使って履歴を残していた. 起動時に実行される startup.m には,

diary( [ matlabroot, '\work\DiaryFiles\', ... 
sprintf( '%4d-%02d-%02d-%02d-%02d-%02d.diary', round( clock ) ) ] );

と書いてあって, ウッカリ履歴を残し忘れないようにしていた (clock の出力は, 年月日を含めた秒単位の時刻を表すベクトルなので, それをファイル名にした diary file を作っていた). ゼミの学生に紹介したら, 新しいコマンド履歴の機能の方が diary file よりも評判が良かった. 前者を作業中に, 後者をレポート作成時に使ってくれれば良いなぁと, 自分だけで勝手に思っている.

Release 11 までは Excel Link に関連したバグがあった. Excel Link で起動された MATLAB Command Window が, Excel を終了したときに連動して終了してくれないことがある, というバグである. 私には,どんなときに連動して終了しないかは定かではなかったが, どうやら,MATLAB エディタでスクリプトなどを編集すると, 終了しないらしいことが分かっていた (news group comp.soft-sys.matlab で 教えていただいた). Release 12 では,どうやらこのバグは直っているようである. しかし残念なことに,新たな別の不具合がある. Excel Link から起動されるのは MATLAB Command Window で, 単体で起動したときと同じような MATLAB Desktop は起動されない. ここまではあまり問題は無いのだが, MATLAB エディタでスクリプトを編集しようとして, そこに日本語の文字を書き入れようとすると,Java error が 起こってしまい,入力できない. 技術サポートに電話で聞いたら,対処方法を教えて頂けた. Command Window で desktop と入力すると良い. 一度 MATLAB Desktop を起動してしまえば, あとはエディタを使用しても Java error は発生しない (Thanks: 熊澤さん@サイバネット).

以前に The MathWorks とサイバネットの技術担当者の方に, 「MATLAB Command Window のプロンプトを変更して欲しい」と お願いしたことがあった. MATLAB Version 5 では (それ以前の Version 4 でも同じだったが) 使用環境ごとにプロンプトの文字が異なっていた. UNIX 環境では「>> 」だった.

abs( '>> ' ) == [ 62 62 32 ]

なので,

char( [ 62 62 32 ] )

がプロンプトだった. ところが,PC 環境では, 欧文フォントを使用しているときは

char( [ 187 32 ] )

がプロンプト,日本語フォントを使用しているときは

char( [ 33140 32 ] )

がプロンプトだった. まぁ,見た目は 3 つとも似ているし, 「そんなの,どうでも良いじゃん」と言われそうなことではある. ただし,個人的には,これがとても不都合だった. さらに,これを不都合と感じるような使い方が, それなりに真っ当な使い方だとさえ思っている. なぜなら, PC 環境のプロンプトは 2 種類とも機種依存文字だからである. 電子メイル,news group comp.soft-sys.matlab, web などで, 多くの方々と情報交換をするのだが, これに機種依存文字は使えない. 「使えない」というのは正しい表現ではなくて, 「環境によっては正常に表示されないので, 相手の環境が分からないときは使わないのがマナー」である. だから,自分では使わないようにしているが, 親しい知人や指導している学生以外には「使わないでくれ」と 自分からは言わない. 自分から発信するときは, 複写,貼り付け,機種依存文字の置換をしてから送ることになる. 受け取った場合も同様に出来れば良いが, 私の力では残念ながら出来なかった. よく知らないが,Shift JIS, JIS, EUC などの日本語文字コードがあり, PC 環境では Shift JIS を使っている. いろんなことの兼ね合いで, プロンプトの後に続く文字によっては, 元々 2 文字だったものが見慣れない漢字 1 文字になってしまう. よく知らないので,お手上げである. 前置きが長くなりすぎてしまったが, 理由も沿えてプロンプトの文字の変更をメイルでお願いしたときには, 直ぐに (たしか,翌日くらいだったと思う) 「次期ヴァージョンでは 変更します」とお返事を頂いた. もちろん,Release 12 では変更されている. これでまた MATLAB が使いやすいものになった. (以前のものの方が好きだった方,ごめんなさい. 要望を出したのは私だけじゃないかもしれませんが…)

2001/05/09

ノート PC に, 新しく入手した MATLAB をインストールした (先月のはなし). このノート PC には,ウィルス・チェッカが常駐している. ウィルス・チェッカなどの常駐した状態でインストールすると 問題を起こす原因になるらしいので, 常駐しない状態にしてインストールした. これが,うまくいかない. ウィルス・チェックの常駐が本当に無効になっているか 自信が無かったりしたので,数回やり直してみたが,ダメだった. 結局どうしたかというと, ディスプレイの設定を変更することで対処できた. インストールするときには,ディスプレイの設定は何でも良い. ちゃんとインストールされる. これは最初から同じだった. 問題は,デモを実行したときに起こる. より正確に言うと,特定の描画機能を実行すると, MATLAB が表示しようとする画像の色数などと, ディスプレイが受け付ける色数などとの兼ね合いで エラーが発生していたようである.

2000/07/18

Excel Link で, Excel 起動時に自動的に MATLAB が起動されるように 設定して使っているが, そのときの MATLAB Command Window のカレント・ディレクトリは 実行ファイル $MATLAB\bin\matlab.exe のある ディレクトリに固定されている. MLOpen() に引数を与えて変更可能になると良いと思う.

日本語文字列を含むコマンドライン編集についての不具合 (Ver. 5.3.1 (R11.1), 2000/04/11 に関連記事) 以外に, 付属エディタ (コマンド edit, 実行ファイル $MATLAB\bin\medit.exe) にも 似たような不具合を見つけた. [Delete] キーを連打して文字を消していくと, 日本語文字のところでキーを受け付けない (別に, ハング・アップする訳ではなく, 別のキー操作はその後も可能). 後ろから [Back space] キーを使っている限りは全く問題は無い.

おまけ:岡田さん@サイバネットシステム MATLAB プロダクト部から, 私の website へのリンクを張りたい旨の連絡があった. 折角なので,散在していた MATLAB 情報を少し整理した. 書き残しておいた方が良いことがいくつか溜まっているので, 暇を見つけて書くことにしよう.

2000/07/10

図を PostScript 出力 (print コマンドでデバイスとして -deps, -dps などを指定) するとき, 日本語文字列だけ正常な位置に出力されない MATLAB PostScript Driver の 不具合は,text のプロパティ HorizontalAlignmentleft に したときには見受けられない. これを centerright にすると 変な位置になる (英語文字列は問題無し). その場凌ぎで手を入れると後で再利用し難いだろうから, 「日本語文字列は左揃えだけ」だと思って使うことにする.

2000/04/13

2000/04/11 で書いた, 日本語文字列を含むコマンドライン編集時に Ctrl+F が効かない不具合は, 次期バージョンでは直るそうだ (Thanks: 熊澤さん@サイバネットシステム).

同じく 2000/04/11 で書いた,JIS と Shift JIS の変換用 M-functions を国内販売元から提供してもらうことが出来た (Thanks: 熊澤さん@サイバネットシステム). 暇が出来たら Excel Link の MLGetMatrix, MLPutMatrix のように 使える日本語文字列用の Excel マクロでも書くことにしよう.

2000/04/11

もう大分前のことだが, バージョン 5.3 (Release 11) から日本語が使えるようになった. これまでも日本語版マニュアルはあった. Root の Property Language を,

>> set( 0, 'Language', 'japanese' )
>> set( 0, 'Language', 'english' )

で切り替えると, ヘルプの内容を日本語にしたり英語にしたり出来る. 切り替えては分かり易い方を読める.日本人で良かった.

日本語への対応は,文字配列 (character array) の値についても行われている. 変数名に日本語は無理だが,それはそれで良い. 残念ながら,コマンド・ライン編集時のキー割当 Ctrl+A, Ctrl+E, Ctrl+F, Ctrl+B のうち, Ctrl+F だけは,日本語文字のところから先に進んでくれない. あと,せっかく日本語を図に入れられるようになったが,

>> print -deps foo.eps

として内蔵の PostScript driver を使うと, 日本語フォントの部分だけ位置がずれる. 論文用の図は英語だけでも問題ないが, 講義資料には日本語を入れたいので結構残念. この数日間,この問題について The MothWorks の Rob Henson 氏と サイバネットシステムの熊澤氏には, 丁寧な対応を頂いた(多謝). 残念ながら現時点では私の努力では解決できないので, 仕方なく Adobe PostScript driver を使う. メニューが出たり,ファイル名をフルパスで書かなければならないので かなり面倒くさい. それに,フォント情報を EPS ファイルに埋め込むらしいので, ファイルが大きくなってしまう. The MothWorks,サイバネットシステム両社で頑張ってくれているようなので, 近い将来には日本語環境はもっと快適になるだろうと期待している.

とはいえ,文字配列に日本語が使えるのは, 研究目的でもかなり役に立つ. 今書いている廃棄物産業連関分析用の M-script では, 産業部門や廃棄物を名前で管理できる. 行列の個々の要素を参照するために部門番号を自然数で指定してしまうと, 新規廃棄物を追加したり部門統合を変更したりしたときに, 連番にずれが生じてバグの原因になるので,この機能はかなり嬉しい. 難を言えば, Excel の文字列関数のコードが JIS で, MATLAB のそれが Shift JIS のために, Excel Link で日本語文字列のやり取りが出来ないのは残念. 出回っているフリーの日本語コード変換ツールのソースを読んで 勉強すれば簡単らしいのだが, 今そこまでするよりも,早く計算して論文を書く方が良さそうだ.

リンク

Valid HTML 4.01! 近藤康之 my mail address
〒169-8050 東京都新宿区西早稲田 1-6-1
早稲田大学政治経済学部