MATLABのコードって忘れやすい・・・

プログラムのコマンドなんて忘れやすいもの・・・いっそのことネット上に保存してシェアしましょう!!
It's easy to forget command for MATLAB in programming.... Let's share small help for Matlab code with you on the web!!



2010年10月28日木曜日

wrev ベクトルのフリップ

ベクトルを反転させるのには、wrevという関数が使える。
といっても、中身は非常にシンプル。あえて、関数化する必要もないと思うのだが・・・

y=wrev(x)

x:ベクトル

2010年10月13日水曜日

Voronoi tessellation ボロノイ図

ボロノイ図は平面的に何かを表現するときに便利。
このブログと同じようにコードを書いているサイト発見(ここ
参考までにどうぞ。

2010年10月6日水曜日

ANOVA 分散因子解析

3群比較などの検定を行う時に使うのがANOVA解析。


p = anova1(X)
p = anova1(X,group)
p = anova1(X,group,displayopt)
[p,table] = anova1(...)
[p,table,stats] = anova1(...)

行列Xは(サンプルX群)で入力する。
p値が十分小さければ、群間の平均は等しくなく、有意差があることになる。
その後、post hocテストで正式に有意差を示すことができる(ここを参照)。

multcompare

という関数にstatsを入力すればOKらしい。


(例)
[p t st]=anova1(X,{'50Hz','200Hz','800Hz'},'off');
[c,m,h,nms]=multcompare(st,'display','on');
[nms num2cell(m)]

2010年10月5日火曜日

polyfit 多項式のフィッティング

p = polyfit(x,y,n)
[p,S] = polyfit(x,y,n)
[p,S,mu] = polyfit(x,y,n)

例えば、リニアフィッティングなら、
x=1:3;
y=[190 204 305];
[p,s,mu]=polyfit(x,y,1);
p =
57.5000 233.0000
s =
R: [2x2 double]
df: 1
normr: 35.5176
mu =
2
1

となる。pは係数(aX+bのaとb)ということになる。
sは
muは、データxの平均と分散か。
ちなみに、フィットぐらいを調べる関数として、こんなものありました。

gfit

参考までにどうぞ。
ちなみに、Goodness-of-Fittingはオプション8に相当する。

2010年10月3日日曜日

行列の左右反転 Flip the matrix from right to left

fliplr

FLIPLR 行列の左右方向の反転

FLIPLR(X) は、X の行はそのままで、列を左右方向に反転させた結果を返します。
たとえば、

X = 1 2 3 は 3 2 1 になります。
4 5 6 6 5 4

2010年9月30日木曜日

棒グラフ色々 Several bar graphs

Y = round(rand(5,3)*10);
subplot(2,2,1)
bar(Y,'grouped')
title 'Group'
subplot(2,2,2)
bar(Y,'stacked')
title 'Stack'
subplot(2,2,3)
barh(Y,'stacked')
title 'Stack'
subplot(2,2,4)
bar(Y,1.5)
title 'Width = 1.5'

2010年9月24日金曜日

軸の設定 Axis setting

・軸の反転
set(gca,'XDir','rev','YDir','rev','ZDir','rev')
・軸の範囲
set(axes_handle,'XLim',[0 100])
・軸の目盛
set(gca,'YTick',[0 0.05 0.075 0.1 0.15 0.2 0.25])


詳細はこちら

2010年9月21日火曜日

matrixの上下の反転 Flip a matrix from up to bottom

使えそうなコードを見つけた・・・flipud
matrixをup & downと反転させる場合に使えそう。

function y = flipud(x)
%FLIPUD Flip matrix in up/down direction.
% FLIPUD(X) returns X with columns preserved and rows flipped
% in the up/down direction. For example,
%
% X = 1 4 becomes 3 6
% 2 5 2 5
% 3 6 1 4
%
% Class support for input X:
% float: double, single
%
% See also FLIPLR, ROT90, FLIPDIM.

% Copyright 1984-2004 The MathWorks, Inc.
% $Revision: 5.9.4.3 $ $Date: 2004/07/05 17:01:15 $

if ndims(x)~=2
error('MATLAB:flipud:SizeX', 'X must be a 2-D matrix.');
end
y = x(end:-1:1,:);

errorbar etc....

Matlab Centralを見ると、errorbarに関するコードが他にもこんなにあった。

http://www.mathworks.com/matlabcentral/fileexchange/27387-create-healthy-looking-error-bars

http://www.mathworks.com/matlabcentral/fileexchange/10803-barweb-bargraph-with-error-bars

http://www.mathworks.com/matlabcentral/fileexchange/27494

ってなわけで、これを試してみるべし。

paired t-test

[h1,p1]=ttest2(X,Y,0.05,'both','unequal')

h1=1ならベクトルX,Yに有意に差がある。
h0=0ならベクトルX,Yにp1の確率で差がない。

bar + errorbar

http://www.mathworks.co.jp/support/solutions/ja/data/1-9J8S0T/index.html?product=ML&solution=1-9J8S0Tより抜粋。

BAR 関数で棒グラフを描画し、ハンドルから棒グラフの左端と右端の X 座標を取得して中心値を計算し、中心値に対して ERRORBAR 関数で描画します。
具体的には、下記の手順で行なえます。

1. bar 関数で棒グラフを描画(このとき、出力引数を付けてハンドルを取得)
2. 上記 1 で得られたハンドル各棒グラフの X 座標値を取得し、各棒グラフの
   中心座標を計算
3. 上記 2 で計算した X 座標を使用し、 errorbar 関数でエラーバーを描画

以下に例を示します。

% データ定義
Y = round(rand(5,3)*10); % グループ数 3、標本数 5
e = std(Y); % 標準偏差の計算

% 棒グラフの描画
figure, h = bar(Y,'hist'); % ハンドルを取得
hold on

[numgroups, numbars] = size(Y); % numgroups: グループ数, numbars: 標本数

% 各棒グラフのX座標値を取得
xdata = get(h,'XData'); % 出力はセル配列
% X座標から各棒グラフの中心座標を計算
centerX = cellfun(@(x)(x(1,:)+x(3,:))/2,xdata,'UniformOutput', false);

E = repmat(e,numgroups,1); % グラフ表示用にデータを拡張
C = {'b','g','r'}; % エラーバーの色

% 標準偏差を棒グラフに重ねて描画
for i = 1:numbars
errorbar(centerX{i,:}, Y(:,i), E(:,i), C{i},...
'linestyle', 'none','LineWidth',2);
end

なお、このプログラムでは、グループ毎に標準偏差の色分けを行い、さらに ERRORBAR 関数の各点を結ぶ線を非表示にしてプロットしています。
各点を結ぶ線を消すには、出力引数を付けて ERRORBAR 関数を実行後、'LineStyle' プロパティに 'None' を設定します。

また、プログラム内では、各棒グラフの X座標の中心座標を計算する際に、CELLFUN 関数を使用しています。この関数の機能については、関連ソリューションをご覧下さい。