File: aff2ab.cat

package info (click to toggle)
scilab 2.6-4
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 54,632 kB
  • ctags: 40,267
  • sloc: ansic: 267,851; fortran: 166,549; sh: 10,005; makefile: 4,119; tcl: 1,070; cpp: 233; csh: 143; asm: 135; perl: 130; java: 39
file content (79 lines) | stat: -rw-r--r-- 2,976 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
aff2ab            Scilab Group            Scilab Function            aff2ab
NAME
   aff2ab - linear (affine) function to A,b conversion
  
CALLING SEQUENCE
 [A,b]=aff2ab(afunction,dimX,D [,flag])
PARAMETERS
 afunction  : a scilab function  Y =fct(X,D)  where X, D, Y are list of
            matrices
            
 dimX       : a p x 2 integer matrix (p is the number of matrices in X)
            
 D          : a list of real matrices (or any other valid Scilab object).
            
 flag       : optional parameter (flag='f' or flag='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. 
  
EXAMPLE
 // 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