2016-12-02 56 views
5

Tôi tạo ra một chức năng xử lý vô danh như thế này:Lô một chức năng ẩn danh mà không cần tên biến rõ ràng

f = @(x,y)sqr(x)+sqr(y) 

Đây là một quả cầu với hai biến xy. Có vẻ như hoạt động vì tôi có thể gọi một số thứ như

f(2,3) 

và MATLAB cho tôi kết quả phù hợp ans = 13.

Trong bước cuối cùng, tôi muốn vẽ hàm đó từ câu 7-7 cho cả xy. Vì vậy, tôi gọi

fmesh(f,[-7 7]) 

và hình bên phải bật lên. Càng xa càng tốt.

Đối với một số lý do, mà tôi không muốn chỉ định ở đây, bây giờ tôi muốn chỉnh sửa các chức năng xử lý như sau:

f = @(x)sqr(x(1))+sqr(x(2)) 

này nên là lĩnh vực tương tự, nhưng lần này với 2 biến x(1)x(2). Kể từ khi chức năng bây giờ muốn một mảng như là đối số tôi thay đổi nội dung các cuộc gọi thử nghiệm

f([2,3]) 

và nó vẫn mang lại cho tôi những kết quả đúng ans = 13.

Nhưng đây là vấn đề: Làm thế nào để vẽ đồ thị chức năng muốn một mảng làm đối số? Lệnh lưới giống như trước đây tất nhiên không thành công, vì [-7,7] có thứ nguyên sai. Điều tương tự cũng xảy ra với [[-7 7] [-7 7]][[-7 7];[-7 7]].

Làm cách nào để có được một lô làm việc từ chức năng mới đó xử lý? Cảm ơn bạn trước!

+1

Bạn có thể không thực sự làm điều đó. Bạn có thể bọc 'f' bên trong một hàm ẩn danh khác chấp nhận hai đầu vào và tạo ra một:' g = @ (x, y) f ([x, y]) ' – Suever

Trả lời

4

Bạn không thể nhận được fmesh để chuyển các giá trị xy dưới dạng mảng như những gì bạn mong đợi. Những gì bạn có thể làm là để bọc chức năng ẩn danh f của bạn trong một chức năng ẩn danh khác mà chỉ cần sắp xếp lại đầu vào.

g = @(x,y)f([x, y]); 
fmesh(g, [-7 7]) 

Một giải pháp tổng quát hơn mà mất tất cả đầu vào và đặt chúng vào một mảng sẽ

g = @(varargin)f([varargin{:}]) 
Các vấn đề liên quan