range A^kの範囲

## 呼び出し手順

    [X,dim]=range(A,k)

## 引数

A

  実数正方行列

k

  整数

X

  直交実数行列

dim

  整数 (部分空間の次元)

## 説明

範囲 `A^k`を計算します ; `X` の 最初の dim 行は, `A^k`の範囲に広がります. `X`の最後の行は, この直交相補な範囲に広がります. `X*X'` は単位行列です.

## 例

    A=rand(4,2)*rand(2,4);   // 4 列ベクトル, 2 独立.
    [X,dim]=range(A,1);dim   // 範囲を計算

    y1=A*rand(4,1);          //Aの範囲のベクトル
    y2=rand(4,1);            //Aの範囲にないベクトル
    norm(X(dim+1:$,:)*y1)    //最後のエントリはゼロ, y1 はAの範囲
    norm(X(dim+1:$,:)*y2)    //最後のエントリは非ゼロ

    I=X(1:dim,:)'            //I が範囲の基底
    coeffs=X(1:dim,:)*y1     // 基底Iに関連するy1の要素

    norm(I*coeffs-y1)        //check

## 参照

- fullrfk
- rowcomp

## 使用される関数

`range` 関数は, svd分解を使用する rowcomp 関数 に基づいています.