MATLAB Answers

I'm getting an error related to fmincon

1 view (last 30 days)
Zeynep  Toprak
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?

  3 Comments

Torsten
Torsten on 29 Mar 2020
What do mean by "largest eigenvalue" ? The largest real-valued eigenvalue or the eigenvalue largest in magnitude ?
Zeynep  Toprak
Zeynep Toprak on 29 Mar 2020
I guess you asked behind its math. Okay, I can explain as follows:
Zeynep  Toprak
Zeynep Toprak on 29 Mar 2020
Is this explanation and solution enough?

Sign in to comment.

Accepted Answer

Ameer Hamza
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);

  9 Comments

Show 6 older comments
Zeynep  Toprak
Zeynep Toprak on 29 Mar 2020
This is correct when I compare it with what I solve by other ways.

Sign in to comment.

More Answers (1)

Torsten
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

  4 Comments

Show 1 older comment
Torsten
Torsten on 29 Mar 2020
The error was corrected in the meantime.
Zeynep  Toprak
Zeynep Toprak on 29 Mar 2020
yeah, it works!! Many many thankss!! Take care of yourself! :))

Sign in to comment.