may be this way could be better:

function A = function1(n,S)

A = n + S.a + S.b + S.c + S.d;

end

function A = function2(n,S)

A = n*S.a*S.b;

end

7 views (last 30 days)

Show older comments

Instead of the following, I want to use function handles and move if-statments out of the loop:

for n=1:10

if a==0

A = function2(n,a,b);

else

A = function1(n,a,b,c,d);

end

end

function A = function1(n,a,b,c,d)

A = n+a+b+c+d; % here it can be any expression

end

function A = function2(n,a,b)

A = n*a*b; % here it can be any expression

end

moving if-statement outside of the loop and using handles:

if a==0

func = @function2;

else

func = @function1;

end

and then I can solve my problem in two ways as

for n=1:10

A = func(n,a,b,c,d);

end

function A = function1(n,a,b,c,d)

A = n+a+b+c+d;

end

function A = function2(n,a,b,~,~)

A = n*a*b;

end

or as

for n=1:10

A = func(n,a,b,c,d)

end

function A = function1(n,a,varargin)

b = varargin{1};

c = varargin{2};

d = varargin{3};

A = n+a+b+c+d;

end

function A = function2(n,a,varargin)

b = varargin{1};

A = n*a*b;

end

Is there any more elegant way to do this?

Yongjian Feng
on 29 Aug 2021

You don't need varargin

function A = function1(n,a,b, c, d)

A = n+a+b+c+d;

end

function A = function2(n,a,b, ~, ~)

A = n*a*b;

end

the cyclist
on 29 Aug 2021

I think the basic idea you need is

f1 = @(x) x;

f2 = @(x) x.^2;

f = @(a,x) (a~=0)*f1(x) + (a==0)*f2(x);

f(0,2)

f(1,2)

the cyclist
on 29 Aug 2021

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

Start Hunting!