我想通过我的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
我怎么做这种方法。
答案 0 :(得分:0)
如果我理解你的问题,你几乎已经弄明白了。您的代码中缺少的是使用适当的输入参数调用f
以获取输出x
和y
。
请考虑基于您的代码。使用在左侧框中输入一个函数,并在右侧框中显示输出(实际上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
截图:
希望这就是你所追求的!
答案 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
但这可以通过数组轻松解决。