next up previous contents
Next: 6 特異値 Up: 5 QR 法 Previous: 5.5 QR 法の歴史

5.6 Octave での実験

MATLAB や Octave には qr() という QR 分解をする関数があって、 QR 法の実験が簡単にできる。

以下、実験をする際の参考に、小プログラム集を。


# qr_t.m --- QR 変換
function QR = qr_t(a)
  [q r]=qr(a);
  QR=r*q;
endfunction
# qr_iteration.m --- QR 変換の反復
function QR = qr_iteration(a,n)
  QR = a;
  for i=1:n
    [q r]=qr(QR);
    QR=r*q;
  end
endfunction
# norm_l.m --- 下三角部分 (対角線含まず) のノルム
function n = norm_l(a)
  n = norm(a-triu(a));
endfunction
# rand_h.m --- テスト用 Hessenberg 行列
function ret = rand_h(n)
  ret = triu(rand(n,n)) + diag(rand(n-1,1),-1);
endfunction
# rand_t.m --- テスト用三重対角行列
function ret = rand_t(n)
  ret=diag(rand(n,1),0)+diag(rand(n-1,1),1)+diag(rand(n-1,1),-1);
endfunction
# rand_s.m --- テスト用対称行列
function ret = rand_s(n)
  a=rand(n,n);
  ret = (a+a')/2;
endfunction
# rand_st.m --- テスト用対称三重対角行列
function ret = rand_st(n)
  u=rand(n-1,1);
  ret=diag(rand(n,1),0)+diag(u,1)+diag(u,-1);
endfunction
# rand_hermite.m --- テスト用 Hermite 行列
function ret = rand_hermite(n)
  a=rand(n,n)+i*rand(n,n);
  ret = (a+a')/2;
endfunction


next up previous contents
Next: 6 特異値 Up: 5 QR 法 Previous: 5.5 QR 法の歴史
桂田 祐史
2015-12-22