Matx Octave Matlab Scilabのメモ


・大東のPC教室では、Matx・Octave・ScilabをWindowsマシン全てに導入済みです。
・自分のためのメモなので,下記に間違いがあっても,一切責任はとりません.空欄は単に調べていないだけ.
・OSは全てWindows NT4.0

[1]パスの変更 [2]行列の読み書き [3]行列関数(基本) [4]行列演算 [5]記述統計関数
[6]乱数・統計関数 [7]ユーザー定義関数 [8]簡単なグラフ [9]非線型計画 [10]Function Evaluation

[1]パスの変更とPresent Working Directory

Matx (ver. 5.2.16) Octave (ver. 2.1.31) Matlab (ver. 6.1) Scilab (ver. 2.6)
パスの変更
(z:\test へ)
chdir("z:\\test")
(注1)
cd /cygdrive/z/test
(注2)
cd z:\test chdir("z:\\test")
(注3)
present working directory
の表示
! cd
(注4)
pwd
ログファイルの作成と終了 ? ? diary('ファイル名')
diary off
diary 'ファイル名'
diary(0)

(注1)\マークを読み取れる場合には,z:\testでも大丈夫だが,大東ではこれでないとだめ.
(注2)大東ではcygwinの中で実行するので,WindowsのZドライブは,cygdrive/zにマウントしてある.
(注3)single quotation 'z:\test' でも大丈夫(Scilabはどちらでも認識するようだ)
(注4)記号 ! はDosシェルに渡す記号.従って,! dir とすれば,pwd内のファイル一覧が見える.


[2] 行列の読み込み・書き込み

fopenなどのように3行使わないで,1行で済ますことのできる関数

Matx Octave Matlab Scilab
テキストファイルから
行列を読み込んで,それをXとする.
(注1)
read X << "mat1.txt"
(注2)
load "mat2.txt"
(注3)
X=load('mat0.txt')
X=fscanfMat('mat0.txt')
コマンドラインで,
[1 2
3 5] を入力
X=[[1 2] [3 5]] X=[1 2;3 5]
行列Xの出力 print X>>"ファイル名"
(注2)'
? dlmwrite('ファイル名',X) fprintfMat('ファイル名',X,'出力フォーマット')
(注4)

(注1)ファイル名をmat0.txtとして,プレゼントワーキングディレクトリにあるとしよう.
(注2)この場合,mat0からmat1を次のように書き換えねばならない.
(注2)'上記ファイルの形式で,行列が入れ替わり,行数と列数を表す数字が#とともに第1行に入る
(注3)この場合,mat0からmat2を次のように書き換えねばならない.
(注4)フォーマットは, %5.2f のような一般的な形.


[3]行列関数(基本)

Matx Octave Matlab Scilab
全部1の行列(m行n列) ONE(m,n) ones(m,n)
全部0の行列(m行n列) Z(m,n) zeros(m,n)
単位行列(m行m列) I(m) eye(m) eye(m,m)
Xのサイズ size(X)
Xの行数 Rows(X) size(X,1)
Xの列数 Cols(X) size(X,2)

[4]行列演算

行列同士の和や積は,X+Y,X*Yで共通

Matx Octave Matlab Scilab
行列Xと行列Yの,
成分同士の積と商
X.*Y
X./Y
行列Xの逆行列(以下Xは行列) inv(X)
Xの転置行列 X'
Xとスカラーaの積
(Xの各成分にaを掛ける)
a*X
Xのトレイス trace(X)
正方行列Xの行列式 det(X)
Xとスカラーaの和
(Xの各成分にaを加える)
a.+X a+X
XとY(ともに行列)のクロネッカー積 ? ? kron(X,Y) ?
X対角成分を,列ベクトル化 diag2vec(X) diag(X)
列ベクトルvの対角行列化 vec2diag(v) diag(v)
Xの固有値行列(A)と
固有ベクトルの行列(V)
{A,V}=eig(X) [V ,A]=eig(X) [al,be,V]=gspec(X,eye(X))
(注1)

(注1) al./be で固有値を表す列ベクトル.固有値行列にするには,A=diag(al./be);


[5]記述統計関数

Xは行列(m行n列とする)
yは列ベクトル(m行1列とする)

Matx Octave Matlab Scilab
Xの全体の合計(答えはスカラー) sum(X) sum(sum(X)) sum(sum(X)) sum(X)
Xの列ごとの合計(答えは行ベクトル) sum_col(X) sum(X) sum(X,'r')
Xの行ごとの合計(答えは列ベクトル) sum_row(X) ? sum(X,2) sum(X,'c')
Xの列ごとの平均 mean_col(X) mean(X) mean(X,'r')
Xの列ごとの不偏分散(もしくは標準偏差) std_col(X)
(注1)
std(X)
(注1)
var(X) ?
yの不偏分散 std(y)
(注1)
? var(y) ?

(注1) 標準偏差を返す.


[6]乱数発生,統計関数

Excelも含める

Matx Octave Matlab Scilab Excel2000(ワークシート上)
U[0,1)に従う一様乱数の
行列(m行n列)
rand(m,n) rand(m,n) もしくは
rand(m,n,'uniform')
=rand()
標準正規乱数 randn(m,n) rand(m,n,'norm') =norminv(rand(),0,1)
正規分布の密度関数

 X〜N(m,s^2)として
X=kの時の密度関数の値
φ[(k-m)/s]
なし normal_pdf(k,m,s^2)
(注1)
normpdf(k,m,s)
(注3)
なし =normdist(k,m,s,false)
正規分布の分布関数

 X〜N(m,s^2)として
X=kの時の密度関数の値
Φ[(k-m)/s]
なし normal_cdf(k,m,s^2)
(注1)
normpdf(k,m,s)
(注3)
cdfnor("PQ",k,m,s) =normdist(k,m,s,true)
N(m,s^2)正規分布の逆関数

 X〜N(m,s^2)として,Pについて,
(X-m)/s=Φ-1(P) となるようなXの値を求める.
なし normal_inv(P,m,s^2)
(注2)
norminv(P,m,s)
(注3)
cdfnor("X",m,s,P,1-P) =norminv(P,m,s)

(注1) Xは行列でなければならない.normal_pdf(Xの値,平均,分散) というように第3引数は標準偏差でなく分散
(注2) Pは行列.スカラーの場合は,標準正規分布の逆関数のみ可能で,normal_inv(P)と引数はPのみ.
(注3) Statistical Toolboxが必要


[7]ユーザー定義関数とその使い方

Matx Octave Matlab Scilab
推奨拡張子 .mm .m. .sci
関数の書き方 (最小2乗推定量の場合)
関数 myols
 行列Xmat(m行n列)とyvec(m行1列)を
インプットして,そのOLS推定量を返す関数
Func Matrix myols(Xmat,yvec)
Matrix Xmat,yvec;
{
Matrix b;
b=inv(Xmat'*Xmat)*Xmat'*yvec;
return b;
}
function b=myols(Xmat,yvec)

b=inv(Xmat'*Xmat)*Xmat'*yvec;
関数を使うためには
保存名(myols.mm, myols.m, myols.sci)
として上のプログラムが,PWD上で保存してあるとする.
コマンドプロンプト上で,
load "myols.mm"
書けば,その後使うことができる.
PWD上にmyols.mが保存されて
いるので,そのまま使える.
コマンド上で,
getf("myols.sci")
と書けば,その後使うことができる.
実行の様子.
(X=[1 1 1]'
 y=[4 5 6]'

としたので,答えはyの平均値となる.)

上記はOctaveの様子
-->getf("myols.sci")

-->X=ones(3,1)
X =

! 1. !
! 1. !
! 1. !

-->y=[4 5 6]'
y =

! 4. !
! 5. !
! 6. !

-->bhat=myols(X,y)
bhat =

5.



[8]簡単なグラフ

Matx Octave Matlab Scilab
グラフのプロット(1)
2つの行ベクトルx,y
(xとyの長さは同じ)
gplot(x,y) plot(x,y) plot(x,y)
グラフのプロット(2)
行ベクトルx,行列y
(xYの列数は同じ)
なし
グラフのプロット(3)
2つの列ベクトルx,y
(xとyの長さは同じ)
なし ? plot(x,y) plot(x,y)
グラフのプロット(4)
列ベクトルx,行列y
(xYの行数は同じ)
なし ? plot(x,y) plot2d(x,y)

[9]非線型計画

Matx Octave Matlab Scilab
ベクトル方程式 ftest(x)=0を解く.
(初期値 x0)
なし [x,info]=fsolve("ftest",x0)
注1)
[x,v,info]=fsolve(x0,ftest)
注2)
最小値を求める
Y=argminx[ftest(X)]
(初期値 x0)
なし Y=fminsearch('ftest',x0)

注1) info=1の場合正常終了
注2) info=1の場合正常終了.vは終了時の値(かなり0に近い)

[10]Function Evaluation

Matx Octave Matlab Scilab
関数ftest のxの値を,ftest(x)以外で求める feval("ftest",x) feval(x,ftest)
(注1)

(注1)xはスカラーのみ有効.ベクトルのときは,期待する値にならない場合がある.


Topページへ戻る

修正 2003年05月20日, (c) Tamotsu KADODA