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 >> Linear Algebra > aff2ab

aff2ab

線形 (アフィン)関数を A,b に変換

呼び出し手順

[A,b]=aff2ab(afunction,dimX,D [,flag])

Parameters

afunction

scilab 関数 Y =fct(X,D) ただし, X, D, Y は行列の list

dimX

p x 2 整数行列 (pXの行列の数)

D

実数行列のlist (または任意の有効なScilab オブジェクト).

flag

オプションのパラメータ (flag='f' または flag='sp')

A

実数行列

b

Aと同じ行次元を有する実数ベクトル

説明

aff2ab はアフィン関数の(正準形式の)行列表現を返します.

afunction は以下の規定の構文を有する関数です: Y=afunction(X,D) ただし, X=list(X1,X2,...,Xp) は p 個の実数行列のリスト,Y=list(Y1,...,Yq)Xiに線形に依存するq 個の実数行列のリストです. (オプションの) 入力 D は, X の関数として Yを計算するために必要なパラメータを有しています.

dimX は p x 2 行列です: dimX(i)=[nri,nci] は行列Xiの行と列の実際の数です. これらの次元は,結果の行列Aの列の次元である na を以下のように定義します: na=nr1*nc1 +...+ nrp*ncp.

オプションのパラメータ flag='sp' が指定された場合, 結果の行列 Aは疎行列として返されます.

この関数は,未知変数が行列であるような 線形方程式のシステムを解くために有用です.

// リアプノフ方程式ソルバ (未知変数1つ, 拘束条件1つ)
deff('Y=lyapunov(X,D)','[A,Q]=D(:);Xm=X(:); Y=list(A''*Xm+Xm*A-Q)')
A=rand(3,3);Q=rand(3,3);Q=Q+Q';D=list(A,Q);dimX=[3,3];
[Aly,bly]=aff2ab(lyapunov,dimX,D);
[Xl,kerA]=linsolve(Aly,bly); Xv=vec2list(Xl,dimX); lyapunov(Xv,D)
Xm=Xv(:); A'*Xm+Xm*A-Q

// 冗長な拘束 t X=X'を有するリアプノフ方程式ソルバ
// (変数1つ, 拘束条件2つt) D はグローバル変数
deff('Y=ly2(X,D)','[A,Q]=D(:);Xm=X(:); Y=list(A''*Xm+Xm*A-Q,Xm''-Xm)')
A=rand(3,3);Q=rand(3,3);Q=Q+Q';D=list(A,Q);dimX=[3,3];
[Aly,bly]=aff2ab(ly2,dimX,D);
[Xl,kerA]=linsolve(Aly,bly); Xv=vec2list(Xl,dimX); ly2(Xv,D)

// フランシス方程式
// 以下のような行列 X1 および X2 を見つける:
// A1*X1 - X1*A2 + B*X2 -A3 = 0
// D1*X1 -D2 = 0 
deff('Y=bruce(X,D)','[A1,A2,A3,B,D1,D2]=D(:),...
[X1,X2]=X(:);Y=list(A1*X1-X1*A2+B*X2-A3,D1*X1-D2)')
A1=[-4,10;-1,2];A3=[1;2];B=[0;1];A2=1;D1=[0,1];D2=1;
D=list(A1,A2,A3,B,D1,D2);
[n1,m1]=size(A1);[n2,m2]=size(A2);[n3,m3]=size(B);
dimX=[[m1,n2];[m3,m2]];
[Af,bf]=aff2ab(bruce,dimX,D);
[Xf,KerAf]=linsolve(Af,bf);Xsol=vec2list(Xf,dimX)
bruce(Xsol,D)

// Aを変換する全てのXを見つける
deff('y=f(X,D)','y=list(D(:)*X(:)-X(:)*D(:))')
A=rand(3,3);dimX=[3,3];[Af,bf]=aff2ab(f,dimX,list(A));
[Xf,KerAf]=linsolve(Af,bf);[p,q]=size(KerAf);
Xsol=vec2list(Xf+KerAf*rand(q,1),dimX);
C=Xsol(:); A*C-C*A

参照

Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Mar 03 11:00:51 CET 2011