Finding out the size of x (so how many xi we have) in a function handle
조회 수: 2 (최근 30일)
이전 댓글 표시
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
채택된 답변
Matt J
2022년 3월 3일
One possibility,
f1 = @(x) x(1)^2+x(2)^2+x(2)+x(3);
str = extractBetween( func2str(f1),'x(',')');
dimension=max(str2double(str))
추가 답변 (3개)
Steven Lord
2022년 3월 3일
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
Matt J
2022년 3월 3일
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
David Hill
2022년 3월 3일
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
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!