QR

行列のQR分解を計算します。

bool  QR(
  matrix&  Q,    // 正規直交列をもつ行列
  matrix&  R      // 上三角行列
  );

パラメータ

Q

[out] 正規直交列を含む行列。mode = 'complete'の場合、結果はaが実数/複素数であるかどうかに応じて、直交行列/ユニタリ行列になります。その場合、行列式は+/- 1のいずれかになります。入力配列の次元数が 2 より大きい場合、上記のプロパティを持つ行列のスタックが返されます。

R key

[out] 上三角行列

戻り値

成功の場合はtrue、それ以外の場合はfalse

//---  A*x = b
matrix A = {{0, 1}, {1, 1}, {1, 1}, {2, 1}};
Print("A \n", A);
vector b = {1, 2, 2, 3};
Print("b \n", b);
//--- A = Q*R
matrix q, r;
A.QR(q, r);
Print("q \n", q);
Print("r \n", r);
matrix qr=q.MatMul(r);
Print("qr \n", qr);
 /*
A
 [[0,1]
 [1,1]
 [1,1]
 [2,1]]
b
 [1,2,2,3]
q
 [[0.4082482904638631,-0.8164965809277259,-1.110223024625157e-16,-0.4082482904638631]
 [0.4625425214347352,-0.03745747856526496,0.7041241452319315,0.5374574785652647]
 [-0.5374574785652648,-0.03745747856526496,0.7041241452319316,-0.4625425214347352]
 [-0.5749149571305296,-0.5749149571305299,-0.09175170953613698,0.5749149571305296]]
r
 [[-1.224744871391589,-0.2415816237971962]
 [-1.22474487139159,-1.466326495188786]
 [1.224744871391589,1.316496580927726]
 [1.224744871391589,0.2415816237971961]]
qr
 [[-1.110223024625157e-16,1]
 [1,0.9999999999999999]
 [1,1]
 [2,1]]
 */