繁体   English   中英

在父函数的输入之外创建函数句柄?

[英]Creating a function handle out of the input of the parent function?

如果答案是显而易见的,或者有更好的方法,请原谅我。

我正在尝试制作一个接受x函数的函数(例如x ^ 2 + 5x + 2),并使用该输入来创建函数句柄。 这样,我可以将该函数用于需要执行的其他任何操作。

我认为问题仅在于我不知道所有不同的函数类型是什么,而且我不明白如何正确地“连接”“ @(x)”和输入函数以构成函数句柄。

这是我尝试过的:

function test(input1)

function_1 = @(x) + input1

end

它说input1的类型为double,即使只是一个字母也是如此。

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

任何帮助将不胜感激,谢谢。

传递字符串可能无法满足您的要求,否则会变得很丑陋。

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

>> 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 str2func

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

无论哪种方式都不太漂亮,因此我建议仅传递一个手柄。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM