/* -*- MaTX -*- * * 【名前】 * cov() - 分散 * * 【形式】 * C = cov(X) * Matrix C; * Matrix X; * * C = cov(X,Y) * Matrix C; * Matrix X,Y; * * 【機能説明】 * cov(X)は X の全ての成分の分散を返す。 * cov(X,Y) は行列 [X Y] の分散を返す。 * * 【例題】 * cov([1 2 3 4 5]) = 2.5 * cov([1 2 3 4 5], [6 7 8 9 10]) = 9.16667 * * 【関連項目】 * sum(), median(), mean(), cov_row(), cov_col() * * ----------------------------------------------------------------------- * * 【名前】 * cov_col() - 共分散行列(列毎のデータ) * * 【形式】 * C = cov_col(X) * Matrix C; * Matrix X; * * C = cov_col(X,Y) * Matrix C; * Matrix X,Y; * * 【機能説明】 * X がベクトルのとき,cov_col(X)は X の全ての成分の分散を返す。 * X が行列のとき,cov_col(X) は,X の列毎にデータが保存されて * いると見なし,共分散行列を求める。 * * cov_col(X,Y) は,X と Y が同じ長さのベクトルなら, * cov_col([makecolv(X) makecolv(Y)])と等価である。 * * 【例題】 * cov_col([1 2 3 4 5]) = [2.5] * C = cov_col([2 3 1 4 5], [10 9 7 8 6]) * === [C] : ( 2, 2) === * ( 1) ( 2) * ( 1) 2.50000000E+00 -1.00000000E+00 * ( 2) -1.00000000E+00 2.50000000E+00 * * 【関連項目】 * sum, median, mean, cov, and cov_row * * ------------------------------------------------------------------------ * * 【名前】 * cov_row() - 共分散行列(行毎のデータ) * * 【形式】 * C = cov_row(X) * Matrix C; * Matrix X; * * C = cov_row(X,Y) * Matrix C; * Matrix X,Y; * * 【機能説明】 * X がベクトルのとき,cov_row(X)は X の全ての成分の分散を返す。 * X が行列のとき,cov_row(X) は,X の行毎にデータが保存されて * いると見なし,共分散行列を求める。 * * cov_row(X,Y) は,X と Y が同じ長さのベクトルなら, * cov_row([[makerowv(X)][makerowv(Y)]])と等価である。 * * 【例題】 * cov_row([1 2 3 4 5]) = [2.5] * C = cov_row([2 3 1 4 5], [10 9 7 8 6]) * === [C] : ( 2, 2) === * ( 1) ( 2) * ( 1) 2.50000000E+00 -1.00000000E+00 * ( 2) -1.00000000E+00 2.50000000E+00 * * 【関連項目】 * sum, median, mean, cov, and cov_col */ Func Real cov(x, y, ...) Matrix x, y; { Matrix z; error(nargchk(1, 2, nargs, "cov")); if (nargs == 1) { return [cov_col(reshape(x, 1, Rows(x)*Cols(x)))](1,1); } else { z = [makecolv(x), makecolv(y)]; return [cov_col(reshape(z, 1, Rows(z)*Cols(z)))](1,1); } } Func Matrix cov_col(x_, y_, ...) Matrix x_, y_; { Integer m, n; Matrix X, cv; error(nargchk(1, 2, nargs, "cov_col")); {m,n} = size(x_); if (nargs > 1) { if (m != Rows(y_) || n != Cols(y_)) { error("cov_col(): X と Y は同じ大きさでなければならい。\n"); } if (m != 1 && n != 1) { error("cov_col(): X と Y はベクトルでなければならい。\n"); } X = [makecolv(x_), makecolv(y_)]; } else if (min(Cols(x_), Rows(x_)) == 1) { X = makecolv(x_); } else { X = x_; } m = Rows(X); X = X - ONE(m,1) * (sum_col(X)/m); if (m == 1) { cv = Z(1); } else { cv = X#*X / (m-1); } return cv; } Func Matrix cov_row(x, y, ...) Matrix x, y; { error(nargchk(1, 2, nargs, "cov_row")); if (nargs == 1) { return trans(cov_col(trans(x))); } else { return trans(cov_col(x, y)); } }