Có một điều tôi không thích trên Matlab: Nó cố gắng đôi khi quá thông minh. Ví dụ: nếu tôi có căn bậc hai âm nhưTắt "hành vi thông minh" trong Matlab
a = -1; sqrt(a)
Matlab không phát sinh lỗi nhưng chuyển âm thầm sang số phức. Điều tương tự cũng xảy ra đối với logarit âm. Điều này có thể dẫn đến khó tìm lỗi trong một thuật toán phức tạp hơn.
Một vấn đề tương tự là Matlab "giải quyết" các hệ thống tuyến tính âm thầm phi bậc hai như trong ví dụ sau:
A=eye(3,2); b=ones(3,1); x = A \ b
Rõ ràng x
không đáp ứng A*x==b
(Nó giải quyết một vấn đề bình phương tối thiểu thay vì).
Có khả năng nào để tắt "tính năng" đó hay ít nhất hãy để Matlab in một thông báo cảnh báo trong trường hợp này? Điều đó thực sự sẽ giúp ích rất nhiều trong nhiều tình huống.
Tôi tự hỏi tại sao mọi người downvote câu hỏi này. Tôi nghĩ, hoàn toàn hợp pháp để hỏi điều này. Hơn nữa, tôi chắc chắn rằng có rất nhiều người mất thời gian tìm kiếm các lỗi tinh vi vì hành vi được mô tả. – Boris
Cách đọc câu hỏi của bạn nghe có vẻ giống như "Tôi đã không thực sự đọc tài liệu nói rằng Matlab hỗ trợ các số phức và giải thích điều mà toán tử backslash làm. Tôi có thể làm Matlab làm những gì tôi giả định rằng nó sẽ làm, bởi vì tôi thực sự thất vọng ở đây về việc tôi không thể đọc được tài liệu này? ". Mặc dù tôi không đồng ý với bạn về vấn đề với toán tử dấu gạch chéo ngược, tôi đồng ý rằng các số phức có thể là dấu hiệu của một vấn đề. Vì vậy, nó sẽ là tốt đẹp nếu có một "dbstop nếu phức tạp" ngoài "dbstop nếu nan/inf" trong trình gỡ rối. – Jonas
@ Jason Tôi đã cố gắng xây dựng câu hỏi theo cách mà người đọc không có ấn tượng này, có vẻ như tôi đã thất bại: (Bạn nói đúng, tài liệu này hoàn toàn rõ ràng về điều đó. Tôi nghĩ rằng Matlab "lạm dụng" nhà điều hành có thể dẫn đến lỗi và điều đó là xấu.Một cái khác thường bị sai bởi người mới bắt đầu là như sau: Hàm A (sai được xác định) như 'f = @ (x) x * ((x + 1)/x)' cho kết quả 'f ([1,2]) = [1.6,3.2] 'trong khi hầu hết người mới bắt đầu mong đợi kết quả '[2,3]'. Trong một chương trình lớn hơn lỗi như vậy là rất khó tìm. – Boris