MATLAB Function Reference | ![]() ![]() |
表示
Y = sqrtm(X) [Y,esterr] = sqrtm(X)
詳細
Y = sqrtm(X)
は、X
の行列平方根を計算します。X
が負の固有値をもつ場合、結果は複素数になります。Y*Y
が、X
に近くない場合、ワーニングメッセージが表示されます。
[Y,esterr] = sqrtm(X)
は、ワーニングメッセージを表示しませんが、相対残差の推定 norm(Y*Y-X)/norm(X)
を出力します。
注意
X
が実数の対称正定行列、または、複素エルミート正定行列の場合、行列の平方根が計算されます。
X = [0 1; 0 0]
のような行列は、実数や複素数の平方根をもたず、sqrtm
の結果は予期できません。
例題
X = 5 -4 1 0 0 -4 6 -4 1 0 1 -4 6 -4 1 0 1 -4 6 -4 0 0 1 -4 5
この行列は対称で正定です。一意的な正定平方根 Y
=
sqrtm(X)
は、2 階の差分演算子を表わします。
Y = 2 -1 -0 0 -0 -1 2 -1 -0 -0 -0 -1 2 -1 0 0 -0 -1 2 -1 -0 -0 0 -1 2
X = 7 10 15 22
Y1 = 1.5667 1.7408 2.6112 4.1779
Y2 = 1 2 3 4
です。他の 2 つは 、-Y1
と -Y2
になります。4 つのすべての平方根は、X
の固有値と固有ベクトルから得られます。
[V,D] = eig(X); D = 0.1386 0 0 28.8614
対角行列 D
の 4 つの平方根は、つぎの符号の選択によって決まります。
S = ±0.3723 0 0 ±5.3723
Y = V*
S/V
Y2
の要素が整数であるため、Y2
が、より自然であっても、関数sqrtm
は 2 つのプラス符号を選択し、Y1
を求めます。
X = 0 1 0 0
は、いかなる平方根ももちません。Y
*Y
=
X
に対する実数または複素数の行列 Y
は存在しません。ステートメント
Y = sqrtm(X)
は、精度に関するワーニングメッセージと、つぎの結果を出力します。
Y = 1.0e+03 * 0.0000+ 0.0000i 4.9354- 7.6863i 0.0000+ 0.0000i 0.0000+ 0.0000i
アルゴリズム
sqrtm(X)
は、funm(X,'sqrt')
を省略したものです。funm
で使われるアルゴリズムは、Schur 分解を基にしています。X
が重複した固有値をもつ場合、計算できないことがあります。詳細は、funm
を参照してください。
![]() | sqrt | squeeze | ![]() |