Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this function
lmisolver
LMIソルバー
呼び出し手順
[XLISTF[,OPT]] = lmisolver(XLIST0,evalfunc [,options])
パラメータ
- XLIST0
- 初期推定値を有するリスト (例: - XLIST0=list(X1,X2,..,Xn))
- evalfunc
- Scilab関数 (指定した構文を有する"external" 関数) - 関数 - evalfuncの構文は以下のようになります:- [LME,LMI,OBJ]=evalfunct(X)ただし,- Xは行列のリストです,- LME, LMIはリストでa- OBJは実数スカラーです.
- XLISTF
- 行列のリスト (例: - XLIST0=list(X1,X2,..,Xn))
- options
- オプションのパラメータ. 指定された場合, - optionsは 5つの要素- [Mbound,abstol,nu,maxiters,reltol]を有する実数行ベクトルです.
説明
lmisolver は以下の問題を解きます:
minimize f(X1,X2,...,Xn) Xiの線形関数
拘束条件: Gi(X1,X2,...,Xn)=0
            ただし, i=1,...,p および LMI (linear matrix inequalities) 拘束条件:
Hj(X1,X2,...,Xn) > 0 for j=1,...,q
関数 f, G, H は,Scilab 関数evalfuncおよび
            リストX (すなわち,X=list(X1,...,Xn))に基づく行列の集合 Xiで
            コード化されます.
関数evalfun は,リストLMEに
            行列G1(X),...,Gp(X)
            (すなわち,LME(i)=Gi(X1,...,Xn), i=1,...,p)を返す必要があります.
            evalfunは,リストLMIに
            行列H1(X0),...,Hq(X)(すなわち,
            LMI(j)=Hj(X1,...,Xn), j=1,...,q)を返す必要があります.
            evalfun は, OBJ に
            f(X)(すなわち,OBJ=f(X1,...,Xn))の値を返す
            必要があります.
lmisolver はXLISTFに,
            実数行列のリスト,すなわち,XLIST=list(X1,X2,..,Xn)
            を返します.ただし,Xiについて解くのはLMI問題です:
[Y,Z,cost]=evalfunc(XLIST), Y
            はゼロ行列のリストです, Y=list(Y1,...,Yp),
            Y1=0, Y2=0, ..., Yp=0.
Z は,正方対称行列のリスト
            Z=list(Z1,...,Zq) で, 半正定
            Z1>0, Z2>0, ..., Zq>0 です(すなわち
            spec(Z(j)) > 0),
cost は最小化されます.
lmisolver は,
            Xiが行列ではなく行列のリストである
            LMI問題を解くこともできます.
            より詳細については,LMITOOLのドキュメントで参照可能です.
例
// A1'*X+X*A1+Q1 < 0, A2'*X+X*A2+Q2 < 0 (q=2) となるような // 対角行列 X (すなわち X=diag(diag(X), p=1) を見つけます. // trace(X) は最大化されます. n = 2; A1 = rand(n,n); A2 = rand(n,n); Xs = diag(1:n); Q1 = -(A1'*Xs+Xs*A1+0.1*eye()); Q2 = -(A2'*Xs+Xs*A2+0.2*eye()); deff('[LME,LMI,OBJ]=evalf(Xlist)','X = Xlist(1); ... LME = X-diag(diag(X));... LMI = list(-(A1''*X+X*A1+Q1),-(A2''*X+X*A2+Q2)); ... OBJ = -sum(diag(X)) '); X=lmisolver(list(zeros(A1)),evalf); X=X(1) [Y,Z,c]=evalf(X)
参照
- lmitool — LMIを解くためのツール
| Report an issue | ||
| << aplat | Semidefinite Programming | lmitool >> |