从父函数的输入中创建函数句柄?

时间:2014-11-06 22:09:16

标签: matlab concatenation anonymous-function type-conversion

请原谅我,如果答案非常明显,或者有更好的方法可以做到这一点。

我正在尝试创建一个接受x函数的函数(例如x ^ 2 + 5x + 2),并使用该输入创建函数句柄。这样我可以将该功能用于我需要它做的任何事情。

我认为问题只是我不知道所有不同的函数类型是什么,我不明白如何“连接”“@(x)”和正确的输入函数来使函数处理

这是我试过的:

function test(input1)

function_1 = @(x) + input1

end

它表示input1的类型为double,即使它只是一个字母。

如果我尝试将输入作为字符串输入并将其转换为符号数据,我只会得到一个连续数字的数组。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

传递一个字符串可能不会让你得到你想要的东西,否则它会变得难看。

这可能不是主题,但了解匿名函数在创建时存储非输入变量的值非常重要。每次调用函数时要更改的任何值都需要是输入参数。

>> a = pi;
>> fun = @(x) x * a;
>> fun(2)
ans =

    6.2832

您可以按如下方式查看存储的值

>> fi = functions(fun)
fi = 
     function: '@(x)x*a'
         type: 'anonymous'
         file: ''
    workspace: {[1x1 struct]}
>> fi.workspace{1}
ans = 
    a: 3.1416

如果你想要另一个输入参数,只需要两个输入参数:

>> fun = @(x,y) x * y;
>> fun(2,pi)
ans =
    6.2832

但是,您可以将函数句柄传递给函数,然后调用它。也许这就是你所追求的:

function myfun = funTester(fh,x)
% presumably do something useful here
myfun = fh(x);

end

例如,

>> fun = @(x) x.^2 + 5*x + 2
fun = 
    @(x)x.^2+5*x+2
>> funTester(fun,-2)
ans =
    -4

最后的想法:使用eval构建句柄:

>> expression  = 'x^2 + 5*x + 2';
>> eval(['h = @(x) ' expression])  % put this in your function
h = 
    @(x)x^2+5*x+2

str2func,(感谢Luis Mendo)

h = str2func(['@(x)' expression])

无论哪种方式都不太漂亮,因此我的建议只是传递一个句柄。