2016-07-07 38 views
13

Một câu hỏi mà bật lên khá thường xuyên trong các hình dạng và kích cỡ khác nhau là: Tại sao tôi nhận được thông báo lỗi sau: "Chức năng Không xác định 'function_name' cho các đối số đầu vào của loại 'kép'""Hàm không xác định 'function_name' cho đối số đầu vào của loại 'double'."

Bài đăng này cố gắng giải quyết tất cả các tình huống khác nhau mà thông báo lỗi này có thể xảy ra và đề xuất các giải pháp để giải quyết vấn đề.

Trả lời

17

Nếu bạn vấp phải thông báo lỗi này và không biết ý nghĩa của nó. Hãy thoải mái trong điều này: 90% chúng tôi đã googled cùng một cụm từ.

"Không xác định chức năng 'int' cho đối số đầu vào của loại 'double'."

Thông báo lỗi khá tự giải thích, nhưng vẫn có thể gây nhầm lẫn. (Tôi đã chọn ngẫu nhiên 'int', nó cũng có thể là 'train', 'table', 'my_function' hoặc bất kỳ điều gì khác).

Có hai trường hợp chính mà lỗi này xảy ra:

  1. Bạn đang cố gắng sử dụng một chức năng mà không tồn tại (chưa)
  2. Bạn đang cố gắng truy cập vào một phần tử trong một biến điều đó không chưa tồn tại (chưa)

Bạn sẽ làm gì nếu gặp lỗi này?

Trước tiên, bạn có thể muốn thử which. Điều này sẽ cho bạn biết chức năng hoặc biến mà bạn đang cố gắng sử dụng có được xác định hay không.

which int 
'int' not found. 

Khá rõ ràng, Matlab không thể tìm thấy bất kỳ chức năng hoặc biến nào có tên int. Do đó, cố gắng sử dụng nó là vô ích. Chúng ta hãy so sánh nó với max:

which max 
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datafun\@logical\max) % logical method 

Tuy nhiên, bạn có thể nhận được những điều sau đây, ngay cả khi bạn nhận được "chức năng Không xác định 'x' ...". Nếu có, hãy xem điểm 3 bên dưới.

which x 
x is a variable. 

1. Nhưng chức năng "int" tồn tại! Nó thậm chí là documented here!?

Có, int tồn tại, nhưng chỉ khi bạn có Symbolic Toolbox. Vì hộp công cụ là các gói bổ sung phải được mua riêng (và có thể khá đắt), rất có thể là bạn không có gói đó.

Nếu bạn gặp lỗi "Không xác định chức năng", nhưng tìm hàm trong tài liệu, hãy xem trong menu ở bên trái hoặc chỉ cần kiểm tra địa chỉ. Các chức năng Matlab chuẩn có các địa chỉ như:

mathworks.com/help/matlab/ref/max.html 
        ^^^^^^ 

Chú ý phần "matlab". Nếu bạn thấy điều này, thì bạn đang sử dụng một hàm là một phần của Matlab cốt lõi.

Tuy nhiên, nếu bạn thấy một địa chỉ như hình dưới đây, sau đó chức năng bạn đang cố gắng sử dụng là một phần của hộp công cụ Symbolic:

mathworks.com/help/symbolic/int.html 
        ^^^^^^^^ 

hoặc có thể nó là một phần của Neural Network Toolbox:

mathworks.com/help/nnet/ref/train.html 
        ^^^^ 

Giải pháp: Tìm một chức năng khác không phải là một phần của hộp công cụ bạn không có. Rất có thể bạn sẽ tìm thấy những gì bạn đang tìm kiếm nếu bạn là một googler có tay nghề cao. Nếu bạn không thể tìm thấy nó, hãy nhờ giúp đỡ. Giải thích những gì bạn đã thử và cho thấy rằng bạn đã thực hiện một số nỗ lực!

2. Nhưng chức năng là documented here và là một phần của lõi Matlab !?

Mặc dù một hàm là một phần của cài đặt Matlab chuẩn và được ghi lại tài liệu tốt, bạn vẫn có thể gặp phải lỗi này. Nguyên nhân có khả năng nhất cho lỗi này là bạn đang sử dụng phiên bản cũ của Matlab. Nếu bạn kiểm tra tài liệu, bạn sẽ thấy những điều sau ở dưới cùng của trang:

Được giới thiệu vào R2013b

Vì vậy, nếu bạn đang sử dụng R2012b thì bạn không thể sử dụng ví dụ table.

Giải pháp: Kiểm tra xem chức năng có được xác định trong phiên bản Matlab của bạn hay không. Nếu nó chưa được triển khai thì bạn cần phải cập nhật Matlab hoặc tìm cách khác để thực hiện nó. Thay vào đó, ví dụ: table có thể sử dụng các ô hoặc cấu trúc.

3. Nhưng biến "my_variable" tồn tại! Tôi đã tạo nó ở dòng trên!

Không, bạn đã không làm như vậy. Rất có thể bạn đã tạo biến số myvariable, my_Variable, my_Variable hoặc thứ gì đó tương tự trong dòng ở trên. Nó cũng có thể là bạn đã tạo ra nó, nhưng đã vô tình cleared nó.

Giải pháp: Đi qua mã. Hãy tìm lỗi chính tả, địa điểm mà bạn vô tình xóa biến vv Bên trong trình soạn thảo Matlab, bạn sẽ nhận được dòng sau ở phía dưới nếu bạn đánh dấu một biến: "3 tập quán" x "tìm thấy" nếu bạn đã xác định và sử dụng hàm . Bạn cũng sẽ nhận được một đường màu cam bên dưới các biến không được sử dụng.

4. Nhưng tôi nhận được "y là một biến" khi tôi nhập which y?

Nếu bạn nhận được lỗi trên "chức năng Không xác định 'y', nhưng which cho bạn y tồn tại, thông báo lỗi của bạn có chứa một vài chi tiết dòng:

my_function(x) 
Undefined function or variable 'y'. 
Error in my_function (line 2) 
t = x*y; 

>> which y 
y is a variable. 

Điều này sẽ cho bạn biết là bạn có một biến số được gọi là y trong số Matlab Workspace của bạn (cũng kiểm tra this link).

Vấn đề là chức năng không thể truy cập không gian làm việc này:

Chức năng không sử dụng không gian làm việc cơ bản. Mỗi chức năng đều có không gian làm việc chức năng riêng.

Nếu bạn muốn có chức năng xem và sử dụng biến, bạn phải chuyển nó thành argument. Bằng cách này, biến sẽ là một phần của không gian làm việc cục bộ cho hàm đó. Tương tự, nếu bạn muốn các biến được tạo bên trong hàm có thể truy cập được bên ngoài hàm, bạn phải có các biến được tạo ra từ hàm đó.

Giải pháp: Chuyển các biến bạn muốn sử dụng làm đối số đầu vào cho hàm bạn sử dụng. Hãy chắc chắn rằng các tên bên trong các hàm là nội bộ nhất quán. I E. nó phải có cùng tên trong suốt hàm. Lưu ý rằng không có kết nối giữa các tên biến bên ngoài và bên trong hàm.

5. Nhưng tôi chuyển biến làm đầu vào cho hàm, nhưng tôi vẫn nhận được cùng một thông báo lỗi !?

Có, bạn có thể sử dụng biến làm đầu vào. Tuy nhiên, các tên biến không nhất thiết phải giống nhau trong các hàm khác nhau (thường là chúng không được).

Giả sử bạn có các chức năng:

function output = my_function(x) 
output = 2*y; 
end 

Bạn sẽ nhận được lỗi tương tự như trên nếu bạn gọi nó là từ không gian làm việc như trong đoạn code dưới đây, ngay cả khi bạn đang sử dụng y như biến đầu vào, và sử dụng y bên trong hàm.

y = 3; 
res = my_function(y) 

Điều này là do bên trong hàm my_function, biến bạn sử dụng như đầu vào sẽ được gọi x, bất kể những gì nó được gọi là bên ngoài hàm.

Giải pháp: Thay đổi tên của tên biến đầu vào trong tiêu đề hàm hoặc thay đổi tên của biến trong suốt hàm.

6. Nhưng tôi đã tạo ra x là một biến thể toàn cầu !?

Trước hết: Tôi khuyên bạn không nên sử dụng các biến toàn cục! Tốt hơn là chuyển các biến làm đối số.

Không đủ để khai báo biến là global trong không gian làm việc Matlab. Nó phải được khai báo trong mọi hàm bạn sử dụng. Vì vậy, nếu bạn có một biến toàn cầu x, bạn cần phải làm global x trong mọi hàm.

Giải pháp: Viết lại mã của bạn và chuyển các biến làm đối số thay vì sử dụng biến toàn cục. Nếu đây không phải là tùy chọn, hãy thêm global x vào tất cả các chức năng mà bạn đang sử dụng.


Ngoài câu trả lời này, bạn có thể tham khảo chính thức Matlab FAQ.

+0

http://stackoverflow.com/questions/35039864/undefined-function-lt-for-input-arguments-of-type-cell-in-using-cell/35040225#35040225 đây có thể là một trường hợp khác trong đó lỗi xảy ra. Đối với người mới bắt đầu, có thể khó tìm ra lý do tại sao, ngay cả khi giải pháp sẽ chỉ sử dụng 'doc lt'. Tôi không biết điều này có xảy ra với nhiều người hay không – Max

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