2013-05-22 117 views
19

Có thể sử dụng trình xử lý chức năng để gọi hàm, ví dụ:Tại sao chức năng Matlab "feval" lại cần thiết?

f = @sin; 
val = f(1.0); 

vậy tại sao "feval" lại cần thiết?

val = feval(f, 1.0); 

Khi nào thì hữu ích?

+2

Tôi thấy rằng nó làm cho mã dễ đọc hơn vì các dấu ngoặc đơn được sử dụng cho cả việc lập chỉ mục và gọi hàm. Sử dụng 'feval' làm cho nó rõ ràng những gì chúng ta đang làm. – Amro

Trả lời

15

Đối với feval, đối số đầu tiên có thể là chuỗi được trích dẫn, giúp bạn linh hoạt hơn so với xử lý chức năng. Bạn có thể làm những việc như có chức năng với tên cơ sở theo sau là chỉ mục như trong fn1, fn2, fn3 và sau đó gọi các hàm này theo cách động bằng cách sử dụng feval(['fn', num2str(k)], x, y, z);.

+0

Cảm ơn, tôi tự hỏi liệu có bất kỳ ngôn ngữ nào khác như Python hỗ trợ các tên hàm được tạo động không? –

+0

Có, các ngôn ngữ khác có cơ chế phức tạp hơn. Bạn có thể đọc về nội tâm. Cũng tìm kiếm "thông điệp" trong Mục tiêu-C. –

+1

Tôi sẽ thêm rằng, trong lịch sử, TMW đã thúc đẩy một sự thay đổi từ các phương pháp 'eval' sang các lựa chọn thay thế 'được kiểm soát' như xử lý @function. Nói cách khác, cấu trúc trên dễ dàng được thực hiện với các xử lý @function nhưng vẫn có thể được sử dụng trong mã cũ hoặc theo thói quen. – Oleg

13

Cho đến khi phát hành 14 (MATLAB 7), feval là cách để đánh giá một chức năng xử lý ... hoặc để đánh giá chức năng khi họ được quy định bởi tên của họ.

Nguồn: Mental model for feval().

+0

Cảm ơn Oleg, nó có ý nghĩa rất nhiều. Ngoài ra một bài viết blog khác được đề cập trong các ý kiến: [More on eval] (http://blogs.mathworks.com/loren/2006/01/04/more-in-eval/) –

+0

Một lưu ý phụ, trong 5 năm với MATLAB Tôi có thể đã sử dụng feval chỉ một lần. – Oleg

+0

giúp bạn nhận được phiếu bầu thứ 10 :-) Câu trả lời hay! – Shai

0

Không nhất thiết phải luôn luôn bạn biết chức năng nào được cho là sử dụng; có rất nhiều ví dụ

đây là ví dụ ngớ ngẩn: cho phép, trong một tệp văn bản sau mỗi số, từ khác nhau có thể được đánh giá dưới dạng hàm toán học, như, trung bình, min, max, square được biểu diễn và tác vụ được tính toán kết quả sau mỗi lần như thế,

2,square,2,power,4,log,10 ... 

và bạn muốn viết một chương trình để đi qua văn bản này và tính toán kết quả cuối cùng ...

ví dụ khác là ví dụ, tôi muốn xác định một chức năng cốt truyện với chức năng đầu vào của người dùng xử lý f, vì vậy nó phải theo cách linh hoạt ...

[email protected](f,x) plot(f(x)) 
+0

Trong cả hai trường hợp, bạn vẫn có thể sử dụng chức năng xử lý. – Oleg

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