Next: 配列関数
Up: 行列と配列と指数
Previous: 行列とスカラの演算
行列関数の一覧を以下に示す。
固有値の計算はEISPACKのアルゴリズムを使っている
[16],[15],[4]。
きざみを自動調節しながら4次のルンゲ−クッタの公式にしたがって
指定された誤差内で常微分方程式の解を求める
関数OdeAuto()は,文献[14]のアルゴリズムを参照している。
また,
RKF45の公式にしたがって,指定されたきざみ幅で,常微分方程式の解を求める
関数Ode45()は,文献[3]のアルゴリズムを参照している。
LU分解,QR分解,QZ分解は,文献[5]を参考にした。
Matrix M1;
Real tol;
Integer rank(M1); ランク
Integer rank(M1, tol); ランク
tol: 許容誤差
Integer Rows(M1); 行の数
Integer Cols(M1); 列の数
Integer length(M1); 行と列の大きい方の数
Integer isreal(M1); 実行列の有無 (真 = 1, 偽 = 0)
Integer iscomplex(M1); 複素行列の有無 (真 = 1, 偽 = 0)
Integer isscalar(M1); スカラーの有無 (真 = 1, 偽 = 0)
Array finite(M1); 各成分に対して有限の有無を調べる
無限大あるいはNaNである成分の所が0,
それ以外の成分の所が1である
配列を返す
Array isnan(M1); 各成分に対してNaNの有無を調べる
NaNである成分の所が1,
それ以外の成分の所が0である
配列を返す
Matrix sgn(M1); 各成分のsgn()を結果からなる行列
Marix M1, V1; V1 はベクトル
Integer p;
Real max(M1); 最大成分
Real min(M1); 最小成分
List maximum(M1); 行列の最大成分とその位置
{r1, i, j} = maximum(M1);
r1 == M1(i,j)
List maximum(V1); ベクトルの最大成分とその位置
{r1, i} = maximum(V1);
r1 == V1(i)
List minimum(M1); 行列の最小成分とその位置
{r1, i, j} = minimum(M1);
r1 == M1(i,j)
List minimum(V1); ベクトルの最小値とその位置
{r1, i} = minimum(V1);
r1 == V1(i)
Real maxsing(M1); 最大特異値
Real minsing(M1); 最小特異値
Real det(M1); 実行列の行列式
Real trace(M1); 実行列のトレース
Real frobnorm(M1); (実/複素)行列のフロベニウスノルム
(ユークリッドノルム)
Real infnorm(M1); (実/複素)行列の最大ノルム
Real norm(M1, p);
(実/複素)行列のノルム
M1が行列の時,
p = 1: 1-ノルム
p = 2: 最大特異値
M1がベクトルの時,p-ノルム
Real norm(M1); norm(M1, 2)
Complex max(Matrix M1); 絶対値が最大の成分
Complex min(Matrix M1); 絶対値が最小の成分
List maximum(Matrix M1); 絶対値が最大の成分とその位置
{c1, i, j} = maximum(M1);
c1 == M1(i,j)
List minimum(Matrix M1); 絶対値が最小の成分とその位置
{c1, i, j} = mininum(M1);
c1 == M1(i,j)
Complex det(CMatrix M1); 複素行列の行列式
Complex trace(CMatrix M1); 複素行列のトレース
Polynomial det(PMatrix M1); 多項式行列の行列式
Polynomial trace(PMatrix M1); 多項式行列のトレース
Polynomial frobnorm(Matrix M1); 多項式行列のフロベニウスノルム
Rational det(RMatrix M1); 有理多項式行列の行列式
Rational trace(RMatrix M1); 有理多項式行列のトレース
Rational frobnorm(Matrix M1); 有理多項式行列のフロベニウスノルム
Real sum(Matrix M1); 全ての成分の和
Complex sum(CoMatrix M1); 全ての成分の和
Polynomail sum(PoMatrix M1); 全ての成分の和
Rational sum(RaMatrix M1); 全ての成分の和
Real prod(Matrix M1); 全ての成分の積
Complex prod(CoMatrix M1); 全ての成分の積
Polynomial prod(PoMatrix M1); 全ての成分の積
Rational prod(RaMatrix M1); 全ての成分の積
Real mean(Matrix M1); 全ての成分の平均値
Complex mean(CoMatrix M1); 全ての成分の平均値
Polynomial mean(PoMatrix M1); 全ての成分の平均値
Ratioanal mean(RaMatrix M1); 全ての成分の平均値
Real std(Matrix M1); 全ての成分の標準偏差
Complex std(CoMatrix M1); 全ての成分の標準偏差
Polynomial std(PoMatrix M1); 全ての成分の標準偏差
Rational std(RaMatrix M1); 全ての成分の標準偏差
Matrix cumsum(Matrix M1); 全ての成分の累積和
Matrix cumprod(Matrix M1); 全ての成分の累積積
Matrix M1;
Matrix sum_col(M1); (縦・横)ベクトルの成分の和
列毎の和からなる横ベクトル
Matrix sum_row(M1); (縦・横)ベクトルの成分の和
行毎の和からなる縦ベクトル
Matrix prod_col(M1); (縦・横)ベクトルの成分の積
列毎の積からなる横ベクトル
Matrix prod_row(M1); (縦・横)ベクトルの成分の積
行毎の積からなる縦ベクトル
Matrix mean_col(M1); (縦・横)ベクトルの成分の平均値
列毎の平均値からなる横ベクトル
Matrix mean_row(M1); (縦・横)ベクトルの成分の平均値
行毎の平均値からなる縦ベクトル
Matrix std_col(M1); (縦・横)ベクトルの成分の標準偏差
列毎の標準偏差からなる横ベクトル
Matrix std_row(M1); (縦・横)ベクトルの成分の標準偏差
行毎の標準偏差からなる縦ベクトル
Matrix cumsum_col(M1); 列毎の累積和
Matrix cumsum_row(M1); 行毎の累積和
Matrix cumprod_col(M1); 列毎の累積積
Matrix cumprod_row(M1); 行毎の累積積
Matrix M1, M2;
Matrix eigval(M1); 固有値
Matrix eigval(M1, M2); 一般固有値
Matrix eigvec(M1); 固有ベクトル
Matrix eigvec(M1, M2); 一般固有ベクトル
eigval()は固有値を実部の降順に返し,eigvec()は
その固有値に対応する順で固有ベクトルを返す。
Matrix M1;
Matrix singval(M1); 特異値
Matrix singleftvec(M1); 左の特異ベクトル
Matrix singrightvec(M1); 右の特異ベクトル
singval()は特異値を降順に返し,singleftvec()と
singrightvec()はその特異値に対応する順で特異ベクトルを
返す。
Matrix M1;
Real tol;
Matrix vectorprod(M1); ベクトル積, 外積
Matrix exp(M1); 指数行列
Matrix sqrt(M1); 平方根行列
Matrix log(M1); 対数行列
Matrix kernel(M1); 零空間(カーネル)
Matrix pseudoinv(M1); 擬似逆行列
Matrix pseudoinv(M1, tol); 擬似逆行列
tol: 許容誤差
Matrix abs(M1); 各成分のabs()
Matrix M1;
Real tol;
Integer i1;
Matrix conj(M1); 共役行列
Matrix trans(M1); 転置行列 M1'
Matrix conjtrans(M1); 共役転置行列 M1#
Matrix inv(M1); 逆行列 M1‾
Matrix pow(M1, i1); 累乗 M1^i1
Matrix ceil(M1); 各成分のceil()の結果
Matrix floor(M1); 各成分のfloor()の結果
Matrix fix(M1); 各成分のfix()の結果
Matrix round(M1); 各成分のround()の結果
Matrix round2z(M1); 各成分のround2z()の結果
Matrix round2z(M1, tol); 各成分のround2z()の結果
Matrix M1, M2;
Integer k, m, n;
Index idx;
Matrix vec2diag(M1); 縦ベクトルから対角行列
Matrix vec2diag(M1, k);
縦ベクトルから対角行列
(k だけ主対角より上)
Matrix diag2vec(M1); 対角行列から縦ベクトル
Matrix diag2vec(M1, k);
対角行列から縦ベクトル
(k だけ主対角より上)
Matrix fliplr(M1); 列を逆順に並べる
Matrix flipud(M1); 行を逆順に並べる
Matrix shiftLeft(M1, k);
全ての列を左に k シフトし,
右から 0 を代入する
k 省略すると,シフト数は 1 となる
Matrix shiftRight(M1, k);
全ての列を右に k シフトし,
左から 0 を代入する
k 省略すると,シフト数は 1 となる
Matrix shiftUp(M1, k);
全ての列を上に k シフトし,
下から 0 を代入する
k 省略すると,シフト数は 1 となる
Matrix shiftDown(M1, k);
全ての列を下に k シフトし,
上から 0 を代入する
k 省略すると,シフト数は 1 となる
Matrix rotateLeft(M1, k);
全ての列を左に k 回転する
k 省略すると,シフト数は 1 となる
Matrix rotateRight(M1, k);
全ての列を右に k 回転する
k 省略すると,シフト数は 1 となる
Matrix rotateUp(M1, k);
全ての列を上に k 回転する
k 省略すると,シフト数は 1 となる
Matrix rotateDown(M1, k);
全ての列を下に k 回転する
k 省略すると,シフト数は 1 となる
Matrix reshape(M1, m, n);
行列 M1 から行方向に成分を取り出
して m x n の行列を作る。
List sort(M1); 成分を昇べきの順にソートする
複素行列の場合,絶対値でソート
{M2, idx} = sort(M1); M2: ソートした結果の行列
idx: ソートに使った指数
M2 = M1(idx)
List sort(Array A1); 成分を昇べきの順にソートする
複素行列の場合,絶対値でソート
{A2, idx} = sort(A1); A2: ソートした結果の配列
idx: ソートに使った指数
A2 = A1(idx)
Matrix max(M1, M2); M1 と M2 の大きい方の成分
からなる行列 (複素行列の場合,
絶対値によって比較する
Matrix min(M1, M2); M1 と M2 の小さい方の成分
からなる行列 (複素行列の場合,
絶対値によって比較する
Matrix rem(M1, i1); M1の各成分に対してrem()を
計算する
Matrix rem(M1, r1); M1の各成分に対してrem()を
計算する
Matrix rem(M1, M2); M1とM2の成分毎にrem()を
計算する
Matrix M1;
Integer m, n;
Matrix rand(M1); M1 と同じ大きさの一様乱数行列
Integer rand("seed"): 一様乱数の種
Integer rand("seed", m): 一様乱数の種を設定
Matrix randn(M1); M1 と同じ大きさの正規乱数行列
Matrix rngkut4(Real t, Matrix x, void dx())
: dt = 1.0E-7, u = Z(0);
Matrix rngkut4(Real t, Matrix x, void dx(), Matrix u)
: dt = 1.0E-7
Matrix rngkut4(Real t, Matrix x, void dx(), Matrix u,
Real dt)
4次のルンゲ−クッタの公式にしたがって常微分方程式の解を求める。
List Ode(Real t0, Real t1, Matrix x, void dx());
: h=4.0E-2, dtsav=1.0E-3
List Ode(Real t0, Real t1, Matrix x, void dx(),
void input()); : h=4.0E-2, dtsav=1.0E-3
List Ode(Real t0, Real t1, Matrix x, void dx(),
void input(), Real h); : dtsav=1.0E-3
List Ode(Real t0, Real t1, Matrix x, void dx(),
void input(), Real h, Real dtsav);
4次のルンゲ−クッタの公式にしたがって,指定されたきざみ幅hで,
常微分方程式の[t0,t1]時刻の解を求める。
{T, X, U} = Ode();
T: 時間の系列
X: 状態ベクトルの時系列
U: 入出力ベクトルの時系列
List OdeAuto(Real t0, Real t1, Matrix x, void dx());
: eps=1.0E-6, dtsav=1.0E-3,
dtmin=EPS, dtmax=abs(t1-t0)/5
List OdeAuto(Real t0, Real t1, Matrix x, void dx(),
void input());
: eps=1.0E-6, dtsav=1.0E-3
dtmin=EPS, dtmax=abs(t1-t0)/5
List OdeAuto(Real t0, Real t1, Matrix x, void dx(),
void input(), Real eps);
: dtsav=1.0E-3, dtmin=EPS, dtmax=abs(t1-t1)/5
List OdeAuto(Real t0, Real t1, Matrix x, void dx(),
void input(), Real eps, Real dtsav);
: dtmin=EPS, dtmax=abs(t1-t0)/5
List OdeAuto(Real t0, Real t1, Matrix x, void dx(),
void input(), Real eps, Real dtsav, Real dtmin);
: dtmin=EPS
List OdeAuto(Real t0, Real t1, Matrix x, void dx(),
void input(), Real eps,
Real dtsav, Real dtmin, Real dtmax);
きざみを自動調節しながら4次のルンゲ−クッタの公式にしたがって
指定された誤差内で常微分方程式の[t0,t1]時刻の解を求める。
ただし,きざみの最小値と最大値はdtminとdtmaxであり,
dtmax < dtsav のとき,dtmax = dtsavに設定される。
{T, X, U} = OdeAuto();
T: 時間の系列
X: 状態ベクトルの時系列
U: 入出力ベクトルの時系列
List OdeHybrid(Real t0, Real t1, Real dt, Matrix x,
void dx()) : h=4.0E-2, dtsav=1.0E-3
List OdeHybrid(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input()) : h=4.0E-2, dtsav=1.0E-3
List OdeHybrid(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real h) : dtsav=1.0E-3
List OdeHybrid(Real t0, Real t1, Real dt, Matrix x, void dx(),
void input(), Real h, Real dtsav)
4次のルンゲ−クッタの公式にしたがって,指定されたきざみ幅hで,
常微分方程式の[t0,t1]時刻の解を求める。ただし,
サンプリング間で外部入力は一定値をとる。
また,きざみ幅hが省略されて,dt < 4.0E-2のとき,
h = dtである.
{T, X, U} = OdeHybrid();
T: 時間の系列
X: 状態ベクトルの時系列
U: 入出力ベクトルの時系列
List OdeHybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx())
: eps=1.0E-6, dtsav=1.0E-3,
dtmin=EPS, dtmax=abs(t1-t0)/5
List OdeHybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input())
: eps=1.0E-6, dtsav=1.0E-3,
dtmin=EPS, dtmax=abs(t1-t0)/5
List OdeHybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real eps)
: dtsav=1.0E-3, dtmin=EPS, dtmax=abs(t1-t0)/5
List OdeHybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real eps, Real dtsav)
: dtmin=EPS, dtmax=abs(t1-t0)/5
List OdeHybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real eps,
Real dtsav, Real dtmin)
: dtmax=abs(t1-t0)/5
List OdeHybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real eps,
Real dtsav, Real dtmin, Real dtmax)
きざみを自動調節しながら4次のルンゲ−クッタの公式にしたがって
指定された誤差内で常微分方程式の[t0,t1]時刻の解を求める。
サンプリング間で外部入力は一定値をとる。
ただし,きざみの最小値と最大値はdtminとdtmaxであり,
dtmax < dtsav のとき,dtmax = dtsavに設定される。
{T, X, U} = OdeHybridAuto();
T: 時間の系列
X: 状態ベクトルの時系列
U: 入出力ベクトルの時系列
Matrix rkf45(Real t, Matrix x, void dx())
: dt = 1.0E-7, u = Z(0);
Matrix rkf45(Real t, Matrix x, void dx(), Matrix u)
: dt = 1.0E-7
Matrix rkf45(Real t, Matrix x, void dx(), Matrix u,
Real dt)
RKF45の公式にしたがって常微分方程式の解を求める。
List Ode45(Real t0, Real t1, Matrix x, void dx());
: h=4.0E-2, dtsav=1.0E-3
List Ode45(Real t0, Real t1, Matrix x, void dx(),
void input()); : h=4.0E-2, dtsav=1.0E-3
List Ode45(Real t0, Real t1, Matrix x, void dx(),
void input(), Real h); : dtsav=1.0E-3
List Ode45(Real t0, Real t1, Matrix x, void dx(),
void input(), Real h, Real dtsav);
RKF45の公式にしたがって,指定されたきざみ幅hで,
常微分方程式の[t0,t1]時刻の解を求める。
{T, X, U} = Ode45();
T: 時間の系列
X: 状態ベクトルの時系列
U: 入出力ベクトルの時系列
List Ode45Auto(Real t0, Real t1, Matrix x, void dx());
: eps=1.0E-6, dtsav=1.0E-3,
dtmin=EPS, dtmax=abs(t1-t0)/5
List Ode45Auto(Real t0, Real t1, Matrix x, void dx(),
void input());
: eps=1.0E-6, dtsav=1.0E-3,
dtmin=EPS, dtmax=abs(t1-t0)/5
List Ode45Auto(Real t0, Real t1, Matrix x, void dx(),
void input(), Real eps);
: dtsav=1.0E-3, dtmin=EPS, dtmax=abs(t1-t0)/5
List Ode45Auto(Real t0, Real t1, Matrix x, void dx(),
void input(), Real eps, Real dtsav);
: dtmin=EPS, dtmax=abs(t1-t0)/5
List Ode45Auto(Real t0, Real t1, Matrix x, void dx(),
void input(), Real eps,
Real dtsav, Real dtmin);
: dtmax=abs(t1-t0)/5
List Ode45Auto(Real t0, Real t1, Matrix x, void dx(),
void input(), Real eps,
Real dtsav, Real dtmin, Real dtmax);
きざみを自動調節しながらRKF45の公式にしたがって
指定された誤差内で常微分方程式の[t0,t1]時刻の解を求める。
ただし,きざみの最小値と最大値はdtminとdtmaxであり,
dtmax < dtsav のとき,dtmax = dtsavに設定される。
{T, X, U} = Ode45Auto();
T: 時間の系列
X: 状態ベクトルの時系列
U: 入出力ベクトルの時系列
List Ode45Hybrid(Real t0, Real t1, Real dt, Matrix x,
void dx()) : h=4.0E-2, dtsav=1.0E-3
List Ode45Hybrid(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input()) : h=4.0E-2, dtsav=1.0E-3
List Ode45Hybrid(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real h) : dtsav=1.0E-3
List Ode45Hybrid(Real t0, Real t1, Real dt, Matrix x, void dx(),
void input(), Real h, Real dtsav)
RKF45の公式にしたがって,指定されたきざみ幅hで,
常微分方程式の[t0,t1]時刻の解を求める。ただし,
サンプリング間で外部入力は一定値をとる。
また,きざみ幅hが省略されて,dt < 4.0E-2のとき,
h = dtである.
{T, X, U} = Ode45Hybrid();
T: 時間の系列
X: 状態ベクトルの時系列
U: 入出力ベクトルの時系列
List Ode45HybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx())
: eps=1.0E-6, dtsav=1.0E-3,
dtmin=EPS, dtmax=abs(t1-t0)/5
List Ode45HybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input())
: eps=1.0E-6, dtsav=1.0E-3
dtmin=EPS, dtmax=abs(t1-t0)/5
List Ode45HybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real eps)
: dtsav=1.0E-3, dtmin=EPS, dtmax=abs(t1-t0)/5
List Ode45HybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real eps,
Real dtsav)
: dtmin=EPS, dtmax=abs(t1-t0)/5
List Ode45HybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real eps,
Real dtsav, Real dtmin)
: dtmax=abs(t1-t0)/5
List Ode45HybridAuto(Real t0, Real t1, Real dt, Matrix x,
void dx(), void input(), Real eps,
Real dtsav, Real dtmin, Real dtmax)
きざみを自動調節しながらRKF45の公式にしたがって
指定された誤差内で常微分方程式の[t0,t1]時刻の解を求める。
サンプリング間で外部入力は一定値をとる。
ただし,きざみの最小値と最大値はdtminとdtmaxであり,
dtmax < dtsav のとき,dtmax = dtsavに設定される。
{T, X, U} = Ode45HybridAuto();
T: 時間の系列
X: 状態ベクトルの時系列
U: 入出力ベクトルの時系列
void OdeStop(); Ode(), OdeAuto(), OdeHybrid(),
OdeHybridAuto(), Ode45(), Ode45Auto(),
Ode45Hybrid(), Ode45HybridAuto()の実行を
強制的にストップする.
List OdeXY(Real t); Ode(), OdeAuto(), OdeHybrid(),
OdeHybridAuto(), Ode45(), Ode45Auto(),
Ode45Hybrid(), Ode45HybridAuto()の
実行中に時刻 t の状態と入出力を返す。
{X_d, Y_d} = OdeXY(t)
遅れのあるシステムのシミュレーション
に用いる。
Matrix M1, M2;
Integer row, col;
List size(M1); 行数と列数のリスト
{row, col} = size(M1);
List eig(M1); 固有値問題
{val, vec} = eig(M1);
M1 * vec = vec * val;
val: 固有値(対角行列)
vec: 固有ベクトル
List eig(M1, M2); 一般固有値問題
{val, vec} = eig(M1, M2);
M1 * vec = M2 * vec * val;
val: 一般固有値(対角行列)
vec: 一般固有ベクトル
Matrix M1;
List svd(M1); 特異値分解
{U, D, V} = svd(A);
U * D * V# = A;
U: 左特異ベクトル
V: 右特異ベクトル
D: 特異値(Aと同じ大きさの行列)
List lu(M1); LU分解
{L, U, P} = lu(A);
L * U = P * A;
L: 下三角行列
U: 上三角行列
P: 置換行列
List hess(M1); Hessenberg分解
{Q, H} = hess(A);
Q# * A * Q = H;
Q: 直交行列orユニタリ行列
H: ヘッセンベルグ行列
List schur(M1); Schur分解
{U, T} = schur(A);
U# * A * U = T;
U: 直交行列orユニタリ行列
T: 擬似上三角行列or上三角行列,
Matrix M1, M2;
List qr(M1); QR分解
{Q, R} = qr(A);
Q * R = A;
Q: 直交行列orユニタリ行列
R: 上三角行列
List qr_p(M1); QR分解(置換付)
{Q, R, P} = qr_p(A);
Q * R = A * P;
Q: 直交行列orユニタリ行列
R: 上三角行列
P: 置換行列
List qz(M1, M2);
QZ分解
{AA, BB, Q, Z, VEC} = qz(M1, M2)
Q# * M1 * Z = AA;
Q# * M2 * Z = BB;
val = diag2vec(AA) ./ diag2vec(BB);
M1 * VEC = M2 * VEC * vec2diag(val);
AA: 上三角行列
BB: 上三角行列
Q: 直交行列orユニタリ行列
Z: 直交行列orユニタリ行列
VEC: 一般固有ベクトル
val: 一般固有値
Next: 配列関数
Up: 行列と配列と指数
Previous: 行列とスカラの演算
Masanobu KOGA
平成10年8月19日