HOME > MATLAB

MATLAB

よく使う関数

※MATLAB起動後,help 関数名で詳細を知ることができます.

一般的な関数

addpath pathを加える.See genpath.
cd ディレクトリの移動.
clc コマンドウィンドウのクリア.
genpath 指定ディレクトリ以下のサブディレクトリのpath作成.See addpath.

表示

disp 画面に表示.
fprintf 形式を伴った表示.

入力・出力

load データの読み込み.See save.
save データの保存.See load.
xlsread Excelファイルの読み込み.See xlswrite. Mac版では利用不可.
xlswrite Excelファイルの書き出し.See xlsread. Mac版では利用不可.

行列関係

diag 対角行列の作成・ベクトル化.
eye(n) n×nの単位行列の作成.
kron クロネカー積.

繰り返し文

for 指定回数のループ.
while 条件を満たす間はループ.

一般的なシンタックス

% 行単位でコメントアウト(パーセント記号).
%{ コマンド %} ブロック単位でコメントアウト(パーセント記号と波括弧).
... 長いステートメントの入力(行末に入力してから改行する).
end 配列の最後の要素.

(Uploaded: 2010年10月31日, Last Updated: 2011年03月13日)  ページ上部へ移動

非線形最小二乗法

nlinfitによる非線形最小二乗法

MATLABで非線形最小二乗法を行うにはnlinfitを使います.なお,nlinfitを使用するには,Statistics Toolboxが必要になります.

ここでは,Ox - 非線形最小二乗法 (Levenberg-Marquardt Methods)と同じデータを使用します.

以下のように2つのmファイルを作成します.myfun.mは,nls.mの中で呼び出す関数です.nlinfitは,myfun.mで定義した関数の2乗和を最小にするパラメータベクトルの推定値を求めます.

  • myfun.m

function vY = myfun( vP, mX )
  vY = vP(1) + (1/vP(2))*log( vP(3)*(mX(:,1).^vP(2)) + (1-vP(3))*(mX(:,2).^vP(2)) );

  • nls.m

%Load Data
data = csvread('data.csv');
vy = data(:,1);
mx = data(:,2:3);
clear data;

%Inital Values
vp0 = [1; 0.1; 0.1];

%NLS
options = optimset('Display', 'iter', 'TolX', 1e-12);
vp = nlinfit( mx, vy, @myfun, vp0, options);

disp('========== RESULTS ==========');
vp

上記では,optimsetで反復計算毎の結果を表示するようにしています.また,許容誤差は1e-12に設定しています.

プログラムの実行結果は以下のリンクのテキストファイルから閲覧できます.

計算結果は,Ox,Octave,Stataの計算結果と同じになっています.計算結果は下にテキストファイルのリンクがあります.

全てのMファイルとcsvファイルを同一のディレクトリに保存し,MATLABでそのディレクトリに移動後,nlsとタイプすればプログラムを実行できます.

【作成したMATLABのプログラム】: nls.m, myfun.m
【使用したデータ】: data.csv
【プログラムの実行結果】: output_nls.txt

lsqnonlinによる非線形最小二乗法

Optimization Toolboxのlsqnonlinでも可能です.

  • myfun1.m

function vU = myfun1( vP )
  %Load Data
  data = csvread('data.csv');
  vy = data(:,1);
  mx = data(:,2:3);
  clear data;
  vU = vy - vP(1) - (1/vP(2))*log( vP(3)*(mx(:,1).^vP(2)) + (1-vP(3))*(mx(:,2).^vP(2)) );

  • nls1.m

%Inital Values
vp0 = [1; 0.1; 0.1];

%NLS
options = optimset('Display', 'iter', 'TolX', 1e-12);
vp = lsqnonlin( @myfun1, vp0, [], [], options);

disp('========== RESULTS ==========');
vp

プログラムの実行結果は以下のリンクのテキストファイルから閲覧できます.

lsqnonlinを使う場合は,関数mファイルの方でデータを読み込む必要があります.

【作成したMATLABのプログラム】: nls1.m, myfun1.m
【使用したデータ】: data.csv
【プログラムの実行結果】: output_nls1.txt

(Uploaded: 2011年02月22日, Last Updated: 2011年10月04日)  ページ上部へ移動

(Uploaded: 2011年02月15日, Last Updated: 2011年02月15日)  ページ上部へ移動