How to compute cost function for fmincon?

Hi all, I'm performing an optimization using fmincon as follows:
r=[0.22 9.94 0.08;
0.16 0.95 0.08;
0.07 0.87 0.08];
R = [0.49; 0.42; 0.19];
x = fmincon(@(x) norm(r*x-R)^2, ones(3,1)/3, [], [], ones(1,3), 1, zeros(3,1), []);
Here, I wan to use a cost function for this optimization.
where , and x is a vector of initial guess values.
Could you somebody help me with this?

1 Comment

The cost function you have shown is vector-valued. Do you mean to minimize its Euclidean norm?

Sign in to comment.

 Accepted Answer

Matt J
Matt J on 21 Sep 2020
Edited: Matt J on 21 Sep 2020
r=[0.22 9.94 0.08;
0.16 0.95 0.08;
0.07 0.87 0.08];
R = [0.49; 0.42; 0.19];
omega=0.1;
gamma=150;
fun=@(x) norm( (r*x-R) + omega*(1-tanh(x*gamma)-gamma*tanh(x-1) ) )^2 ;
x = fmincon(@(x) fun, ones(3,1)/3, [], [], ones(1,3), 1, zeros(3,1), []);

4 Comments

Thanks, Matt, but I got an error:
"Error using fmincon (line 710)
FMINCON requires all values returned by functions to be of data type double."
How can I solve this error?
Running this test,
clear
r=[0.22 9.94 0.08;
0.16 0.95 0.08;
0.07 0.87 0.08];
R = [0.49; 0.42; 0.19];
omega=0.1;
gamma=150;
fun=@(x) norm( (r*x-R) + omega*(1-tanh(x*gamma)-gamma*tanh(x-1) ) )^2 ;
funx0=fun(ones(3,1)/3)
should give the result,
funx0 =
291.1478
Yes, this works fine.
Now it works fine with
r=[0.22 9.94 0.08;
0.16 0.95 0.08;
0.07 0.87 0.08];
R = [0.49; 0.42; 0.19]
omega=0.1;
gamma=150;
x = fmincon(@(x) norm( r*x-R + omega*(1-tanh(x*gamma)-tanh((x-1)*gamma)) )^2, ones(3,1)/3, [], [], ones(1,3), 1, zeros(3,1), []);

Sign in to comment.

More Answers (0)

Asked:

on 21 Sep 2020

Edited:

on 21 Sep 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!