Finding out the size of x (so how many xi we have) in a function handle
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Daniela Würmseer
il 3 Mar 2022
Commentato: Daniela Würmseer
il 4 Mar 2022
Hello, if i have fore example the following function
f1 = @(x) x(1)^2+x(2)^2;
can we somehow find out the "size" of x? So with size of x i mean how many x Variables we have so in this example 2: x=(x(1),x(2))
f1 = @(x) x(1)^2+x(2)^2+x(2)+x(3);
And in this example the size of x would be three.
Thank you.
0 Commenti
Risposta accettata
Matt J
il 3 Mar 2022
One possibility,
f1 = @(x) x(1)^2+x(2)^2+x(2)+x(3);
str = extractBetween( func2str(f1),'x(',')');
dimension=max(str2double(str))
Più risposte (3)
Steven Lord
il 3 Mar 2022
If you're doing this so you can dynamically generate the body of f that computes the sum of the squares of the elements of the input, you don't need to.
f = @(x) sum(x.^2);
f([1 2])
f([3 4 5])
f([6 7 8 9])
If you wanted f to have multiple inputs:
g = @(varargin) sum([varargin{:}].^2)
g(1, 2)
g(3, 4, 5)
g(6, 7, 8, 9)
0 Commenti
Matt J
il 3 Mar 2022
No, not from the function handle itself. Note that your f1 and f2 work for vectors of any length>3, e.g.,
f1 = @(x) x(1)^2+x(2)^2;
f1(1:5)
f1(rand(1,7))
so f1 does cannot know the size of the vector you're giving it.
0 Commenti
David Hill
il 3 Mar 2022
g=@(x)f1(x);
g([1 2 3])
g([1 5])
function y=f1(x)
if length(x)==2
y=x(1)^2+x(2)^2;
elseif length(x)==3
y=x(1)^2+x(2)^2+x(2)+x(3);
end
end
0 Commenti
Vedere anche
Categorie
Scopri di più su Elementary Math in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!