Using fmincon to maximize a complex scalar function

3 views (last 30 days)
N = 1;
h = sqrt(0.5)*(randn(1,N)+1i*randn(1,N));
g = sqrt(0.5)*(randn(N,1)+1i*randn(N,1));
phi0 = zeros(N,1);
lb = zeros(N,1);
ub = 2*pi*ones(N,1);
obj = @(phi)-((h*diag(exp(1i*phi))*g));
[sol,fval] = fmincon(obj,phi0,[],[],[],[],lb,ub)
Error using barrier
Objective function is undefined at initial point. Fmincon cannot continue.

Error in fmincon (line 886)
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = barrier(funfcn,X,A,B,Aeq,Beq,l,u,confcn,options.HessFcn, ...
phi1 = -(angle(h)+angle(g.'));
If in the above code i am trying to maximize ((h*diag(exp(1i*phi))*g)) where all h,g are complex scalar. Why matlab is giving such error, is it because objective function is complex, or some other reason?

Accepted Answer

Walter Roberson
Walter Roberson on 14 Oct 2022
Edited: Walter Roberson on 14 Oct 2022
Function to minimize, specified as a function handle or function name. fun is a function that accepts a vector or array x and returns a real scalar f, the objective function evaluated at x.
So, yes, the fact that the objective function is complex is a problem. The maximum of complex numbers is not mathematically defined.
Are you trying to find something like the vector that is "most orthagonal" to the inputs ? If so then you should consider the square of the norm.

More Answers (1)

Matt J
Matt J on 14 Oct 2022
It is because your objective is returning a complex value at phi0.
>> obj(phi0)
ans =
1.3978 + 1.8395i

Community Treasure Hunt

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

Start Hunting!