OS X 10.9とMatlab R2016aでgfortranを使う

(1)OS X 10.9 (Mavericks)にgfortranをインストール

  1. Xcodeをインストール:App Storeの検索窓に"xcode"と入力して、xcodeを探して、インストールする
  2. Xcode 6.1以降ではcommand-line toolsがプレインストールされるようになった模様 [参考] Mac での Xcode コマンド ライン ツールのインストール
  3. gccをダウンロード:"High Performance Computing for Mac OS X" http://hpc.sourceforge.net/ からgcc-4.9-bin.tar.gzをダウンロード*1
  4. gccを解凍:ターミナルでsudo tar -zxvf gcc-4.9-bin.tar.gz -C / と入力*2

[Ref] http://hpc.sourceforge.net/

(2)Matlab R2016aでgfortranを使う
次にOS X 10.9 (Mavericks)上のMatlab r2016aでgfortranを使うには/usr/local/binへのパスを設定する必要があるため、start.mなどに以下のように書いておく。

setenv('PATH', [getenv('PATH') ':/usr/local/bin']);
[Ref] http://www.mathworks.co.jp/matlabcentral/answers/116922-mex-cannot-find-gfortran-compiler-mac-os

最後にgfortranが設定されているか確認する。

mex -setup FORTRAN

(3)Matlab R2016aでFortranコードを確認
/Applications/MATLAB_R2014a.app/extern/examples/refbookからサンプルコードをコピーしてmexを確認する。

[コード例1]
mex timestwo.F
コンパイルが無事に終了)
x = 99;
y = timestwo(x)
[Ref] http://www.mathworks.co.jp/jp/help/matlab/matlab_external/passing-a-scalar_btgcf9p-1.html

[コード例2]
mex matsq.F
コンパイルが無事に終了)
x = [1 2 3; 4 5 6];
y = matsq(x)
[Ref] http://www.mathworks.co.jp/jp/help/matlab/matlab_external/passing-matrices.html

[コード例3]
mex sincall.F fill.F
コンパイルが無事に終了)
sincall
[Ref] http://www.mathworks.co.jp/jp/help/matlab/matlab_external/calling-functions-from-fortran-mex-files.html

[コード例4]
mex yprimef.F yprimefg.F
コンパイルが無事に終了)
yprimef(1, 1:4)

*1:Mathworksの公式サイトには「Intel Fortran Composer XEのみサポート」と書いてあるが、簡単なコードはgcc-4.9でも動く模様(今後要確認)

*2:gccやgfortranがインストールされるのは/usr/local配下

varsでのベクトル自己回帰の結果をxtableでLaTeXに出力する

変数それぞれに対して係数の推定結果を出力することは可能*1。たとえばこんな感じ:

require(vars)
data(Canada)
var.canada <- VAR(Canada, p = 2, type = "none")
summary(var.canada)

ここまではvarsの機能。Canadaはe, prod, rw, Uの4変数からなるデータセット。たとえばUに関する回帰式の推定結果をLaTeXのtable形式に出力するにはxtableを使って以下のように行う。

require(xtable)
xtable(summary(var.canada$varresult$U))

*1:一度に全部の式を出力する方法があったら教えて下さい。

配列の1列目をインデックスとしてソートする

Matlabで配列の1列目をインデックスとしてソート(並べ替え)する

たとえば

A = [2 5 8 ; 3 4 7 ; 1 6 9]

という配列の1列目(1列目の[2;3;1])をインデックスとして昇順でソートする。つまり以下のような配列Cを得たい。

C = [1 6 9 ; 2 5 8 ; 3 4 7]

この場合、sortrowsを使えば簡単にできる。

B = sortrows(A)
isequal(B,C)

参考:
http://jp.mathworks.com/help/matlab/ref/sortrows.html
http://jp.mathworks.com/help/matlab/ref/isequal.html

OS X (10.9.5)にHomebrewでEmacs 24.5をインストール

$ brew install --japanese --cocoa -v emacs

なお、Emacs 24.4は/usr/local/Cellar/emacs/24.5配下にインストールされる。

ちなみに/usrは不可視になっているので、termianl上で以下のように入力すればフォルダが開ける:

open /usr/local/Cellar/emacs/24.5

[参考]
http://www.sevencredit.com/2014/07/02/580/

OS Xでアプリ内のウィンドウ切り替え

通常は「Command + F1」もしくは「Command + Fn + F1」だが、面倒(F1がキーボードの上の方にあるので届きにくい&矢野は手が不器用)なので、キーアサインを入れ替えることにした。

とりあえず「Command + E」に設定してみた。後日、再設定する可能性あり。

参考
http://c-through.blogto.jp/archives/38812126.html