how to use function handles
    10 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
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?
Akzeptierte Antwort
  Yongjian Feng
    
 am 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
7 Kommentare
  Stephen23
      
      
 am 30 Aug. 2021
				"what is the main difficulty to make (or reason not to make) it possible in the Editor to higlight structure name with its field throughout a function like it occurs with simple variables when you click on it or select it?"
You have to consider that variables in MATLAB are dynamically typed. In general it is difficult to determine the type of a variable until runtime (e.g. changes to function scoping, variables created dynamically, inputs are not typed, etc.)
Weitere Antworten (1)
  the cyclist
      
      
 am 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)
4 Kommentare
  the cyclist
      
      
 am 29 Aug. 2021
				Searching keywords such as conditional anonymous function MATLAB turns up a lot of these same ideas. I did not find a great solution.
Siehe auch
Kategorien
				Mehr zu Entering Commands finden Sie in Help Center und File Exchange
			
	Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



