使用fmincon时出现了一个奇怪的错误。有关目标函数和非线性约束函数的详细信息很多,所以如果可能的话,我将尝试提出这个问题而不进行描述。
最小化需要单个输入。对于某些但不是所有输入,我收到以下错误:
Subscript indices must either be real positive integers or logicals.
Error in qpsub>eqnsolv (line 888)
ACTSET = A(ACTIND,:);
Error in qpsub (line 157)
[Q,R,A,B,X,Z,how,ACTSET,ACTIND,ACTCNT,aix,eqix,neqcstr,ncstr, ...
Error in nlconst (line 619)
[SD,lambda,exitflagqp,outputqp,howqp,ACTIND] ...
Error in fmincon (line 794)
[X,FVAL,LAMBDA,EXITFLAG,OUTPUT,GRAD,HESSIAN]=...
Error in PauliApproximate2.unitalChannelApproximate (line 170)
[pc, distance] = fmincon(@objective,x0, A, b, Aeq, beq,lb,ub, @constraint,
options);
当我检查ACTIND的值时,如果它等于[0]则抛出错误,因此索引错误。类似于this thread的OP在行之前(在qpsub中)
的黑客攻击ACTSET = A(ACTIND,:);
我把if语句:
if max(ACTIND) < 1
ACTIND = [1];
end
从初步测试来看,这似乎是“解决”问题。它为那些用于抛出错误的输入提供了明智的结果(因为它返回了一个良好的最小值,并且约束在公差范围内得到满足),并且返回与它一直没有的输入相同的结果。错误(显然,因为不会调用if语句)。所以我的问题是,对于那些了解这些功能的内部运作的人来说,这有多糟糕?我是否回避了一个可怕的问题,导致ACTIND为[0],我不应该这样做?