スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

正方行列を対角化する Maple プログラムの例

正方行列の対角化およびその変換行列を求める Maple プログラムの例。

正方行列の対角化の概要は、以下のとおり。

  • 正方行列 A が対角化可能であるとは、ある正則行列 P が存在して、P^(-1)AP が対角行列になるときにいう。
  • n 次正方行列 A が対角化できるための必要十分条件は、n 個の一次独立な固有ベクトルが存在することである。
  • 対角化の変換行列 P は、n 個の一次独立な固有ベクトルを並べて作る。

さらに、Hermite 行列の場合、

  • Hermite 行列は、あるユニタリ行列 U で対角化できる。
  • 対角化の変換行列 U は、n 個の固有ベクトルを Gram-Schmidt の方法で正規直交化したものを並べて作る。

これらを踏まえて Maple プログラムを作成すると、以下のとおり。

> diagonalize := proc(A)
    local B, P, rowsize, colsize, VAL, VEC, eigenvecs;

    # A が正方行列かどうか   
    rowsize, colsize := LinearAlgebra[Dimension](A);
    if rowsize != colsize then
      error "正方行列ではありません。";
    end if;

    # 固有ベクトルを求める
    VAL, VEC := LinearAlgebra[Eigenvectors](A);
    eigenvecs := LinearAlgebra[Column](VEC,
      [1 .. LinearAlgebra[ColumnDimension](VEC)]);

    # 対角化可能かどうか   
    if LinearAlgebra[Rank](VEC) < rowsize then
      error "対角化できません。";
    end if;

    # 変換行列 P を求める
    # Hetmite 行列なら固有ベクトルを正規直交化して並べる
    if LinearAlgebra[Equal](A^%H, A) then
      P := Matrix(LinearAlgebra[GramSchmidt](
        [eigenvecs], normalized));
    # それ以外は一次独立な固有ベクトルを並べる
    else
      P := Matrix([eigenvecs]);
    end if;

    # 対角化
    B := LinearAlgebra[Map](
      a->simplify(expand(rationalize(a))), P^(-1).A.P);

    if _nresults = 2 then 
      B, P
    else
      B
    end if;
  end proc:

> A := Matrix([
    [1, 3, 2],
    [0, -1, 0],
    [1, 2, 0],
  ]):
  B, P := diagonalize(A);  #=> Error: 対角化できません。

> A := Matrix([
    [1, 0, 0],
    [2, 3, 4],
    [-2, -2, -3],
  ]):
  B, P := diagonalize(A);  #=> B: A の対角化, P: 変換行列

> A := Matrix([
    [1, -I, 1, I],
    [I, 1, -I, 1],
    [1, I, 1, -I],
    [-I, 1, I, 1]
  ]):  # エルミート行列
  B, U := diagonalize(A);  #=> B: A の対角化, U: 変換行列
  LinearAlgebra[IsUnitary](U)  #=> true (ユニタリ行列かどうか)

> A := Matrix([
    [1, 2, -1],
    [2, -2, 2],
    [-1, 2, 1],
  ]):  # 実対称行列
  B, U := diagonalize(A);  #=> B: A の対角化, U: 変換行列
  LinearAlgebra[IsOrthogonal](U)  #=> true (直交行列かどうか)

※ A を対角化してできた行列の対角成分には A の固有値が並ぶ。
※ Maple には Jordan 標準形を求めるコマンド (LinearAlgebra[JordanForm]、MTM[jordan]) が用意されている。

【theme : 数学
【genre : 学問・文化・芸術

プロフィール

よしいず

Author:よしいず
MATHEMATICS.PDFというウェブサイトを運営しています。

管理の都合上、トラックバックとコメントはオフにしてあります。ブログ経験者なら分かっていただけると思いますが、スパム(アダルトやその他の宣伝)ばかりなのが現実です。

リンクは自由です。当サイトの記事に対する間違いの指摘・意見・感想などを述べた記事からのリンクは歓迎です。ただし、ブログ記事アップ直後はミスが多く、頻繁に修正します。場合によっては削除する可能性もあります。その際、何も断りもなく修正・削除しますがご了承ください。内容を参考にする場合には投稿後一週間ほど様子を見てからにしてください(笑)。

記事の間違いを指摘するときは、その具体的箇所、理由(仕様に反するなど)・根拠(参考にした文献など)、代替案(同じ結果を得るための正しいやり方)も教えてください。そうしないと、(指摘される側および第三者はその時点では無知の状態なので、)どこが間違いなのか分かりませんし、本当に間違っているのかどうかが判断・検証できません。実際、間違いだと指摘されたことが結局は正しかったというケースもありますので。

このブログのタイトル一覧

リンク
月別アーカイブ
カテゴリ
最新記事
検索フォーム
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。