Evaluating function handles without writting inputs

조회 수: 10 (최근 30일)
pooya azizi
pooya azizi 2024년 4월 6일
답변: Rik 2024년 4월 9일
Hi. I want to write a code that call some function handles from another code. after loading them,I want to evaluate them (means that substitute the amount of inputs in function handles) accoeding to inputs introduced at the first lines of code.
because the number of function handles is large, I prefer to call and evaluate them only with the name of functions not by name and inputs, although the inputs have introduced before (all functions have inputs). a simple example is:
x=5;y=10;
f=@(x,y) x.^2+y.^2;
now evaluate f only with calling name not inputs. for example
eval(f)
Does anyone have any suggestions for this؟
  댓글 수: 7
pooya azizi
pooya azizi 2024년 4월 6일
I answered your questions. Please look above
Shadow
Shadow 2024년 4월 9일
Why don't you store your data in a structure, that can be passed around?
data.x = 3;
data.y = 2;
f = @(data) data.x^2 + data.y^2;
f(data)
ans = 13

댓글을 달려면 로그인하십시오.

답변 (1개)

Rik
Rik 2024년 4월 9일
The only way I can think of would be by wrapping the anonymous functions.
x=5;y=10;
f=@(x,y) x.^2+y.^2;
f=@() f(x,y);
phi = 1.5*pi;
g=@(phi) sin(phi)/(2*cos(phi));
g=@() g(phi);
feval(f)
ans = 125
feval(g)
ans = 2.7219e+15
If the idea is to cache the inputs, you should use normal functions with persistent variables:
x=5;y=10;
f_(x,y)
f_
ans = 125
function z=f_(x,y)
persistent p
if nargin>0
p.x = x;
p.y = y;
return
else
if isempty(p)
error('initialise function first')
end
x = p.x;
y = p.y;
end
z = x.^2+y.^2;
end

카테고리

Help CenterFile Exchange에서 Function Creation에 대해 자세히 알아보기

제품


릴리스

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by