/* -*- MaTX -*- * * 【名前】 * diff() - 差分 * * 【形式】 * Y = diff(X) * Matrix C; * Matrix X; * * Y = diff(X,k) * Matrix Y; * Matrix X; * Integer k; * * 【機能説明】 * ベクトル X にてついて,diff(X)は,隣接成分との差分を成分とする * ベクトル * * Y = X(2:length(X)) - X(1:length(x)-1) * * を求める。ベクトル Y の長さはベクトル X の長さより 1 成分だけ * 少なくなる。diff(X,k) は,k 階差分を求める。 * * diff(X,k) = diff(diff(X,n-1)) * * 【例題】 * Y = diff([1 2 3 4 5]) * === [Y] : ( 1, 4) === * ( 1) ( 2) ( 3) ( 4) * ( 1) 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 * * 【関連項目】 * diff_row(), diff_col() * * ------------------------------------------------------------------------ * * 【名前】 * diff_col() - 列毎の差分 * * 【形式】 * Y = diff_col(X) * Matrix C; * Matrix X; * * Y = diff_col(X,k) * Matrix Y; * Matrix X; * Integer k; * * 【機能説明】 * X がベクトルのとき,diff_col(X)は,隣接成分との差分を成分とする * ベクトル * * Y = X(2:length(X)) - X(1:length(x)-1) * * を求める。ベクトル Y の長さはベクトル X の長さより 1 成分だけ * 少なくなる。diff_col(X,k) は,k 階差分を求める。 * * diff_col(X,k) = diff_col(diff_col(X,n-1)) * * X が行列のとき,Y = diff_col(X) は,X の列毎に差分を求める。 * 行列 Y の行の数は,行列 X の行の数より 1 だけ少ない。 * * 【例題】 * C = diff_col([1 2 3 4 5]) * === [C] : ( 1, 4) === * ( 1) ( 2) ( 3) ( 4) * ( 1) 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 * * C = diff_col([[2 3 1 4][10 9 7 8]]) * === [C] : ( 1, 4) === * ( 1) ( 2) ( 3) ( 4) * ( 1) 8.000000E+00 6.000000E+00 6.000000E+00 4.000000E+00 * * 【関連項目】 * diff(), diff_row() * * ------------------------------------------------------------------------ * * 【名前】 * diff_row() - 行毎の差分 * * 【形式】 * Y = diff_row(X) * Matrix C; * Matrix X; * * Y = diff_row(X,k) * Matrix Y; * Matrix X; * Integer k; * * 【機能説明】 * X がベクトルのとき,diff_row(X)は,隣接成分との差分を成分とする * ベクトル * * Y = X(2:length(X)) - X(1:length(x)-1) * * を求める。ベクトル Y の長さはベクトル X の長さより 1 成分だけ * 少なくなる。diff_row(X,k) は,k 階差分を求める。 * * diff_row(X,k) = diff_row(diff_row(X,n-1)) * * X が行列のとき,Y = diff_row(X) は,X の行毎に差分を求める。 * 行列 Y の列の数は,行列 X の列の数より 1 だけ少ない。 * * 【例題】 * C = diff_row([1 2 3 4 5]) * === [C] : ( 1, 4) === * ( 1) ( 2) ( 3) ( 4) * ( 1) 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 * * C = diff_row([[2 3 1 4 5][10 9 7 8 6]]) * === [C] : ( 2, 4) === * ( 1) ( 2) ( 3) ( 4) * ( 1) 1.000000E+00 -2.000000E+00 3.000000E+00 1.000000E+00 * ( 2) -1.000000E+00 -2.000000E+00 1.000000E+00 -2.000000E+00 * * 【関連項目】 * diff(), diff_col() */ Func Matrix diff(x, k, ...) Matrix x; Integer k; { Matrix y; error(nargchk(1, 2, nargs, "diff")); if (nargs == 1) { if (Rows(x) == 1 || Cols(x) == 1) { return diff_col(x); } else { error("diff(): ベクトルでない。\n"); } } else { if (Rows(x) == 1 || Cols(x) == 1) { return diff_col(x, k); } else { error("diff(): ベクトルでない。\n"); } } } Func Matrix diff_col(x_, k, ...) Matrix x_; Integer k; { Matrix x; Integer i,m,n; error(nargchk(1, 2, nargs, "diff_col")); x = x_; if (nargs == 1) { k = 1; } for (i = 1; i <= k; i++) { {m,n} = size(x); if (m == 1) { x = x(2:n) - x(1:n-1); } else { x = x(2:m,:) - x(1:m-1,:); } } return x; } Func Matrix diff_row(x, k, ...) Matrix x; Integer k; { error(nargchk(1, 2, nargs, "diff_row")); if (nargs == 1) { return trans(diff_col(trans(x))); } else { return trans(diff_col(trans(x), k)); } }