2016-02-28 28 views
6

Tôi cần kiểm tra xem ma trận có phải là ma trận nhận dạng hay không. Tôi biết có một chức năng kiểm tra xem ma trận có phải là ma trận chéo hay không, tức là, isdiag. Tôi biết tôi có thể làm như sau để kiểm tra xem một ma trận a là một ma trận sắc:Kiểm tra xem ma trận có phải là ma trận nhận dạng trong Matlab

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

Có một chức năng như isdiag tha làm nó trực tiếp cho tôi?

+5

Bạn thường tránh kiểm tra tính chính xác, trừ khi bạn đang làm việc với số nguyên. Bạn có lẽ nên làm một cái gì đó như 'isidentity = @ (a, tol) tất cả (abs (một mắt (kích thước (a)))

+0

Không có chức năng tích hợp. Cách tiếp cận của bạn là tốt, trừ khi bạn xử lý ma trận rất lớn (thưa thớt) trong đó 'mắt (kích thước (a, 1))' có thể vượt quá bộ nhớ. – Daniel

+0

Hi @nbro bạn có nhiều câu hỏi của mình vẫn mở mà không có câu trả lời được chấp nhận.Khi câu trả lời đã giải quyết được câu hỏi của bạn, hãy cân nhắc [chấp nhận nó] (http://meta.stackexchange.com/q/5234/179419) bằng cách nhấp vào đánh dấu. Điều này cho thấy cộng đồng rộng lớn hơn mà bạn đã tìm thấy giải pháp. – Daniel

Trả lời

0

Như những người khác đã nói, bạn không nhất thiết muốn kiểm tra sự bình đẳng chính xác với ma trận nhận dạng. Cũng sử dụng eye có khả năng mất một lượng bộ nhớ không cần thiết cho các ma trận đủ lớn. Tôi khuyên bạn nên sử dụng diag để giải quyết vấn đề đó.

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

Lưu ý rằng 'isdiag' có thể kiểm tra độ chính xác của đường chéo, vì vậy nó có thể không hoàn toàn phù hợp với nửa sau của bạn điều kiện. –

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

Subtract bởi danh tính và kiểm tra xem bất kỳ yếu tố lớn hơn epsilon.

Các vấn đề liên quan