• ベストアンサー

行列のRANKの求め方

行列のRANKを求めるときに特異値分解を用いて求めることができるとありました.仮に行列Aを特異値分解して A=UΣV とした場合、ここからRANKの数はどのように求めるのでしょうか. またC言語でプログラミングする場合はどのようにしたらよいでしょうか. 特異値分解はCLAPACKを用いて行おうと思います. ご教授の程、よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

もし,特異値分解できたなら,Σは対角成分のみに0でない値をもつ行列で,その0でない成分の数がランクです. ランクを求めるのに特異値分解するのは精度的には最も望ましいですが,計算量はかなり多いです. 普通は,QR分解ですますことが多いと思います.

chikutaku555
質問者

お礼

御回答ありがとうございました。対角成分にゼロがあるかどうかを判定すればよいのですね。またQR分解に関しても教えて頂き、ありがとうございました。

関連するQ&A

  • 特異値分解の求め方を教えてください。

    4×5行列Aの特異値分解を求めています。 手順の中で まずAを上2重対角行列に変形することができました。 そのときにAの中に 2×2行列 B=(2√5 4√5  0   8√5) となりました。 このBを特異値分解して B=VDU(U、Vは直交行列、Dは対角行列)としたいのですが、できません。LR法を用いているのですがうまくできません。教えてください。

  • 特異値分解 A=UΣV* なら AV=UΣですか?

    特異値分解について、 A=UΣV* の時、AV=UΣ と言えますか? 確かVやUはAA*を対角化する行列で、その列ベクトルは互いに直行かつ正規だと聞いたので A=UΣV* の両辺にVを右から掛けたらAV=UΣ になるんじゃないかとと思ったのです。

  • 行列の分割に関する問題の解答をお願いします。

    n次正方行列Aとn次列ベクトルvに対して、(n+1)次正方行列T(A,v)を T(A,v)=|A v|      |O 1| とおいて定めるとき、次の問いに答えよ。 (1)n次正方行列A,Bとn次列ベクトルu,vに対して、 T(A,u)T(B,v)=T(C,w) となるC,wをA,B,u,vを用いて表せ。 (2)Aが正則行列であるとき、T(A,v)も正則行列であることを示し、その逆行列T(A,v)^-1を分割した行列の形で求めよ。 よろしくお願いします。

  • 行列の特異点??

    長文失礼します。 あまり、うまく説明できないんですが3×3のある行列Aがあるとします。 成分は |0 0 -1| |0 1 0| |1 0 0| です。 ある文献にこの行列には『特異点』が存在するとあったので、どういうことか考えてみて、逆行列がないことが特異点が存在するということだと思い計算してみましたが行列式は1となり、逆行列は存在するということが分かりました。 行列の考えにおいて特異点とはなんなのでしょうか??そもそも特異点というのはなんでしょうか??? ご教授いただけると嬉しいです。

  • 【C言語】行列のランク(階数)の求め方

    閲覧して頂きありがとうございます。 C言語で行列のランク(階数)を求めたいのですが、標準関数には用意されていないみたいなので 自分で関数を作成したいのですが、どう作ればいいのかも困っている状態です。 例えば、値が0と1で構成された4×4の行列の場合の ランクを求めるにはどういったアルゴリズムで作成するのでしょうか? ご回答者様の手間にならない範囲でヒントやソースコード、参考サイトなどあれば ご教示お願いできないでしょうか。 漠然とした質問で申し訳ございませんが、よろしくお願いします。

  • 行列の階数を求める問題

    (-2 3   a  1) (a-1  1 -3 2) (-1 a+3 a+1 4) 上記の行列のrankを求めよ。ただし、aは定数とする。 という問題です。 私はrankを求めたいときに使う方法としては、行列式detA=0のときの変数の値で場合分けする方法です。この問題は4*3行列で、行列式が使えません。 普通はじき出し法でやったら、やたらとややこしくなります。 この問題の解き方をご存知の方、ご教授お願いします!

  • いろんな行列の逆行列の考え方

    逆行列についてお尋ねします。 高校数学の範囲で穏当な行列の場合、逆行列は連立1次方程式の求解そのものであり、素直そのものですが、実際問題に当てはめるとそうはならない行列になると思います。その場合、その行列の性質を分類したりして個別の対応策が出てきます。一般化逆行列とか特異値分解とかですし、慣用表現としてフルランク、ランク落ちとかです。 フルランク、ランク落ちという用語はどの程度一般化しているのかわかりませんが、本に書いてあったりなかったりです。教科書による共通性がなくなる感じがしているので、 実際にどのように分類されるのでしょうか。説明の仕方がいろいろあって森の中で道にまぎれたような印象になります。同じことを別の用語で言っているのでしょうか。全体の地図のようなものがあるのでしょうか。地図が頭に入ると分類して引き出しにしまえるのですが、そういう感じがしないのですが。全般的な方向性の解説本とかサイトなどあったら教えて頂きたいのですが。 この辺の事情がすでに分かっている人は既にクリアなので私の質問の意味があまりわからないのではないかと思いますが、私は見通しが悪いなあと思っているのですが。決定論では収まらず統計処理まで出てくる場合があるのでますます見通しが悪くなってしまいます。目的依存なものだとしたら、解説が個別になっているくのも仕方がないのかもと思いますが。ぼんやりした包括的な質問になっていますがよろしくお願いします。

  • 対称行列とその対角化行列

    対称行列とその対角化行列 行列要素が複素数である行列Aが(A^T)=A(Tは転置)を満たすなら,Aは対称行列といいますか?(ネットで見る限りではA^T=Aなどという場合,行列要素は実数である場合が多いようなのですが.) 実対称行列は直交行列で対角化できて,正規行列はユニタリ行列で対角化できますが,行列要素が複素数でA^T=Aを満たすような行列はどのような行列で対角化可能なのでしょうか?普通にユニタリ行列でしょうか?それとも,要素が複素数で(U^T)U=I(単位行列)なる行列Uによってできるのでしょうか? 要素が複素数で(U^T)U=Iなる行列Uに名前はついているのでしょうか? よろしくおねがいします.

  • エルミート行列の行ベクトルによる分解

    4行4列のエルミート行列 H=(H)^t*  [ ()^t*は転置と複素共役をとる記号とします] は、複素数の2つの行ベクトル v=(a b c d) u=(e f g h)で  H=(v)^t* v + (u)^t* u ‥(1) と書けものでしょうか? (1)の右辺はエルミート行列ですし、Hのパラメータの数16個、 v、uのパラメータ16個(成分が複素数なので)と、パラメータの数は あっているので、書けるように思うのですが、確信がもてません。 参考文献でも構いません。教えていただけますでしょうか。 なお、私はあまり数学ができる方ではありません。 よろしくお願いします。

  • 8×8行列ジョルダン標準形の問題

    A= [0 -1 1 0 -1 1 -1 1] [1 -3 3 0 -4 0 -2 0] [-2 1 -3 0 1 -2 1 -2] [-1 4 -4 -1 7 0 4 0] [-3 1 -3 0 0 -3 1 -3] [-2 6 -5 0 9 -2 6 -1] [3 1 1 0 3 4 0 4] [3 -6 6 0 -9 2 -6 1] のジョルダンの標準形を求め ジョルダンの標準形に相似変換する行列をを求めよ 次の解答でいいですか? 書き方も含めて、間違いを指摘して下さい。 【解答】 固有多項式 det(A-λE)= =λ^8+8λ^7+28λ^6+56λ^5+70λ^4+56λ^3+28λ^2+8λ+1 =(λ+1)^8 (二項定理の係数になってたので因数分解できました) 固有値:λ=-1(8重根) 固有値-1に対して、B=A+Eと書く。 最初にrank(B)を求める。 B= [1 -1 1 0 -1 1 -1 1] [1 -2 3 0 -4 0 -2 0] [-2 1 -2 0 1 -2 1 -2] [-1 4 -4 0 7 0 4 0] [-3 1 -3 0 1 -3 1 -3] [-2 6 -5 0 9 -1 6 -1] [3 1 1 0 3 4 1 4] [3 -6 6 0 -9 2 -6 2] ⇩(ガウスの消去法) [1 0 0 0 1 0 0 0] [0 1 0 0 1 0 1 0] [0 0 1 0 -1 0 0 0] [0 0 0 0 0 1 0 1] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] よって、rank(B)=4 ジョルダン細胞数の数は固有空間の次元に等しいので、 dim(Ker(B))=8-rank(B)=4個 次にジョルダン細胞の次数を求める。 (m+1)次以上のジョルダン細胞の数は、 rank(A-λE)^m-rank(A-λE)^(m+1) で与えられるから、 rank(B)-rank(B^2)の値が2以上のジョルダン細胞の数を与えるから、B^2を計算。 B^2= [-1 0 -1 0 0 -1 0 -1] [-1 0 -1 0 0 -1 0 -1] [1 0 1 0 0 1 0 1] [2 0 2 0 0 2 0 2] [1 0 1 0 0 1 0 1] [4 0 4 0 0 4 0 4] [0 0 0 0 0 0 0 0] [-4 0 -4 0 0 -4 0 -4] ⇩ [1 0 1 0 0 1 0 1] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] よって、rank(B^2)=1 rank(B)-rank(B^2)=4-1=3 2次以上のジョルダン細胞数は3個。 8次の中にジョルダン細胞数が合計で4個、2次以上が3個なので、 ジョルダン細胞の直和は、1次+2次+2次+3次という形になる。 Aの相似形を「~」で書くと、ジョルダン標準形は、次数の低い方からの直和で(➕は、+の丸囲みです) A~J(-1,1)➕J(-1,2)➕J(-1,2)➕J(-1,3) J= -1 0 0 0 0 0 0 0 0 -1 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 1 0 0 0 0 0 0 0 -1 1 0 0 0 0 0 0 0 -1 次に固有ベクトルを求める。 求める固有ベクトルを p=[p1 p2 p3 p4 p5 p6 p7 p8]^t (^tは、転置行列)と書く。 p=(p1,p2,p3,p4,p5,p6,p7,p8) (列ベクトルの記述です) として、固有ベクトルを求める Bp=0 [1 0 0 0 1 0 0 0]p=0 [0 1 0 0 1 0 1 0]p=0 [0 0 1 0 -1 0 0 0]p=0 [0 0 0 0 0 1 0 1]p=0 p1+p5=0 p2+p5+p7=0 p3-p5=0 p6+p8=0 p4=任意 t,s,u,vを媒介変数として p=t(-1,0,1,0,1,0,-1,0)+s(0,-1,0,0,0,0,1,0)+u(0,0,0,1,0,0,0,0)+v(0,0,0,0,0,1,0,-1) 独立した固有ベクトルは、 (-1,0,1,0,1,0,-1,0) (0,-1,0,0,0,0,1,0) (0,0,0,1,0,0,0,0) (0,0,0,0,0,1,0,-1) の4つだが、 1次ジョルダン細胞に対するものを一番簡単な(0,0,0,1,0,0,0,0)にする。 それをx=[0 0 0 1 0 0 0 0]^t (転置)と書く。 By≠0、Bz≠0、Bu≠0、B^2u≠0の条件で y=[1 0 0 0 0 0 0 0]^t z=[0 1 0 0 0 0 0 0]^t u=[0 0 1 0 0 0 0 0]^t を設定すると、変換行列Pはジョル細胞の低い方をからの直和に合わせ P=[x By y Bz z B^2•u Bu u] P= 0 1 1 -1 0 -1 1 0 0 1 0 -2 1 -1 3 0 0 -2 0 1 0 1 -2 1 1 -1 0 4 0 2 4 0 0 -3 0 1 0 1 -3 0 0 -2 0 6 0 4 -5 0 0 3 0 1 0 0 1 0 0 3 0 -6 0 -4 6 0 P^(-1)= 0 0 0 1 34 28 16 37 0 0 0 0 4 4 2 5 1 0 0 0 1 2 0 2 0 0 0 0 -8 -9 -3 -11 0 1 0 0 1 -1 1 -1 0 0 0 0 9 12 3 14 0 0 0 0 -4 -3 -2 -4 0 0 1 0 -1 -1 0 -1 P^(-1)AP=J になる。