ラベル MATLAB の投稿を表示しています。 すべての投稿を表示
ラベル MATLAB の投稿を表示しています。 すべての投稿を表示

2007年6月16日土曜日

MATLAB内からのPostgreSQLクエリーの直接実行

dbname = ''; %データベース名
user = ''; %ユーザ名
pwd = ''; %パスワード
db = struct('dbname',dbname,'user',user,'pwd',pwd);
%指定したPostgeSQLデータベースへ、ユーザ名とパスワードを入力してアクセスします。
connect = database(db.dbname, db.user, db.pwd, 'org.postgresql.Driver', 'jdbc:postgresql://localhost:5432/');
sql = 'select * from usdjpy';
%データを選択するため、カーソルをオープンし、SQLクエリーを発行します。
curs = exec(connect,sql);
%setdbprefs('DataReturnFormat','cellarray');
setdbprefs('DataReturnFormat','structure');
data = fetch(curs);
close(curs);

2007年6月2日土曜日

よく利用されるMATLABのシンボリック

SYM シンボリックな数値、変数、オブジェクトの作成
例: sym('x') sym(1/3,'r')
SYMS シンボリックオブジェクト作成のショートカット
例: syms x y z
VPA 可変精度の演算
例:vpa(pi,128)
DOUBLE 倍精度に変換
例: double(x)
CHAR キャラクタ配列(文字列)の作成
例: char(x)
FINDSYM シンボリック式、または、行列内の変数の検出
例: syms x y z, z=x^2+y^2, findsym(z) は、x,yを出力する
FINVERSE 逆関数
finverse(f)
SYMSUM シンボリックな総和
SYMSUM(S, v) は、v について無限大の総和を求めます。
SYMSUM(S, a, b) と SYMSUM(S, v, a, b)は、a から b までのシンボリック式
の総和を求めます。
SOLVE 代数方程式のシンボリックな解
例: solve('x^2-1=0')
CLASS オブジェクトの作成、または、オブジェクトのクラスの出力
例: class(obj)

SUBEXPR 共通する部分式による式の書き換え
SIMPLE シンボリック式、または、行列の最も短い表現の検索
PRETTY シンボリック式のプリティプリント
LATEX シンボリック式の LaTeX 表現
PRIMES 素数のリストの作成

SUBS シンボリックな代入
COMPOSE 関数の合成,COMPOSE(f,g)は、f(g(y))を出力する

2007年4月14日土曜日

サイコロによるベルヌイ試行



%15個のサイコロを同時に投げる試行を100000回行うときに,
%1の目が出る分布
M = 100000;% M回のベルヌイ試行
N = 15;% N個のサイコロ
x = unidrnd(6,M,N);% 1-6の離散一様分布からの乱数のMxN配列
one = (x==1); % 1の目が出る回数
hist(sum(one'),0:N);
xlim([-1 11]);
grid on
print('-dpng','-r80','saikoro.png');

2007年4月13日金曜日

モンテカルロ法によるPIの推定(ビフォンの問題)


%ビフォンの問題
No = 100;
D = 0.2;
L = 0.1;
line = L/2:D:1-L/2
for j=1:No
N = j*100;
y = rand(N,1);
theta = rand(N,1)*pi/2;
y1 = y + L/2*cos(theta);
y2 = y - L/2*cos(theta);
s = 0;
for i=1:length(line)
s = s + sum( (line(i) >= y1) == (line(i) <= y2) );
end
%
% p = 2*L/(pi*D)
%
p = s/N
PI(j) = 2*L/(D*p);
NS(j) = N;
end

hold on;
plot(NS,PI,'.k');
plot(NS,ones(No,1)*pi,'--r');
title('ビフォンの問題');
xlabel('繰り返し回数');
ylabel('\piの推定');
grid on;
hold off;
print('-dpng','-r80','pi_buffo.png');

2007年4月12日木曜日

モンテカルロ法によるPIの推定


%モンテカルロ法によるPIの推定
No = 100;
for i=1:No
N = 100*i;
x = rand(N,1); %一様分布の擬似乱数
y = rand(N,1); %一様分布の擬似乱数
r = x.^2+y.^2;
NS(i) = N;
PI(i) = 4*sum(r<1)/N;
end
r = 1;
c = 2;
subplot(r,c,1);
hold on;
plot(NS,PI,'.k');
plot(NS,ones(No,1)*pi,'--r');
xlabel('繰り返し回数');
ylabel('\piの推定');
grid on;
hold off;
subplot(r,c,2);
hold on;
t = 0:0.01:pi/2;
rx = cos(t);
ry = sin(t);
plot(rand(No*100,1),rand(No*100,1),'.k');
plot(rx,ry,'r');
grid on;
hold off;
print('-dpng','-r80','pi_mento.png');

2007年4月10日火曜日

対応なしのt検定:2 標本の平均値の差の検定

%MATLABの場合
echo on
N1 = 20;
N2 = 30;
x = rand(N1,1); % 標本1の一様分布の擬似乱数
x_mea = mean(x); % 標本1の平均値
disp(x_mea);
0.5539
x_std = std(x); % 標本1の不偏標準偏差
disp(x_std);
0.3199
y = rand(N2,1); % 標本2の一様分布の擬似乱数
y_mea = mean(y); % 標本2の平均値
disp(y_mea);
0.5384
y_std = std(y); % 標本2の不偏標準偏差
disp(y_std);
0.2955
%帰無仮説: x_mea(標本1の平均値)は,y_mea(標本1の平均値)である
%対立仮説: x_mea(標本1の平均値)は,y_mea(標本1の平均値)ではない
%両側5%有意水準でttest2を実行する
%2つの独立な標本が平均の等しい分布
[h,p,ci,stats] = ttest2(x,y); %共同(pooled)または共同ではない(unpooled)分散をもつ2標本T-検定
str = sprintf('h = %1.2f, p = %f, ci = [%f,%f]',h,p,ci(1),ci(2));
%h = 0 -> 帰無仮説は、棄却しない。つまり、x_mea(標本1の平均値)は,x_mea(標本2の平均値)である
disp(str);
h = 0.00, p = 0.861089, ci = [-0.161731,0.192748]
disp(stats);
tstat: 0.1759
df: 48
sd: 0.3054
disp(stats.sd);
0.3054
%2つの標本が、未知、または等しくない分散
[h,p,ci,stats] = ttest2(x,y,[],[],'unequal'); %共同(pooled)または共同ではない(unpooled)分散をもつ2標本T-検定
str = sprintf('h = %1.2f, p = %f, ci = [%f,%f]',h,p,ci(1),ci(2));
%h = 0 -> 帰無仮説は、棄却しない。つまり、x_mea(標本1の平均値)は,x_mea(標本2の平均値)である
disp(str);
h = 0.00, p = 0.863469, ci = [-0.165760,0.196777]
disp(stats);
tstat: 0.1731
df: 38.5863
sd: [2x1 double]
disp(stats.sd);
0.3199
0.2955

対応ありのt検定:2 標本の平均値の差の検定

%MATLABの場合
echo on
N = 20;
x = rand(N,1); % 標本1の一様分布の擬似乱数
x_mea = mean(x); % 標本1の平均値
disp(x_mea);
0.5653
x_std = std(x); % 標本1の不偏標準偏差
disp(x_std);
0.2773
y = rand(N,1); % 標本2の一様分布の擬似乱数
y_mea = mean(y); % 標本2の平均値
disp(y_mea);
0.4351
y_std = std(y); % 標本2の不偏標準偏差
disp(y_std);
0.1968
d = x - y;
d_mea = mean(d);
disp(d_mea);
0.1301
%帰無仮説: x_mea(標本1の平均値)は,y_mea(標本1の平均値)である
%対立仮説: x_mea(標本1の平均値)は,y_mea(標本1の平均値)ではない
%両側5%有意水準でttestを実行する
[h,p,ci,stats] = ttest(d,0); %1標本と対標本T-検定
str = sprintf('h = %1.2f, p = %f, ci = [%f,%f]',h,p,ci(1),ci(2));
%h = 0 -> 帰無仮説は、棄却しない。つまり、x_mea(標本1の平均値)は,x_mea(標本2の平均値)である
disp(str);
h = 0.00, p = 0.120141, ci = [-0.037243,0.297517]
disp(stats);
tstat: 1.6273
df: 19
sd: 0.3576

母分散の検定:母平均が既知・未知

%MATLABの場合
echo on
N = 10000;
data = rand(N,1); % 母集団の一様分布の擬似乱数
d_mea = mean(data); % 母集団の平均値
disp(d_mea);
0.4990
d_std = std(data,1);
disp(d_std);
0.2903
SN = 20;
sdata = rand(SN,1); % 標本の一様分布の擬似乱数
s_mea = mean(sdata); % 標本の平均値
disp(s_mea);
0.5670
s_std = std(sdata); % 標本の不偏標準偏差
disp(s_std);
0.2542
%帰無仮説: s_std(標本の不偏標準偏差)は,d_std(母集団の標準偏差)である
%対立仮説: s_std(標本の不偏標準偏差)は,d_std(母集団の標準偏差)ではない
%母平均が既知
%http://www.cybernet.co.jp/matlab/library/library/file/T/chi2test_var.m
[h,p,ci,stats]=chi2test_var(sdata,d_std^2,d_mea);
str = sprintf('h = %1.2f, p = %f, ci = [%f,%f]',h,p,ci(1),ci(2));
%h = 0 -> 帰無仮説は、棄却しない。つまり、s_std(標本の不偏標準偏差)は,d_std(母集団の標準偏差)である
disp(str);
h = 0.00, p = 0.526566, ci = [0.038656,0.137721]
disp(stats);
chi2stat: 15.6726
df: 20
%母平均が未知
[h,p,ci,stats]=chi2test_var(sdata,d_std^2,[]);
str = sprintf('h = %1.2f, p = %f, ci = [%f,%f]',h,p,ci(1),ci(2));
%h = 0 -> 帰無仮説は、棄却しない。つまり、s_std(標本の不偏標準偏差)は,d_std(母集団の標準偏差)である
disp(str);
h = 0.00, p = 0.501376, ci = [0.037385,0.137899]
disp(stats);
chi2stat: 14.5732
df: 19

2007年4月9日月曜日

母平均の検定( t検定 ):母集団の平均値が既知,分散が未知

%MATLABの場合
echo on
N = 10000;
data = rand(N,1); % 母集団の一様分布の擬似乱数
d_mea = mean(data); % 母集団の平均値
disp(d_mea);
0.4975

SN = 20;
sdata = rand(SN,1); % 標本の一様分布の擬似乱数
s_mea = mean(sdata); % 標本の平均値
%帰無仮説: s_mea(標本の平均値)は,d_mea(母集団の平均値)である
%対立仮説: s_mea(標本の平均値)は,d_mea(母集団の平均値)ではない
disp(s_mea);
0.4303

s_std = std(sdata); % 標本の不偏標準偏差
disp(s_std);
0.3290

%両側5%有意水準でztestを実行する
[h,p,ci,stats] = ttest(sdata,d_mea); %1標本と対標本T-検定
str = sprintf('h = %1.2f, p = %f, ci = [%f,%f]',h,p,ci(1),ci(2));
%h = 0 -> 帰無仮説は、棄却しない。つまり、s_mea(標本の平均値)は,d_mea(母集団の平均値)である
disp(str);
h = 0.00, p = 0.372482, ci = [0.276294,0.584258]
disp(stats);
tstat: -0.9134
df: 19
sd: 0.3290

母平均の検定( Z検定 ):母集団の平均値と分散が既知

%MATLABの場合
echo on
N = 10000;
data = rand(N,1); % 母集団の一様分布の擬似乱数
d_mea = mean(data); % 母集団の平均値
disp(d_mea);
0.4950

d_std = std(data,1); % 母集団の偏標準偏差
disp(d_std);
0.2877

SN = 20;
sdata = rand(SN,1); % 標本の一様分布の擬似乱数
s_mea = mean(sdata); % 標本の平均値
%帰無仮説: s_mea(標本の平均値)は,d_mea(母集団の平均値)である
%対立仮説: s_mea(標本の平均値)は,d_mea(母集団の平均値)ではない
disp(s_mea);
0.4455

s_std = std(sdata); % 標本の不偏標準偏差
disp(s_std);
0.2397

%両側5%有意水準でztestを実行する
[h,p,ci,zval] = ztest(sdata,d_mea,d_std); %1標本Z-検定
str = sprintf('h = %1.2f, p = %f, ci = [%f,%f], zval = %f',h,p,ci(1),ci(2),zval);
%h = 0 -> 帰無仮説は、棄却しない。つまり、s_mea(標本の平均値)は,d_mea(母集団の平均値)である
disp(str);
h = 0.00, p = 0.442067, ci = [0.319444,0.571654], zval = -0.768707

データの不偏分散,不偏標準偏差

> #統計R解析の場合
> data <- runif(10000) #一様乱数を発生させる関数( 0.0 - 1.0 ) > d_var <- var(data) # 不偏分散 > d_var
[1] 0.08373053
> d_sd <- sd(data) # 不偏標準偏差 > d_sd
[1] 0.2893623
>

%MATLABの場合
echo on
N = 10000;
data = rand(N,1); % 一様分布の擬似乱数
d_var = var(data); % 不偏分散
disp(d_var);
0.0842
d_std = std(data); % 不偏標準偏差
disp(d_std);
0.2901

2007年4月8日日曜日

データの代表値

> #Rの場合
> data <- runif(10000) #一様乱数を発生させる関数( 0.0 - 1.0 ) > le <- length(data) # > le[1] 10000> mea <- mean(data) #平均値( mean ) > mea[1] 0.4992161
> med <- median(data) #中央値( median ) > med[1] 0.4970672
> ran <- range(data) #範囲( range ) > ran[1] 0.0001207402 0.9997703242

%MATLABの場合
echo on
data = rand(1000,1); %一様分布の擬似乱数
len = length(data); %ベクトルの長さ
disp(len);
1000
mea = mean(data); %配列の平均値
disp(mea);
0.4925
med = median(data); %配列の中央値
disp(med);
0.4915