簡體   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