Using fmincon to maximize a complex scalar function

1 次查看(过去 30 天)
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?

采纳的回答

Walter Roberson
Walter Roberson 2022-10-14
编辑:Walter Roberson 2022-10-14
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.

更多回答(1 个)

Matt J
Matt J 2022-10-14
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!

Translated by