下のバンド kl と上のバンド ku で行列をバンド化しました。それらを下三角にしたいので、QR Householderを採用しています。そのため、下のバンドの QR Householder アルゴリズムを変更しましたが、上のバンドが機能するようにアルゴリズムを変更することはできません。以下では、下のバンドについて、x 配列をゼロ以外の場所にのみ取得します。次に、A を更新するときに、上位バンドからゼロを取得する矩形配列を更新します (これは無視したいと思います)。その部分をベクトル化しようとしましたが (上部バンドのゼロを無視して)、うまくいきません。
function [U, R] = HouseH_QR(A, lowband) % so would like to add the upperband argument
[m, n] = size(A);
% algo from Trefethen with my mod for kl
% this works but not taking advantage of upperband
for k = 1:n,
kl = min(k+lowband, m); % the lower band
x = A(k:kl,k);
e = zeros(length(x),1); e(1) = 1;
u = sign(x(1))*norm(x)*e + x;
u = u./norm(u);
A(k:kl, k:n) = A(k:kl, k:n) - 2*u*u'*A(k:kl, k:n); % lower triang
U(k:m,k) = u;
end