Finding out the size of x (so how many xi we have) in a function handle
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Daniela Würmseer
el 3 de Mzo. de 2022
Comentada: Daniela Würmseer
el 4 de Mzo. de 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 comentarios
Respuesta aceptada
Matt J
el 3 de Mzo. de 2022
One possibility,
f1 = @(x) x(1)^2+x(2)^2+x(2)+x(3);
str = extractBetween( func2str(f1),'x(',')');
dimension=max(str2double(str))
Más respuestas (3)
Steven Lord
el 3 de Mzo. de 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 comentarios
Matt J
el 3 de Mzo. de 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 comentarios
David Hill
el 3 de Mzo. de 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 comentarios
Ver también
Categorías
Más información sobre Elementary Math en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!