Thở dài. Tính toán các yếu tố quyết định để xác định sự kỳ dị là một điều vô lý để làm, hoàn toàn như vậy. Đặc biệt là cho một ma trận lớn. Xin lỗi, nhưng nó là. Tại sao? Có, một số sách cho bạn biết để làm điều đó. Có lẽ ngay cả người hướng dẫn của bạn.
Độc đáo phân tích là một chuyện. Nhưng làm thế nào về việc xác định số ít? Trừ khi bạn đang sử dụng một công cụ tượng trưng, MATLAB sử dụng số học dấu chấm động. Điều này có nghĩa là nó lưu trữ số dưới dạng dấu phẩy động, giá trị chính xác kép. Những con số này không thể nhỏ trong độ lớn hơn
>> realmin
ans =
2.2251e-308
(Trên thực tế, MATLAB đi thấp hơn một chút, về mặt số denormalized, có thể đi xuống khoảng 1e-323.) Thấy rằng khi tôi cố gắng để lưu trữ một số nhỏ hơn thế, MATLAB nghĩ nó bằng không.
>> A = 1e-323
A =
9.8813e-324
>> A = 1e-324
A =
0
Điều gì sẽ xảy ra với ma trận lớn? Ví dụ: ma trận này là số ít:
M = eye(1000);
Vì M là ma trận nhận dạng, nó khá rõ ràng không phải là số ít. Thực tế, det cho rằng nó không phải là số ít.
>> det(M)
ans =
1
Nhưng, nhân nó với một số hằng số. Điều đó làm cho nó không phải là số ít? KHÔNG!!!!!!!!!!!!!!!!!!!!!!!! Tất nhiên là không. Nhưng hãy thử nó.
>> det(M*0.1)
ans =
0
Hmm. Thats là lẻ. MATLAB cho tôi biết yếu tố quyết định là bằng không. Nhưng chúng ta biết rằng yếu tố quyết định là 1e-1000. Ồ, vâng. Gosh, 1e-1000 nhỏ hơn, bởi một số lượng đáng kể so với số lượng nhỏ nhất mà tôi chỉ cho bạn thấy rằng MATLAB có thể lưu trữ như là một đôi. Vì vậy, các yếu tố quyết định underflows, mặc dù nó rõ ràng là khác không. Là số ít ma trận? Tất nhiên là không. Nhưng việc sử dụng det thất bại ở đây?Tất nhiên nó sẽ, và điều này là hoàn toàn mong đợi.
Thay vào đó, hãy sử dụng một công cụ tốt để xác định điểm kỳ dị. Sử dụng công cụ như cond hoặc xếp hạng. Ví dụ, chúng ta có thể đánh lừa thứ hạng không?
>> rank(M)
ans =
1000
>> rank(M*.1)
ans =
1000
Xem xếp hạng đó biết rằng đây là ma trận xếp hạng đầy đủ, bất kể chúng tôi có quy mô hay không. Điều này cũng đúng với điều kiện, tính toán số điều kiện của M.
>> cond(M)
ans =
1
>> cond(M*.1)
ans =
1
Chào mừng bạn đến với thế giới của số học dấu phẩy động. Và, bằng cách này, hãy quên det như một công cụ cho hầu như bất kỳ tính toán nào bằng cách sử dụng số học dấu chấm động. Nó là một sự lựa chọn nghèo hầu như luôn luôn.
có chức năng PINV cho pseudoinverse – Amro