Main Content

rank

シンボリック行列のランクを求める

構文

説明

rank(A) は、シンボリック行列 A のランクを返します。

行列のランクを求める

syms a b c d
A = [a b; c d];
rank(A)
ans =
     2

シンボリック行列のランクは正確

シンボリック計算は厳密な行列のランクを返しますが、数値計算は丸め誤差の影響を受けることがあります。この厳密な計算は、ヒルベルト行列のような悪条件である行列に有用です。次数 n のヒルベルト行列のランクは n です。

次数 15 のヒルベルト行列のランクを数値計算で求めます。次に sym を使用して、数値行列をシンボリック行列に変換して、ランクをシンボリック計算で求めます。

H = hilb(15);
rank(H)
rank(sym(H))
ans =
    12
ans =
    15

シンボリック計算は正しいランクである 15 を返します。数値計算は、丸め誤差が原因で、間違ったランクの 12 を返します。

関数 rank はシンボリック計算を単純化しない

次の行列を考えます。

A=[1sin2(x)cos2(x)11].

1-sin(x)^2 から cos(x)^2 への単純化の後、行列はランク 1 になります。しかし、rank では、行列要素で発生する特殊関数によって満たされる恒等を考慮しないため、間違ったランク 2 を返します。その間違った結果は以下になります。

syms x
A = [1-sin(x) cos(x); cos(x) 1+sin(x)];
rank(A)
ans =
     2

中間ステップの出力は単純化されないため、rank は間違った結果を返します。フェイルセーフの回避策はありませんが、数値を代入し、vpa を使用して代入を評価することで、シンボリック式を単純化できます。

x に数値を代入し、vpa を使用して結果を評価することで、正しいランクを求めます。

rank(vpa(subs(A,x,1)))
ans =
     1

ただし、数値の代入後も、rank は丸め誤差が原因で間違った結果を返す場合があります。

入力引数

すべて折りたたむ

数値、ベクトル、行列またはシンボリック数、シンボリック ベクトルまたはシンボリック行列で指定される入力。

バージョン履歴

R2006a より前に導入

参考

| |