gallery
テスト行列
構文
説明
[
は、A1,A2,...,Am
] = gallery(matrixname
,P1,P2,...,Pn
)matrixname
で指定されたテスト行列のファミリを生成します。P1,P2,...,Pn
は、個々の行列ファミリに必要な入力パラメーターです。呼び出し構文で使用される入力パラメーター P1,P2,...,Pn
の数は、行列ごとに異なります。各行列ファミリの正確な呼び出し構文については、matrixname
セクションで説明しています。
さらに、[
は、生成されたテスト行列のデータ型を指定します。A1,A2,...,Am
] = gallery(matrixname
,P1,P2,...,Pn
,typename
)
例
行列要素をスケーリングした色として表示する
いくつかのテスト行列の行列要素をスケーリングした色として表示します。
サイズが 11 行 11 列の循環行列を作成します。循環行列は、1 つ右に要素を循環移動して、各行が 1 つ前の行から取得される特殊なテプリッツ行列です。
C = gallery('circul',11);
C
の行列要素のイメージを表示します。現在のカラーマップを示すカラー バーをグラフに追加します。
imagesc(C)
axis square
colorbar
サイズが 11 行 11 列の grcar 行列を作成します。grcar 行列は、下対角要素上に -1
、主対角上に 1
、および主対角の上側にある最初の数対角上に 1
をもつ非対称テプリッツ行列です。
G = gallery('grcar',11);
G
の行列要素のイメージを表示します。
imagesc(G)
axis square
colorbar
サイズが 11 行 11 列の minij 行列を作成します。minij 行列 M
は、要素 M(i,j) = min(i,j)
をもつ対称正定値行列です。
M = gallery('minij',11);
M
の行列要素のイメージを表示します。
imagesc(M)
axis square
colorbar
整数の逆行列をもつ整数行列
整数行列は、行列式が正確に 1 または -1 である場合にのみ再び整数行列になる逆行列をもちます。行列式 1 または -1 をもつ二乗整数行列は、ユニモジュラー行列とも呼ばれます。この行列の例に gallery('dramadah',n)
があります。これは行列式が 1 または -1 の 0 および 1 からなる n
行 n
列の行列です。
6 行 6 列の dramadah 行列を作成します。その行列式と逆行列を計算します。
A = gallery('dramadah',6)
A = 6×6
1 1 0 1 0 0
0 1 1 0 1 0
0 0 1 1 0 1
1 0 0 1 1 0
1 1 0 0 1 1
0 1 1 0 0 1
detA = det(A)
detA = -1
invA = inv(A)
invA = 6×6
-1 -2 -3 4 -2 5
1 1 1 -2 1 -2
-1 -1 -2 3 -2 4
1 1 2 -2 1 -3
0 1 1 -1 1 -2
0 0 1 -1 1 -1
元の行列の行列式が -1 であるため、行列の逆行列は整数要素のみをもちます。
QR 分解を計算するハウスホルダー変換
この例では、行列 ( は直交行列、 は上三角行列) の QR 分解を計算するハウスホルダー変換の使用方法を示します。
最初に、乱数発生器を既定値に設定し、標準正規分布から 6 行 3 列の乱数方形行列を作成します。
rng('default')
A = randn(6,3)
A = 6×3
0.5377 -0.4336 0.7254
1.8339 0.3426 -0.0631
-2.2588 3.5784 0.7147
0.8622 2.7694 -0.2050
0.3188 -1.3499 -0.1241
-1.3077 3.0349 1.4897
ハウスホルダー行列を作成するには、関数 [v,beta] = gallery('house',x)
を使用します。この関数は、列ベクトル を取り、 がハウスホルダー行列となる および を返します。ハウスホルダー変換は、ベクトル の最初の要素を除くすべての要素をゼロ設定するために使用されます。
ハウスホルダー行列 を計算し、変換 を実行します。行列 では、最初の列の対角より下側にはゼロのみ含まれます。
[v1,beta1] = gallery('house',A(:,1));
P1 = eye(6) - beta1*(v1*v1');
A1 = P1*A
A1 = 6×3
-3.3630 2.8841 1.0421
-0.0000 1.9024 0.0858
0.0000 1.6571 0.5314
-0.0000 3.5028 -0.1350
0.0000 -1.0788 -0.0983
0.0000 1.9227 1.3835
次に、 で、最初の列と 2 番目の列の対角より下側にゼロのみが含まれるように、ハウスホルダー行列 を計算します。
[v2,beta2] = gallery('house',A1(2:end,2));
v2 = [0;v2];
P2 = eye(6) - beta2*(v2*v2');
A2 = P2*A1
A2 = 6×3
-3.3630 2.8841 1.0421
-0.0000 -4.8472 -0.6885
0.0000 0.0000 0.3413
-0.0000 0.0000 -0.5368
0.0000 -0.0000 0.0255
0.0000 0.0000 1.1630
最後に、 で下対角要素にゼロのみが含まれるようハウスホルダー行列 を計算します。
[v3,beta3] = gallery('house',A2(3:end,3));
v3 = [0;0;v3];
P3 = eye(6) - beta3*(v3*v3');
R = P3*A2
R = 6×3
-3.3630 2.8841 1.0421
-0.0000 -4.8472 -0.6885
-0.0000 0.0000 -1.3258
0.0000 0.0000 0.0000
-0.0000 -0.0000 -0.0000
-0.0000 -0.0000 -0.0000
行列 は上三角行列です。ハウスホルダー行列は involutory (行列が独自の逆行列と等しい) ため、 の QR 分解は、 の になります。
Q = P1*P2*P3
Q = 6×6
-0.1599 -0.0057 -0.6699 0.4983 -0.2036 -0.4857
-0.5453 -0.3952 -0.1759 -0.6432 0.1342 -0.2895
0.6717 -0.3386 0.1647 -0.0991 0.1551 -0.6109
-0.2564 -0.7239 0.3290 0.5244 0.0805 0.1434
-0.0948 0.2221 -0.0962 0.1872 0.9463 -0.0433
0.3888 -0.3948 -0.6130 -0.1346 0.1203 0.5335
関数 qr
を使用してこの結果を計算と比較します。
[Qa,Ra] = qr(A)
Qa = 6×6
-0.1599 -0.0057 -0.6699 0.4983 -0.2036 -0.4857
-0.5453 -0.3952 -0.1759 -0.6432 0.1342 -0.2895
0.6717 -0.3386 0.1647 -0.0991 0.1551 -0.6109
-0.2564 -0.7239 0.3290 0.5244 0.0805 0.1434
-0.0948 0.2221 -0.0962 0.1872 0.9463 -0.0433
0.3888 -0.3948 -0.6130 -0.1346 0.1203 0.5335
Ra = 6×3
-3.3630 2.8841 1.0421
0 -4.8472 -0.6885
0 0 -1.3258
0 0 0
0 0 0
0 0 0
マシンの精度内で であることを検証します。
norm(A - Q*R)
ans = 2.2565e-15
複素平面での固有値の分布
この例では、複素平面内にサイズが 18 行 18 列の 20,000 のランダムな循環行列サンプルからの固有値の分布をプロットします。行列要素は、セット {–0.4,0.4} から等間隔でサンプリングされます。
固有値を保存する、サイズが 18 行 20,000 列の配列 E
を作成します。
E = zeros(18,20000);
乱数発生器を既定値に設定します。for ループ ステートメントで次の操作を 20,000 回繰り返します。
-0.4 または 0.4 の乱数要素をもつ 1 行 18 列の行ベクトル
x
を作成します。ベクトル
x
を入力として使用して、ランダムな循環行列A
を作成します。A
の固有値を求めて、それらをE
に保存します。
rng('default') for i = 1:20000 x = -0.4 + 0.8*randi([0 1],1,18); A = gallery('circul',x); E(:,i) = eig(A); end
複素平面に固有値 E
を表示する散布図を作成します。 軸と 軸の範囲を -3 ~ 3 に設定します。
scatter(real(E(:)),imag(E(:)),'b.') xlabel('Re(E)') ylabel('Im(E)') xlim([-3 3]) ylim([-3 3]) axis square
行列の固有値への摂動の影響
テスト行列 gallery(3)
を作成します。テスト行列は、摂動に敏感な固有値で悪条件です。
A = gallery(3)
A = 3×3
-149 -50 -154
537 180 546
-27 -9 -25
eig
を使用して A
の固有値を計算します。
e = eig(A)
e = 3×1
1.0000
2.0000
3.0000
condeig
を使用して固有値条件数を計算します。
c = condeig(A)
c = 3×1
603.6390
395.2366
219.2920
条件数は、A
の行列要素の摂動によって、その固有値におよそ 200 ~ 600 倍大きい上限の摂動が生じることを示します。
次に、一様分布の乱数の行列を追加して、A
に対して小規模な摂動を加えます。乱数発生器のシードを既定値に設定します。0 ~ 0.001 (等値を含まない) の区間の要素をもつランダム行列を A
に追加します。
rng('default')
Ap = A + 1e-3*rand(3)
Ap = 3×3
-148.9992 -49.9991 -153.9997
537.0009 180.0006 546.0005
-26.9999 -8.9999 -24.9990
摂動された行列 Ap
の固有値を計算します。
ep = eig(Ap)
ep = 3×1
0.7399
2.1437
3.1188
摂動された固有値と元の固有値の差を表示します。
delta = ep - e
delta = 3×1
-0.2601
0.1437
0.1188
固有値の変更を、固有値条件値で指定された上限と比較します。上限は、固有値の摂動とほぼ同じ桁数です。
delta_upper = 1e-3*c
delta_upper = 3×1
0.6036
0.3952
0.2193
丸め誤差の影響を受ける固有値
テスト行列 A = gallery(5)
を作成します。テスト行列は、丸め誤差の影響を受ける固有値をもちます。
A = gallery(5)
A = 5×5
-9 11 -21 63 -252
70 -69 141 -421 1684
-575 575 -1149 3451 -13801
3891 -3891 7782 -23345 93365
1024 -1024 2048 -6144 24572
正確な演算において、行列 A
は の 5 分割の固有値をもちます (厳密には、A
は代数的多重度が 5 で幾何学的多重度が 1 の固有値 0 をもちます)。つまり、A
の正確な特性多項式は となります。A^5
がゼロ行列であることを確認します。
Afifth = A^5
Afifth = 5×5
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
eig
を使用して、これらの結果を固有値の数値計算と比較します。関数 eig
は、A
の小さな 5 つの固有値を返します。
e = eig(A)
e = 5×1 complex
-0.0347 + 0.0258i
-0.0347 - 0.0258i
0.0138 + 0.0401i
0.0138 - 0.0401i
0.0419 + 0.0000i
これは、A
の固有値の数値計算が、計算に使用されている浮動小数点精度により丸め誤差に大きく影響を受けることを示しています。
固有値の数値計算は、正確な演算の対応する計算とは大きく異なります。A
の正確な固有値に近い固有値を求める代わりに、関数 eig
は、A
に近い行列の固有値を求めます。これを説明するために、複素平面に A
の正確な数値固有値をプロットします。
plot(0,0,'bo',real(e),imag(e),'r*') axis([-0.1 0.1 -0.1 0.1]) axis square
この図は、数値固有値が、原点を中心とする、複素平面の正五角形の頂点上にあることを示してます。五角形の半径はおよそ 0.04 です。
次に、A
に近い 20 個の行列の固有値を計算します。乱数発生器を既定値に設定し、eps
を乗算した標準正規分布から得た乱数値で A
に摂動を与えます。20 個の摂動された行列の数値固有値をプロットします。
E = zeros(20,5); rng('default') for i = 1:20 E(i,:) = eig(A + eps*randn(5).*A); end plot(0,0,'bo',real(e),imag(e),'r*',real(E),imag(E),'k.') axis([-0.1 0.1 -0.1 0.1]) axis square
この図は、A
に摂動を与えると、A
の固有値を表す元の五角形が方向を反転させることを示しています。20 個の摂動された行列の固有値は、0.01 ~ 0.07 の半径をもつ五角形の頂点上にあります。摂動された行列の計算された固有値は、元の行列の計算された固有値と同様に動作します。計算された固有値の不正確性は、gallery(5)
の感度が原因です。
入力引数
matrixname
— 行列ファミリの名前
'binomial'
| 'cauchy'
| 'chebspec'
| 'chebvand'
| 'chow'
| 'circul'
| 'clement'
| 'compar'
| ...
行列ファミリの名前。文字ベクトルまたは string スカラーとして指定します。引数 matrixname
は、以下にリストされているように生成されたテスト行列のファミリを決定します。
| 説明: involutory 行列の倍数である二項行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: コーシー行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: チェビシェフ スペクトル微分行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: チェビシェフ多項式用のヴァンデルモンド行列に似た行列 構文:
| ||||||||||||||||
| 説明: 特異なテプリッツ下ヘッセンベルグ行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 循環行列 構文:
プロパティ:
参考: | ||||||||||||||||
| 説明: ゼロを対角要素とする三重対角行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 比較行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 行列の条件数推定の反例 構文:
| ||||||||||||||||
| 説明: 列を巡回的に繰り返す行列 構文:
| ||||||||||||||||
| 説明: 対角で、悪条件の三重対角行列 (スパース行列) 構文:
| ||||||||||||||||
| 説明: 0 と 1 の行列 構文:
| ||||||||||||||||
| 説明: Fiedler 対称行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: Forsythe 行列または摂動のあるジョルダン ブロック 構文:
プロパティ:
| ||||||||||||||||
| 説明: 悪条件の固有値をもつフランク行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 最大公約数行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: Gear 行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 影響を受けやすい固有値をもつテプリッツ行列 構文:
| ||||||||||||||||
| 説明: 固有値が複素平面内の垂線上に位置する行列 構文:
| ||||||||||||||||
| 説明: ハウスホルダー行列 構文:
| ||||||||||||||||
| 説明: 指定された範囲で一様分布からランダムにサンプリングされた整数の配列 構文:
| ||||||||||||||||
| 説明: 上ヘッセンベルグ行列の逆行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: involutory 行列 (その行列の逆行列) 構文:
プロパティ:
参考: | ||||||||||||||||
| 説明: 因子要素をもつハンケル行列 構文:
| ||||||||||||||||
| 説明: ジョルダン ブロック行列 構文:
| ||||||||||||||||
| 説明: 上台形 Kahan 行列 構文:
| ||||||||||||||||
| 説明: Kac-Murdock-Szego テプリッツ行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: Krylov 行列 構文:
| ||||||||||||||||
| 説明: Lauchli 方形行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: Lehmer 対称正定値行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: レスリー人口モデルからの出生数と生存率の行列 構文:
| ||||||||||||||||
| 説明: 実数で、影響を受け易い固有値をもつ三重対角行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: Lotkin 行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 対称正定値行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: Moler 対称正定値行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 離散ノイマン問題からの特異行列 (スパース行列) 構文:
| ||||||||||||||||
| 説明: 標準正規 (ガウス) 分布からランダムにサンプリングされた数値の配列 構文:
| ||||||||||||||||
| 説明: 直交行列、ほぼ直交行列 構文:
| ||||||||||||||||
| 説明: Parter 行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: Pei 行列 構文:
| ||||||||||||||||
| 説明: ポアソン方程式からのブロック三重対角行列 (スパース行列) 構文:
| ||||||||||||||||
| 説明: Prolate 行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 正規化された列と指定した特異値をもつランダム行列 構文:
| ||||||||||||||||
| 説明: 指定した固有値をもつランダム相関行列 構文:
参考: | ||||||||||||||||
| 説明: 乱数の直交上ヘッセンベルグ行列 構文:
| ||||||||||||||||
| 説明: 乱数 J 直交行列 構文:
| ||||||||||||||||
| 説明: 要素が -1、0、または 1 で構成されるランダム行列 構文:
| ||||||||||||||||
| 説明: 既定の特異値をもつランダム行列 構文:
| ||||||||||||||||
| 説明: 1 と 0 の Redheffer 行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: リーマン仮説に関連した行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: Ris 行列 構文:
| ||||||||||||||||
| 説明: 悪条件の整数固有値をもつ非対称行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: "smoke ring" の疑似スペクトルをもつ複素行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 対称正定値テプリッツ行列 構文:
| ||||||||||||||||
| 説明: 五重対角のテプリッツ行列 (スパース行列) 構文:
| ||||||||||||||||
| 説明: 三重対角行列 (スパース行列) 構文:
| ||||||||||||||||
| 説明: ウィルキンソンその他により議論された上三角行列 構文:
プロパティ:
| ||||||||||||||||
| 説明: 標準一様分布からランダムにサンプリングされた数の配列 構文:
| ||||||||||||||||
| 説明: Wathen 行列 (スパース行列) 構文:
| ||||||||||||||||
| 説明: ウィルキンソンにより工夫、検討された各種の行列 構文:
|
P1,P2,...,Pn
— 入力パラメーター
スカラー | ベクトル | 行列
入力パラメーター。スカラー、ベクトルまたは行列として指定します。呼び出しの構文で使用されるパラメーター P1,P2,...,Pn
は、matrixname
の表に示される行列ファミリに依存します。
typename
— 生成されたテスト行列のデータ型
文字ベクトル | string スカラー
生成されたテスト行列のデータ型。文字ベクトルまたは string スカラーとして指定します。
typename
を指定しない場合、出力行列のデータ型は、P1,P2,...,Pn
の中で行列の次元を指定しない引数、または出力行列の特性を決定するオプションを選択しない引数から決定されます。これらの引数のいずれかのデータ型がsingle
の場合、出力データ型はsingle
となります。それ以外の場合、出力データ型はdouble
です。typename
は、matrixname
が'integerdata'
でない限り、すべてのテスト行列で'double'
または'single'
でなければなりません。matrixname
が'integerdata'
の場合、typename
は'double'
、'single'
、'int8'
、'int16'
、'int32'
、'uint8'
、'uint16'
、または'uint32'
にすることができます。
出力引数
A1,A2,...,Am
— 出力係数、ベクトル、行列、または多次元配列
スカラー | ベクトル | 行列 | 多次元配列
出力係数、ベクトル、行列、または多次元配列。呼び出しの構文で生成される出力 A1,A2,...,Am
は、matrixname
の表に示される行列ファミリに依存します。多くの場合、関数 gallery
は出力引数として 1 つの行列のみを返します。
A
— 出力行列または多次元配列
行列 | 多次元配列
出力行列または多次元配列。
参照
[1] The MATLAB® gallery of test matrices is based upon the work of Nicholas J. Higham at the Department of Mathematics, University of Manchester, Manchester, England. Further background can be found in the books MATLAB Guide, 2nd ed, by Desmond J. Higham and Nicholas J. Higham, Philadelphia: SIAM, 2005, and Accuracy and Stability of Numerical Algorithms, by Nicholas J. Higham, Philadelphia: SIAM, 1996.
[2] Graham, R.L. and N. J. A. Sloane. “Anti-Hadamard Matrices.“ Linear Algebra and Its Applications 62 (1984): 113-137.
[3] Lippold, G. “Todd, J., Basic Numerical Mathematics. Vol. 2: Numerical Algebra. ISNM 22. Basel-Stuttgart, Birkhäuser-Verlag 1977. 216 S. DM 48,–.“ ZAMM - Zeitschrift für Angewandte Mathematik und Mechanik 59, no. 10 (1979): 589–589.
[4] Gear, C. W. “A Simple Set of Test Matrices for Eigenvalue Programs.“ Mathematics of Computation 23, no. 105 (1969): 119-125.
[5] Lotkin, M. “A Set of Test Matrices.“ Mathematical Tables and Other Aids to Computation 9, no. 52 (1955): 153.
[6] Davies, P. I. and N. J. Higham. “Numerically Stable Generation of Correlation Matrices and Their Factors.” BIT Numerical Mathematics 40 (2000): 640-651.
[7] Barrett, W. W. and T. J. Jarvis. “Spectral Properties of a Matrix of Redheffer.“ Linear Algebra and Its Applications 162-164 (1992): 673-83.
[8] Roesler, F. “Riemann's Hypothesis as an Eigenvalue Problem.“ Linear Algebra and Its Applications 81 (1986): 153-98.
[9] Bondesson, L. and I. Traat. “A Nonsymmetric Matrix with Integer Eigenvalues.“ Linear and Multilinear Algebra 55, no. 3 (2007): 239-47.
[10] Rutishauser, H. “On Test Matrices.“ Programmation en Mathematiques Numeriques, Editions Centre Nat Recherche Sci, Paris, 165 (1966): 349-65.
[11] Wilkinson, J. H. The Algebraic Eigenvalue Problem. Monographs on Numerical Analysis. Oxford: Oxford; New York: Clarendon Press; Oxford University Press, 1988.
[12] Moler, C. B. Numerical Computing with MATLAB. Philadelphia: Society for Industrial and Applied Mathematics, 2004.
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)