主要内容

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

胆固醇

説明

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

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

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

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

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

[R,旗帜,P]=胆红素(s)はこれに加えて置換行列Pを返します。この行列は、amdにより得られるスパース行列sの事前並べ替えです。标志=0の場合、sは対称正定値であり、RR'*R=P'*S*Pを満たす上三角行列です。

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

すべて折りたたむ

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

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

A=[1 01;0 2 0;1 0 3]
A=3×31 0 1 0 2 0 1 0 3

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

R=胆固醇(A)
R=3×31.0000 0 1.0000 0 1.4142 0 0 0 1.4142

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

b=总和(A,2);

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

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

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

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

A=画廊(“莱默”,6);

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

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

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

范数(R'*R-A)
ans=2.8779e-16

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

L=chol(A,“更低”)
L=6×61.0000 0 0 0 0 0 0.5000 0.8660 0 0 0 0 0.3333 0.5774 0.7454 0 0 0 0.2500 0.4330 0.5590 0.6614 0 0 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.2914e-16

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

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

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

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

[R,flag]=chol(A)
R=4×41 1 1 1 0 1 2 3 0 0 1 3 0 0 0 1
标志=5

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

R'*RA(1:q,1:q)を満たす 4.行 4.列を返すことを確認します。

q=标志-1;R'*R
ans=4×41 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20
A(1:q,1:q)
ans=4×41 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20

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

韦斯特0479行列に基づくスパース正定値行列を作成します。

负载韦斯特0479A=west0479;S=A'*A;

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

[R,flag]=chol(S);[RP,flagP,P]=chol(S);

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

如果~flag&&~flagP disp(“因子分解成功。”)其他的disp(“分解失败。”)终止
因子分解成功。

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

子地块(1,2,1)间谍(R)标题(“chol(S)中的非零”)子地块(1,2,2)间谍(RP)标题('chol(P'*S*P)中的非零')

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

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

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

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

图形包含一个轴。轴包含一个line类型的对象。

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

[R,flag,p]=胆固醇(S,“向量”);

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

如果~flag disp(“因子分解成功。”)其他的disp(“因式分解失败。”)终止
因子分解成功。

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

范数(S(p,p)-R'*R,“fro”)
ans=2.1039e-13

入力引数

すべて折りたたむ

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

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

データ型:仅有一个的|双重的
複素数のサポート:あり

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

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

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

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

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

例:R=chol(A,‘较低’)

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

  • 标志=0の場合、sは対称正定値であり、P'*S*P=R'*R(Pが行列の場合) またはS(p,p)=R'*R(Pがベクトルの場合) です。

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

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

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

例:[R,flag,p]=chol(S,'vector')

出力引数

すべて折りたたむ

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

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

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

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

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

  • 标志=0の場合、入力行列は対称正定値です。Rは、R'*R=Aとなる上三角行列です。

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

  • A.がスパースの場合、RはサイズがQN列の上三角行列であり、R'*Rの最初のQ行と最初のQ列からなる L型領域がA.またはsの対応部分と一致します。

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

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

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

詳細

すべて折りたたむ

対称正定値行列

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

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

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

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

ヒント

拡張機能

R2006aより前に導入