Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
aff2ab
linear (affine) function to A,b conversion
Calling Sequence
[A,b]=aff2ab(afunction,dimX,D [,flag])
Arguments
- afunction
a scilab function
Y =fct(X,D)
whereX, D, Y
arelist
of matrices- dimX
a p x 2 integer matrix (
p
is the number of matrices inX
)- D
a
list
of real matrices (or any other valid Scilab object).- flag
optional parameter (
flag='f'
orflag='sp'
)- A
a real matrix
- b
a real vector having same row dimension as
A
Description
aff2ab
returns the matrix representation of an affine
function (in the canonical basis).
afunction
is a function with imposed syntax:
Y=afunction(X,D)
where X=list(X1,X2,...,Xp)
is
a list of p real matrices, and Y=list(Y1,...,Yq)
is
a list of q real real matrices which depend linearly of
the Xi
's. The (optional) input D
contains
parameters needed to compute Y as a function of X.
(It is generally a list of matrices).
dimX
is a p x 2 matrix: dimX(i)=[nri,nci]
is the actual number of rows and columns of matrix Xi
.
These dimensions determine na
, the column dimension of
the resulting matrix A
: na=nr1*nc1 +...+ nrp*ncp
.
If the optional parameter flag='sp'
the resulting A
matrix is returned as a sparse matrix.
This function is useful to solve a system of linear equations where the unknown variables are matrices.
Examples
// Lyapunov equation solver (one unknown variable, one constraint) 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 // Lyapunov equation solver with redundant constraint X=X' // (one variable, two constraints) D is global variable 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) // Francis equations // Find matrices X1 and X2 such that: // 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) // Find all X which commute with A 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
See Also
- linsolve — solveur d'équation linéaire
Report an issue | ||
<< qr | Linear Equations | lsq >> |