2013-08-13 26 views
10

Tôi tình cờ gặp lỗi trong một phép nhân đơn giản làm tôi ngạc nhiên. Điều gì đang xảy ra ở đây, tôi luôn giả định * chỉ dành cho matrix multiplication.Lỗi khi sử dụng phép nhân đơn giản

x = 2; 
y = zeros(1,4); 
y(1) = 1 *x; 
y(2) = x* 1; 
y(3) = (x *1); 
y(4) = x *1; 
y 
x *1 

sẽ cung cấp cho các đầu ra sau đây:

y = 

    2  2  2  1 

Error: "x" was previously used as a variable, 
conflicting with its use here as the name of a function or command. 
See MATLAB Programming, "How MATLAB Recognizes Function Calls That Use Command Syntax" for details. 

Có ai hiểu điều gì đang xảy ra ở đây? Tất nhiên tôi đã xác minh rằng x không phải là một chức năng.

+0

bạn có thể tái sản xuất này sau khi khởi động Matlab? – Dan

+0

@Dan Thật vậy nó có thể dễ dàng được sao chép, tôi nghĩ rằng các câu trả lời giải thích nó. –

+0

Tôi thấy, tôi đã thử nó trong Octave và không có vấn đề gì. – Dan

Trả lời

11

Tùy thuộc vào khoảng cách. Xem thêm here để có giải thích dài hơn và một số ví dụ khi bạn có thể có sự mơ hồ chính hãng, nhưng về cơ bản ba thứ đầu tiên sẽ hoạt động như bạn mong đợi, và điều cuối cùng sẽ giả sử bạn đang cố gắng gọi hàm x với đầu vào * 1:

x*1 
x * 1 
x* 1 
x *1 

này không xảy ra nếu bạn gán đầu ra đối với một số thay đổi, không phụ thuộc khoảng cách:

y(2) = x *1 
z = x *1 
x = x *1 
+0

Cảm ơn, tôi đã không nhận ra điều này sẽ được hiểu là một cuộc gọi chức năng nếu chức năng không tồn tại. –

+3

@DennisJaheruddin Hãy thử điều này: '{[1 + 2], [1 + 2], [1+ 2], [1 +2]}'. Đây là một trong những điều tôi không thích nhất về MATLAB. –

9

Điều này xảy ra bởi vì khi bạn có x *1 trong một dòng riêng biệt, MATLAB giải thích x như một chức năng một cố gắng để vượt qua '*1' như một cuộc tranh cãi với nó, nhưng sau đó nó realzes rằng x là một biến, vì thế mà lỗi.

+1

Cảm ơn, tôi đã không nhận ra điều này sẽ được hiểu là một hàm gọi nếu hàm không tồn tại. Ước gì tôi cũng có thể chấp nhận câu trả lời này. –