Maximize function with fminsearch
function, mathematical-optimization, matlab
Solution
Well, not using fminsearch directly, but if you are willing to download fminsearchbnd from the file exchange, then yes. fminsearchbnd does a bound constrained minimization of a general objective function, as an overlay on fminsearch. It calls fminsearch for you, applying bounds to the problem.
Essentially the idea is to transform your problem for you, in a way that your objective function sees as if it is solving a constrained problem. It is totally transparent. You call fminsearchbnd with a function, a starting point in the parameter space, and a set of lower and upper bounds.
For example, minimizing the rosenbrock function returns a minimum at [1,1] by fminsearch. But if we apply purely lower bounds on the problem of 2 for each variable, then fminsearchbnd finds the bound constrained solution at [2,4].
rosen = @(x) (1-x(1)).^2 + 105*(x(2)-x(1).^2).^2;
fminsearch(rosen,[3 3]) % unconstrained
ans =
1.0000 1.0000
fminsearchbnd(rosen,[3 3],[2 2],[]) % constrained
ans =
2.0000 4.0000
If you have no constraints on a variable, then supply -inf or inf as the corresponding bound.
fminsearchbnd(rosen,[3 3],[-inf 2],[])
ans =
1.4137 2
Problem
Within my daily work, I have got to maximize a particular function making use of `fminsearch`; the code is: ``` clc clear all close all f = @(x,c,k) -(x(2)/c)^3*(((exp(-(x(1)/c)^k)-exp(-(x(2)/c)^k))/((x(2)/c)^k-(x(1)/c)^k))-exp(-(x(3)/c)^k))^2; c = 10.1; k = 2.3; X = fminsearch(@(x) f(x,c,k),[4,10,20]); ``` It works fine, as I expect, but not the issue is coming up: I need to bound x within certain limits, as: ``` 4 < x(1) < 5 10 < x(2) < 15 20 < x(3) < 30 ``` To achieve the proper results, I should use the optimization toolbox, that I unfortunately cannot hand. Is there any way to get the same analysis by making use of only fminsearch?