# Multi-function optimization

6 views (last 30 days)
Marius Adom on 3 Dec 2019
Commented: Marius Adom on 4 Dec 2019
Hi.
I have a function f(x,a) where a is a parameter that is exogenously provided. I want to minimize f(x,a) for different values of a (a1 a2 a3 ...) independently. Is there any way to do that without using a for loop ?
If I consider defining f(x,[a1 a2 a3 ...]) as a multidimensional:
function f = obj(x,a)
f(1) = f(x,a1);
f(2) = f(x,a2);
f(3) = f(x,a3);
.
.
.
end
and then minimize f by providing the vector a=[a1 a2 a3 ...], Matlab will not consider the components of the function as independent as I want. Do you have any solution ?
Thank you.

#### 1 Comment

Walter Roberson on 3 Dec 2019
You can hide the loop with arrayfun but otherwise you should still be using a loop of some kind as the objectives are independent.

Matt J on 3 Dec 2019
Edited: Matt J on 3 Dec 2019
You would need something like the following,
allX = fminunc(@(x)obj(x,a),x0,options);
delta=1e-6;
f0=getfs(x,a);
ftotal=sum(f0);
if nargout>1
end
end
function f=getfs(x,a)
f(1) = f(x(1),a(1));
f(2) = f(x(2),a(2));
f(3) = f(x(3),a(3));
.
.
.
end
You could also of course implement an analytic version of the gradient calculation, instead of using finite differences.
However, you should keep in mind that a for-loop may be advantageous if the a(i) are separated by small increments. That usually means that the optimal solution x(i) is a good initial guess of x(i+1), so you don't have to do as many iterations in the next pass of the for-loop..

Marius Adom on 3 Dec 2019
OK. I see. Thank you Waltler Roberson.
Matt J on 4 Dec 2019
But, then, is it sure the fminunc is minimizing the components of f independently ?
As you can see, the objective function we have defined in the above scheme is additively separable: it is the sum of independent terms f(x(i),a(i)) and therefore the minimization of the sum is equivalent to minimizing each f((xi),a(i)) independently.
Marius Adom on 4 Dec 2019
OK. You are right. Thank you Matt.