Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - Русский

Please note that the recommended version of Scilab is 6.0.1. This page might be outdated.
See the recommended documentation of this function

Scilab help >> Optimization and Simulation > Semidefinite Programming > lmisolver

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 は, OBJf(X)(すなわち,OBJ=f(X1,...,Xn))の値を返す 必要があります.

lmisolverXLISTFに, 実数行列のリスト,すなわち,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を解くためのツール
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Oct 01 17:40:32 CEST 2012