define an objective function with user defined number of variables in fminunc()
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Shikun Nie
el 17 de En. de 2025
Suppose I want to define the following function in matlab which returns the output of fminunc(). The problem here is the number of variables depends on the user input. How do I define the objective function fun() such that it automatically adapts to the number of variables.
function xmin = problem(n)
if n == 1
fun = @(x) x^2+2*x+3;
xmin = fminunc(fun,1);
end
if n == 2
fun = @(x) x(1)^2+x(2)^2+2*(x(1)+x(2))+3;
xmin = fminunc(fun,[1 0]);
end
if n == 3
fun = @(x) x(1)^2+x(2)^2+x(3)^2+2*(x(1)+x(2)+x(3))+3;
xmin = fminunc(fun,[1 0 0]);
end
% n is the number of variables for fun.
% the list goes on. n==4, n==5,...
end
0 comentarios
Respuesta aceptada
Matt J
el 17 de En. de 2025
Editada: Matt J
el 17 de En. de 2025
The only way fminunc knows the number of variables is by looking at numel(x0) where x0 is the initial guess:
xmin = fminunc(fun,x0)
It doesn't look at fun in any way to determine that. So, your current code should be fine.
You could make your initial guess a function of n in some way. Looking at the pattern you have now, you could modify to the following, but it seems to me that the benefit is marginal.
function xmin = problem(n)
x0=[1,zeros(1,n-1)];
switch n
case n=1
fun = @(x) x^2+2*x+3;
case n=2
fun = @(x) x(1)^2+x(2)^2+2*(x(1)+x(2))+3;
case n=3
fun = @(x) x(1)^2+x(2)^2+x(3)^2+2*(x(1)+x(2)+x(3))+3;
end
xmin = fminunc(fun,x0);
end
Más respuestas (2)
Catalytic
el 17 de En. de 2025
In the narrow case where your fun is always going to be an anonymous function of x, you could do this -
xmin=problem( @(x) x(1)^2+x(2)^2+x(3)^2+2*(x(1)+x(2)+x(3))+3 )
function xmin = problem(fun)
n=numel( unique(extract(func2str(fun) , "x(" + digitsPattern+")")) );
x0=[1,zeros(1,n-1)]
xmin = fminunc(fun,x0 ,optimoptions('fminunc','Display','off') );
end
0 comentarios
Ver también
Categorías
Más información sobre Startup and Shutdown 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!