2017-01-11 15 views
7

Hôm nay tôi đã khá ngạc nhiên bởi điều này:Ngạc nhiên bởi "không phù hợp" hành vi của hàm rank Matlab về ma trận nhỏ, số nguyên có giá trị

>> M = [0, 0, 0;6, 1, 3;1, 7, 0]; 
>> rank(M) 

ans = 

    3 

>> rank(M') 

ans = 

    2 

Tôi nhận thức được thực tế là chức năng thứ hạng không nhất thiết phải là số lượng ổn định vì nó ngưỡng các giá trị số ít. Tuy nhiên, tôi đã mong đợi các vấn đề xảy ra đối với các ma trận có kích thước lớn hoặc lớn về các phần tử chứ không phải là một ma trận 3 của 3 số nguyên nhỏ.

Tôi đã kiểm tra những gì xảy ra và trong thực tế svd (M) cho các giá trị đặc biệt 7.82, 5.93, 2.91e-15, trong khi khoan dung mặc định duy nhất là max (kích thước (A)) * eps (max (s)) = 2,665 e-15. Mặt khác, svd (M ') cho 0 là các giá trị số ít thứ ba (có thể do toàn bộ một cột là 0).

Tất nhiên tôi có thể tăng khả năng chịu đựng bằng cách gọi cấp bậc theo cách thủ công, nhưng làm thế nào tôi biết được cách tăng nó?

Có phương pháp số ổn định nào khác để tính thứ hạng (giả sử chúng ta biết rằng ma trận là số nguyên)?

chỉnh sửa: Tôi chỉ thấy rằng hành vi này phụ thuộc vào phiên bản. Các thử nghiệm trên được thực hiện với Matlab 2014a. Trên Matlab 2016b, svd (M) trả về giá trị số ít thứ ba là 4.15e-16 và xếp hạng hoạt động đúng. Vì vậy, có thể thực sự có vấn đề với svd đã được sửa giữa phiên bản. Tuy nhiên, tôi không chắc chắn về việc tôi có thể tin tưởng được bao nhiêu nữa, vì vậy tôi tin rằng câu hỏi của tôi vẫn hợp lệ.

+1

Cùng hiệu lực kể bạn có trong 2014b, để ghi lại. –

+0

Trên R2016b, 'cond (M)' cho '5.046e15' và' cond (M. ') 'Cho' inf'. Cả hai 'rank (M) 'và' rank (M.') 'Cho '2' –

+0

vào My Computer cond (M) cho 1.884e16 trong R2016b và 2.69e15 trong R2014a. Vì vậy, ngoài phiên bản, nó có thể phụ thuộc vào nền tảng. Tuyệt quá. – Florian

Trả lời

1

Matlab 2015a/2015b có vẻ làm việc (xem dưới đây)

>> M = [0, 0, 0;6, 1, 3;1, 7, 0]; 
>> rank(M) 

ans = 

    2 

>> rank(M') 

ans = 

    2 

>> 
+0

Cảm ơn, vì vậy theo dữ liệu, điều này đã được khắc phục trong khoảng thời gian từ 2014b đến 2015a. – Florian

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