# I'm getting an error related to fmincon

2 views (last 30 days)
Zeynep Toprak on 29 Mar 2020
Commented: Ameer Hamza on 29 Mar 2020
Question is this;
My matlab code is as follows:
%Define Matrices
>> M = magic(5);
>> P = pascal (5);
% Define the variable x
>> syms x
%Define the given matrix A
>> A = x*M + (1-x)*P;
%Define the eigenvalue lambda as y;
>> syms y
%Find determinant of |A - lambda * I|
>> D = det (A - y*eye(5))
%Define Objective function
objective = @(y) y
%And Define the constraint
constraint = @(x,y) (-1)*D
%initial value x0 = (0:0.001:1);
%Minimization problem solving
x = fmincon(objective, constraint, x0)
I get this error;
Error using fmincon (line 221)
FMINCON requires the following inputs to be of data type double: 'X0'.
If I use another function: fminsearch
x = fminsearch(objective, constraint, x0)
In this case I get the following error:
Error using fminsearch (line 96)
FMINSEARCH accepts inputs only of data type double.
How can I deal with these errors ? Where is my mistake? How can I correct them?
Zeynep Toprak on 29 Mar 2020
Is this explanation and solution enough?

Ameer Hamza on 29 Mar 2020
This is an example with fmincon
M = magic(5);
P = pascal (5);
f = @(x) max(abs(eig(x*M + (1-x)*P)));
x_sol = fmincon(f, rand, [], [], [], [], 0, 1);
Ameer Hamza on 29 Mar 2020

Torsten on 29 Mar 2020
Edited: Torsten on 29 Mar 2020
If you mean the eigenvalue largest in magnitude, this should give you a start.
Incorporating fmincon can automatize the search for an optimal x.
M=magic(5);
P=pascal(5);
A=@(x) x*M+(1-x)*P;
x=0:0.02:1;
for i=1:numel(x)
d(i) = abs( eigs(A(x(i)),1) );
end
[dmin,idd] = min(d);
x(idd) %show x for which eigenvalue largest in magnitude is minimum
Zeynep Toprak on 29 Mar 2020
yeah, it works!! Many many thankss!! Take care of yourself! :))