1

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] に等しいときにエラーがスローされるため、インデックス作成エラーが発生します。このスレッドの OP が行の前 (qpsub 内) で使用したハックに似ています。

ACTSET = A(ACTIND,:);

私はif文を入れます:

    if max(ACTIND) < 1
        ACTIND = [1];
    end

予備テストから、これは問題を「修正」しているようです。エラーをスローしていた入力に対して適切な結果が得られ (適切な最小値が返され、制約が許容範囲内で満たされているという点で)、エラー (明らかに、if ステートメントは呼び出されないため)。だから私の質問は、これらの関数の内部の仕組みを知っている人にとって、これはどれほど悪いことですか? ACTIND が [0] であってはならないという恐ろしい問題を回避しているのでしょうか?

4

0 に答える 0