主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

胆固醇

説明

R=胆固醇(一个)は,対称正定値行列一个を,= R ' * Rを満たす上三角行列Rに因数分解します。一个が非対称の場合,胆固醇はこの行列を対称であるものとして処理し,一个の対角部分と上三角部分のみを使用します。

R=胆固醇(一个三角形)は,因数分解の計算に使用する一个の三角因子を指定します。たとえば,三角形“低”の場合,胆固醇一个の対角部分と下三角部分のみを使用して,一个= R * R 'を満たす下三角行列Rを生成します。三角形の既定値は“上”です。

R国旗) =胆固醇(___)は出力国旗も返します。この出力は,一个対称正定値であるかどうかを表します。前述の構文にある任意の入力引数の組み合わせが使用できます。国旗出力を指定すると,胆固醇は入力行列が対称正定値でない場合にエラーを生成しません。

  • 国旗= 0の場合,入力行列は対称正定値であり,因数分解は成功しています。

  • 国旗がゼロでない場合,入力行列が対称正定値“ではなく”,国旗は因数分解が失敗したピボット位置のインデックスを示す整数です。

R国旗P) =胆固醇(年代)はこれに加えて置換行列Pを返します。この行列は,amdにより得られるスパース行列年代の事前並べ替えです。国旗= 0の場合,年代は対称正定値であり,R‘* R = P ' S * Pを満たす上三角行列です。

R国旗P) =胆固醇(___outputForm)は,前述の構文における入力引数の任意の組み合わせを使用して,置換情報Pを行列とベクトルのいずれで返すかを指定します。このオプションはスパース行列入力についてのみ使用できます。たとえば,outputForm“向量”で,かつ国旗= 0である場合,年代(p, p) = R * Rになります。outputFormの既定値は“矩阵”で,このとき‘* R = P ' S * Pになります。

すべて折りたたむ

胆固醇を使用して対称係数行列を因子分解してから,コレスキー因子を使用して線形系を解きます。

対角上に正の値をもつ対称行列を作成します。

A = [1 0 1;0 2 0;1 0 3)
一个=3×31 0 1 0 2 0 1 0 3

行列のコレスキー因子を計算します。

R =胆固醇(A)
R =3×31.4142 000 1.4142

方程式 斧头 b の右辺のベクトルを作成します。

b =和(2);

コレスキー分解により 一个 R T R であるため,この線形方程式は R T R x b になります。バックスラッシュ演算子を使用して,xについて解きます。

x = R \ (R \ b)
x =3×11.0000 1.0000 1.0000

行列の上コレスキー分解と下コレスキー分解を計算し,結果を確認します。

関数画廊を使用して6行6列のテスト用対称正定値行列を作成します。

一个=画廊(“黄土”6);

一个の上三角部分を使用してコレスキー因子を計算します。

R =胆固醇(A)
R =6×61.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0 0.8660 0.5774 0.330 0.3464 0.2887 00 0.7454 0.5590 0.4472 0.3727 000 0.6614 0.5292 0.4410 0000 0.6000 0.5000 0000 0.5528

上三角因子が丸め誤差の範囲内でR'*R - a = 0を満たしていることを確認します。

规范(‘* R - A)
ans = 2.8779 e-16

次に,“低”オプションを指定し,一个の下三角部分を使用してコレスキー因子を計算します。

L =胆固醇(,“低”)
L =6×60.000 0000 0 0.5000 0.8660 0000 0 0.3333 0.5774 0.7454 0000 0.2500 0.330 0.5590 0.6614 000 0.2000 0.3464 0.4472 0.5292 0.6000 0 0.1667 0.2887 0.3727 0.4410 0.5000 0.5528

下三角因子が丸め誤差の範囲内でL*L' - a = 0を満たしていることを確認します。

规范(L * L - A)
ans = 3.2914 e-16

胆固醇に2つの出力を指定して使用し,入力行列が対称正定値でない場合にエラーを非表示にします。

5行5列の二項係数の行列を作成します。この行列は対称正定値であるため,最後の要素から1を減算し,確実に不定値にします。

一个=帕斯卡(5);A(end) = A(end) - 1
一个=5×51 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 15 15 35 69

一个のコレスキー因子を計算します。2つの出力を指定して,一个が対称正定値でない場合にエラーが生成されないようにします。

[R,国旗]=胆固醇(A)
R =4×41 1 1 1 0 1 2 3 0 0 1 3 0 0 1 1 1 0 1 1 2 3 0 0 1 3 0 0 0 1
国旗= 5

国旗は非ゼロであるため,因数分解に失敗したピボットのインデックスが出力されます。胆固醇は,変更された行列の部分を検出して失敗するまでのQ = flag-1 = 4個の行と列を正しく計算できます。

‘* R(1:问,1:问)を満たす4行4列を返すことを確認します。

q = flag-1;‘* R
ans =4×41 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20
(1:问,1:问)
ans =4×41 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20

スパース行列のコレスキー因子を計算し,置換出力を使用して非ゼロのさらに少ないコレスキー因子を作成します。

west0479行列に基づくスパース正定値行列を作成します。

负载west0479一个= west0479;S =“*;

行列のコレスキー因子を2通りの方法で計算します。まつず2の出力を指定してから,行と列の並べ替えを有効にするために3つの出力を指定します。

[R,国旗]=胆固醇(年代);(RP flagP P) =胆固醇(年代);

各計算で国旗= 0であるかを調べて,計算が成功していることを確認します。

如果~flag && ~flag p(“分解成功。”)其他的disp (“分解失败了。”)结束
分解成功。

胆固醇(S)の非ゼロの数を,並べ替えた行列胆固醇(P“* * P)と比較します。ベストプラクティスは,スパース行列に胆固醇の3出力構文を使用することです。これは,行と列の並べ替えにより,コレスキー因子の非ゼロの数が大幅に減少するためです。

次要情节(1、2、1)间谍(R)标题(的非零胆固醇(年代))子情节(1,2,2)间谍(RP)标题(的非零胆固醇(P“* * P) ')

图中包含2个轴。标题为chol(S)非零的轴1包含一个类型为line的对象。chol(P'*S*P)中标题为Nonzeros的坐标轴2包含一个类型为line的对象。

胆固醇“向量”オプションを使用して,置換情報を行列ではなくベクトルとして返します。

スパース有限要素行列を作成します。

S =画廊(“wathen”10、10);间谍(S)

图中包含一个坐标轴。轴包含一个线型对象。

この行列のコレスキー因子を計算します。“向量”オプションを指定して置換ベクトルpを返します。

(R,国旗,p) =胆固醇(年代,“向量”);

国旗= 0であることを確認します。これは計算が成功したことを示します。

如果~国旗disp (“分解成功。”)其他的disp (“分解失败了。”)结束
分解成功。

丸め誤差の範囲内で年代(p, p) = R * Rであることを確認します。

规范(S (p, p) - R * R,“摇来摇去”)
ans = 2.1039 e-13

入力引数

すべて折りたたむ

入力行列。引数一个は非スパースストレージまたはスパースストレージを使用できますが,正方かつ対称正定値でなければなりません。

胆固醇では,一个が実数行列の場合は対称,複素行列の場合はエルミートであると仮定します。胆固醇は,三角形の値に応じて,一个の上三角部分または下三角部分のみを使用して計算を実行します。

データ型:|
複素数のサポート:あり

スパース入力行列。年代は正方かつ対称正定値でなければなりません。

胆固醇では,年代が実数行列の場合は対称,複素行列の場合はエルミートであると仮定します。胆固醇は,三角形の値に応じて,年代の上三角部分または下三角部分のみを使用して計算を実行します。

データ型:
複素数のサポート:あり

入力行列の三角因子。“上”または“低”として指定します。このオプションを使用して,胆固醇が因子分解の計算に入力行列の上三角因子または下三角因子を使用するように指定します。胆固醇では,入力行列が実数行列の場合は対称,複素行列の場合はエルミートであると仮定します。胆固醇は,上三角部分または下三角部分のみを使用して計算を実行します。

“低”オプションの使用は,“上”オプションと入力行列の転置を使用して胆固醇を呼び出してから,出的力Rを転置することと等価です。

例:R =胆固醇(“低”)

置換出力の形状。“矩阵”または“向量”として指定します。このフラグは,置換出力Pが置換行列または置換ベクトルのいずれで返されるかを制御します。

  • 国旗= 0の場合,年代は対称正定値であり,P ' *年代* P = R * RPが行列の場合)または年代(p, p) = R * Rpがベクトルの場合)です。

  • 国旗がゼロでない場合,年代は対称正定値ではありません。Rはサイズがn列の上三角行列で,q = flag-1です。‘* Rの最初の列のL型領域は,P ' S * PPが行列の場合)またはS (p, p)pがベクトルの場合)のL型領域と一致します。

  • “低”オプションを指定した場合,Rは下三角行列であり,前述の恒等式の‘* R* R 'に置き換えることができます。

P ' S * PPが行列の場合)またはS (p, p)pがベクトルの場合)のコレスキー因子は,年代のコレスキー因子よりスパース性が高くなる傾向があります。

例:(R,国旗,p) =胆固醇(年代,“矢量”)

出力引数

すべて折りたたむ

コレスキー因子。行列として返されます。

  • Rが上三角の場合,= R ' * Rになります。スパース行列についてP出力を指定した場合,outputFormの値に応じてP ' *年代* P = R * Rまたは年代(p, p) = R * Rになります。

  • Rが下三角の場合,一个= R * R 'になります。スパース行列についてP出力を指定した場合,outputFormの値に応じてP ' * * P = R * R 'またはS (p, p) = R * R 'になります。

  • 国旗がゼロでない場合,Rには部分的な結果のみが含まれます。国旗は因子分解が失敗したピボット位置を示し,Rには部分的に完了した因子分解が含まれます。

対称正定値フラグ。スカラーとして返されます。

  • 国旗= 0の場合,入力行列は対称正定値です。Rは,‘* R =となる上三角行列です。

  • 一个が対称正定値でない場合,国旗は因子分解に失敗したピボット位置を示す正の整数であり,MATLAB®はエラーを生成しません。Rは,‘* R =(1:问,1:问)となる,サイズがq = flag-1の上三角行列です。

  • 一个がスパースの場合,Rはサイズがn列の上三角行列であり,‘* Rの最初の行と最初の列からなるL型領域が一个または年代の対応部分と一致します。

  • “低”オプションを指定した場合,Rは下三角行列であり,前述の恒等式の‘* R* R 'に置き換えることができます。

スパース行列の置換。outputFormの値に応じて,行列またはベクトルとして返されます。この出力が満たす恒等式については,outputFormを参照してください。

この置換行列は,amdにより計算された近似最小次数の並べ替えに基づいています。ただし,胆固醇はパフォーマンス向上のため順序をわずかに変更する場合があるため,この事前並べ替えはamdにより直接得られるものとは異なることがあります。

詳細

すべて折りたたむ

対称正定値行列

“対称正定値行列“とは,固有値がすべて正である対称行列です。

任意の実可逆行列一个について積B =“*を使用して対称正定値行列を作成することができます。コレスキー分解は,任意の対称正定値行列Bは積‘* Rに因数分解できるとしてこの式を逆にしたものです。

“対称半正定値”行列は同様の方法で定義されますが,固有値はすべて正またはゼロでなければならない点が異なります。

数値計算の文脈で,正定値行列と半正定値行列の境界はあいまいです。固有値が厳密にゼロになることはほとんどありませんが,数値的にゼロになることはあります(マシン精度の桁で)。この理由から,胆固醇はある半正定値行列を因数分解することができても,固有値が非常に類似している他の行列で失敗することがあります。

ヒント

拡張機能

R2006aより前に導入