2016-02-28 9 views
6

行列が恒等行列かどうかを確認する必要があります。私は行列が対角行列かどうかを調べる関数、つまりisdiagがあることを知っています。行列がMatlabの恒等行列かどうかをチェック

isequal(a, eye(size(a, 1))) 

はthaのが私のために直接それをしないisdiagのような機能があります:私は、マトリックスaは単位行列であるかどうかをチェックするために、次のことができます知っていますか?

+5

整数で作業している場合を除き、通常は正確性のチェックを避けるべきです。おそらく 'isidentity = @(a、tol)all(abs(a-eye(size(a)))'のようなことをするべきでしょう。 'all(max()<)'の代わりに 'max(max())'を使います。 –

+0

組み込み関数はありません。あなたのアプローチは、 'eye(size(a、1))'がメモリを超過するかもしれない非常に大きな(疎な)行列を処理しない限り良いものです。 – Daniel

+0

こんにちは@nbroあなたはあなたの質問の複数が、受け入れられた回答なしでまだ開いています。答えがあなたの質問を解決したときは、[それを受け入れる]ことを検討してください(http://meta.stackexchange.com/q/5234/179419)。チェックマーク。これは、解決策を見つけたことを広範なコミュニティに示します。 – Daniel

答えて

0

他の人は言っているように、必ずしもアイデンティティ行列と完全に等しいかどうかを確認する必要はありません。また、eyeを使用すると、十分に大きな行列に対して不必要なメモリ量を消費する可能性があります。私はそれを回避するためにdiagを使用することをお勧めします。

isdiag(a) && all(abs(diag(a) - 1) < tolerance) 
+0

'isdiag'はおそらく正確な対角線をチェックするので、後半の部分と完全に一致しないかもしれないことに注意してください調子。 –

1
sum(sum(A - eye(size(A,1)) < epsilon)) == 0 

アイデンティティによって減算し、任意の要素がイプシロンよりも大きいかどうかを確認します。

関連する問題