Finding out the size of x (so how many xi we have) in a function handle
2 views (last 30 days)
Show older comments
Daniela Würmseer
on 3 Mar 2022
Commented: Daniela Würmseer
on 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 Comments
Accepted Answer
Matt J
on 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))
More Answers (3)
Steven Lord
on 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 Comments
Matt J
on 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 Comments
David Hill
on 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 Comments
See Also
Categories
Find more on Elementary Math in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!