MATLAB str2func发送函数

时间:2015-05-13 17:01:16

标签: function parameter-passing matlab

我想通过我的GUI从uicontrol传递函数(字符串),以及如何正确使用str2func将函数发送到我的m文件中。

我的GUI.m文件

function functionbox_Callback(hObject, eventdata, handles)
fun= str2func(get(handles.functionbox, 'String'));
[x, y] = hessian(fun);

我希望从GUI传递函数的hessian.m文件:

function [x, y] = hessian(fun)
    f = @(x,y) fun;
blablabla
hold off

我怎么做这种方法。

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你几乎已经弄明白了。您的代码中缺少的是使用适当的输入参数调用f以获取输出xy

请考虑基于您的代码。使用在左侧框中输入一个函数,并在右侧框中显示输出(实际上x+y ...仅用于演示)。玩它也看看功能如何协同工作。请问是否有不明确的事情。

代码:

function LoadFun

clear
clc

hfigure = figure('Position',[200 200 300 300]);

handles.TextFunction = uicontrol('Style','Text','Position',[20 220 100 20],'String','Enter function');
handles.functionbox = uicontrol('Style','edit','Position',[20 200 100 20],'String','');

handles.TextResult = uicontrol('Style','Text','Position',[140 220 100 20],'String','Output');
handles.resultbox = uicontrol('Style','edit','Position',[140 200 100 20],'String','');

handles.Button = uicontrol('Style','push','Position',[20 160 100 20],'String','Call function','Callback',@(s,e) ButtonCallback);

%// Call the function
    function ButtonCallback

        fun= str2func(get(handles.functionbox, 'String'));
        [x,y] = hessian(fun);

        %// Make other calculation and display output;
        z = x+y;

        set(handles.resultbox ,'String',num2str(z));
    end

%// Your function
    function [x,y] = hessian(fun)

        %// Define handles. Inputs do not have to be x and y here.
        f = @(a,b) fun(a) + fun(b);

        %// Perform operations
        x = f(pi,pi/2);
        y = f(0,2*pi);
    end

end

截图:

enter image description here

希望这就是你所追求的!

答案 1 :(得分:0)

str2func的作用很像函数句柄@。 因此,如果您的输入看起来像这样:

'@(x,y) x+y'

'functionname'

它应该可以正常工作。

要将现在的函数句柄传递给GUI,您无需再次定义它:

function [x, y] = hessian(fun)
result=fun(data);
blablabla hold off

对于匿名函数的多个输出: 这是可能的,但据我所知,不是内联。 来源:http://ch.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html#f4-70159

但这可以通过数组轻松解决。