| 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 | ![]() |