I have a function handle as given below
f = @(x1,x2) x1*x2
and I want to change variable name to
f = @(x) x(1)*x(2)
Please help me
Thanks
PS: The function is just for illustration purpose

1 件のコメント

Marco Aurélio
Marco Aurélio 2024 年 7 月 9 日
Hello Matlab mate.
I think you must redefine de function handle just rewriting like this:
f=@(x) prod(x);

サインインしてコメントする。

 採用された回答

Stephan
Stephan 2019 年 2 月 25 日
編集済み: Stephan 2019 年 2 月 25 日

1 投票

Hi,
for me this worked:
f = @(x1,x2) x1*x2
f = string(char(f));
f = replace(f,"@(x1,x2)","@(x)");
f = replace(f,["x1","x2"],["x(1)","x(2)"]);
f = str2func(f)
result is:
f =
function_handle with value:
@(x1,x2)x1*x2
f =
function_handle with value:
@(x)x(1)*x(2)
Best regards
Stephan

2 件のコメント

madhan ravi
madhan ravi 2019 年 2 月 25 日
編集済み: madhan ravi 2019 年 2 月 25 日
stephen what if there are 100 inputs to the function handle? it would be not a good idea
Stephan
Stephan 2019 年 2 月 25 日
編集済み: Stephan 2019 年 2 月 25 日
You are right. But i think this function is worth to be shown here as an alternative for small examples. Maybe it is not the best / most efficient solution here. Yours is pretty nice - but the OP asked for how to replace variable names in a function handle - this is what i was answering to.

サインインしてコメントする。

その他の回答 (1 件)

madhan ravi
madhan ravi 2019 年 2 月 25 日

1 投票

Instead of converting it to your later need convert the vector as comma separated list using num2cell():
x=rand(1,2); % example vector
X=num2cell(x);
f(X{:}) % pass the vector all at once

カテゴリ

ヘルプ センター および File Exchange で Environment and Settings についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by