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 >> CACSD > linmeq

linmeq

シルベスタおよびリアプノフ方程式ソルバー

呼び出し手順

[X(,sep)] = linmeq(task,A,(B,)C,flag,trans(,schur))

パラメータ

task

方程式の型を定義する整数オプション:

=1

シルベスタ方程式(1a) または (1b)を解きます ;

=2

リアプノフ方程式(2a) または (2b)を解きます;

=3

コレスキー分解 op(X) リアプノフ方程式 (3a) または (3b)を解きます.

A

実数行列

B

実数行列

C

実数行列

flag

(オプション) オプションを含む長さ3または2の整数ベクトル.

task

= 1 : flag の長さは3です

flag(1)

= 0 : 連続時間方程式 (1a)を解きます; そうでない場合, 離散時間方程式 (1b)を解きます.

flag(2)

= 1 : A は (準) 上三角行列です;

flag(2)

= 2 : A は上ヘッセンベルグ行列です;

それ以外

A は一般形式です.

flag(3)

= 1 : B は準上三角行列です;

flag(3)

= 2 : B は上ヘッセンベルグ行列です;

それ以外,

B は一般形式です.

task

= 2 : flag の長さは2です

flag(1)

0の場合, 連続時間方程式 (2a)を解きます; そうでない場合, 離散時間方程式 (2b)を解きます.

flag(2)

= 1 : A は (準) 上三角行列, それ以外の場合, A は一般形式です.

task

= 3 : flag hの長さは2です

flag(1)

= 0 : 連続時間方程式 (3a)を解きます; そうでない場合, 離散時間方程式 (3b)を解きます.

flag(2)

= 1 : A は (準) 上三角行列, それ以外の場合, A は一般形式です.

デフォルト: flag(1) = 0, flag(2) = 0 (, flag(3) = 0).

trans

(オプション) 転置オプションを指定する整数.

=

0 : op(M) = Mとして方程式 (1) - (3) を解きます.

=

1 : op(M) = M' として方程式 (1) - (3) を解きます.

=

2 : op(A) = A'; op(B) = B; として方程式 (1) を解きます.

=

3 : op(A) = A; op(B) = B'; として方程式 (1) を解きます.

デフォルト: trans = 0.

schur

(オプション) Hessenberg-Schur法またはSchur法のどちらを 使用するかを指定する整数. task = 1 で使用可能.

= 1 : Hessenberg-Schur 法

(1個の行列がSchur形式に縮減されます).

= 2 : Schur 法

(2個の行列がSchur形式に縮減されます).

デフォルト: schur = 1.

X

sep

(オプション) (2.a)の場合 Sep(op(A),-op(A)'), (2.b)の場合 Sepd(A,A') の推定器.

説明

linmeq 関数は, SLICOT ルーチンSB04MD, SB04ND, SB04PD, SB04QD, SB04RD, SB03MD, および SB03ODを用いて シルベスターおよびリアプノフ方程式を解きます.

[X] = linmeq(1,A,B,C,flag,trans,schur)
[X,sep] = linmeq(2,A,C,flag,trans)
[X] = linmeq(2,A,C,flag,trans)
[X] = linmeq(3,A,C,flag,trans)

linmeq は種々のシルベスタおよびリアプノフ行列方程式を解きます:

op(A)*X + X*op(B) = C,                           (1a)

op(A)*X*op(B) + X = C,                           (1b)

op(A)'*X + X*op(A) = C,                          (2a)

op(A)'*X*op(A) - X = C,                          (2b)

op(A)'*(op(X)'*op(X)) + (op(X)'*op(X))*op(A) =
                      -  op(C)'*op(C),           (3a)

op(A)'*(op(X)'*op(X))*op(A) - op(X)'*op(X) =
                            - op(C)'*op(C),      (3b)

ただし op(M) = M, または M'です.

コメント

1.

(1a) または (1b)の場合でschur = 1の時, Hessenberg-Schur法が使用され,1個の行列は ヘッセンベルク形式, その他の1個の行列は実数Schur形式に縮減されます. その他の場合, 行列は両方共実数Schur形式に縮減されます. 1個または両方の行列がすでにSchur/Hessenberg形式に縮減されている場合, flag(2) およびflag(3)でこのことを指定することができます. 一般的な行列の場合,Hessenberg-Schur法は Schur法よりもはるかに効率的です.

2.

方程式 (2a) または (2b)において, 行列 C は対称と仮定されます.

3.

方程式 (3a) または (3b)において, 行列 A はそれぞれ安定または 収束性を有する必要があります.

4.

方程式 (3a) または (3b)の場合, 計算される行列 X は 解のコレスキー分解です, すなわち, 実際の解は op(X)'*op(X), ただし X は上三角行列です.

履歴

V. Sima, Katholieke Univ. Leuven, Belgium, May 1999, May, Sep. 2000. V. Sima, University of Bucharest, Romania, May 2000.

//(1a)
n=40;m=30;
A=rand(n,n);C=rand(n,m);B=rand(m,m);
X = linmeq(1,A,B,C);
norm(A*X+X*B-C,1)
//(1b)
flag=[1,0,0]
X = linmeq(1,A,B,C,flag);
norm(A*X*B+X-C,1)
//(2a)
A=rand(n,n);C=rand(A);C=C+C';
X = linmeq(2,A,C);
norm(A'*X + X*A -C,1)
//(2b)
X = linmeq(2,A,C,[1 0]);
norm(A'*X*A -X-C,1)
//(3a)
A=rand(n,n);
A=A-(max(real(spec(A)))+1)*eye(); //shift eigenvalues
C=rand(A);
X=linmeq(3,A,C);
norm(A'*X'*X+X'*X*A +C'*C,1)
//(3b)
A = [-0.02, 0.02,-0.10, 0.02,-0.03, 0.12;
      0.02, 0.14, 0.12,-0.10,-0.02,-0.14;     
     -0.10, 0.12, 0.05, 0.03,-0.04,-0.04;     
      0.02,-0.10, 0.03,-0.06, 0.08, 0.11;      
     -0.03,-0.02,-0.04, 0.08, 0.14,-0.07;   
      0.12,-0.14,-0.04, 0.11,-0.07, 0.04]    

C=rand(A);
X=linmeq(3,A,C,[1 0]);
norm(A'*X'*X*A - X'*X +C'*C,1)

参照

  • sylv — シルベスタ方程式.
  • lyap — リアプノフ方程式
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:28 CEST 2012