44 views (last 30 days)

My problem is one function passing to me a Anonymous function handle, for example,

f_handle = function1(a1,a2,....)

% Assuming f_handle = @(x,y) [a*(x+y),b*(x-y)], a and be are unknown parameters

As I only get this handle, (and I know there are two unknown parameters of a and b), now I want to change (set) the parameter values of a and b, I don't know how to do it.

b=1; a=1:10;

x = 1; y =2;

for i=1:10

% how to passing a(i) and b in the anonymouos function

mm{i} = f_handle(x,y);

end

Should I redefine a anonymous function or by other way?

madhan ravi
on 14 Jul 2020

Edited: madhan ravi
on 14 Jul 2020

b = 1;

a = 1:10;

x = 1;

y = 2;

mm = cell(1, 10);

f_handle = @(x,y,a,b) [a*(x+y),b*(x-y)];

for ii = 1:10

mm{ii} = f_handle(x,y,a(ii),b);

end

celldisp(mm)

madhan ravi
on 15 Jul 2020

n = 1; % predefined

f = @(x) x^n

F = func2str(f);

str = regexprep(F,'.*\)','');

SYM = str2sym(str);

"Input in the order of" + char(symvar(SYM))

F_handle = matlabFunction(SYM)

F_handle(2,3) % 2 assigned to n

madhan ravi
on 15 Jul 2020

n = 1;

m = 2;

save m

f = @(x) x^n+m

F = func2str(f);

str = regexprep(F,'.*\)','');

SYM = str2sym(str);

syms(symvar(SYM))

clear m

load m

subs(subs(SYM, {x,n},{2,3}))

Steven Lord
on 14 Jul 2020

Once you've created an anonymous function handle that "remembers" a particular value, you cannot change that "remembered" value. You would need to recreate the function handle to change it.

n = 2;

f = @(x) x.^n; % n is locked into the value 2 at this point

y1 = f(3) % 9

n = 4;

y2 = f(3) % still 9 not 3^4 = 81

f = @(x) x.^n; % Recreating f "remembers" the new value of n

y3 = f(3) % 81

If you have a value that you want to be able to change, you should probably have the anonymous function accept it. You could, if you need a function with a specific signature, write an adapter. In the example below g accepts both x and n, while f2 and f3 fix specific values for n but make use of g to compute their results.

g = @(x, n) x.^n;

f2 = @(x) g(x, 2);

f3 = @(x) g(x, 3);

Steven Lord
on 15 Jul 2020

madhan ravi
on 15 Jul 2020

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

Start Hunting!
## 0 Comments

Sign in to comment.