- Scilab help
- CACSD (Computer Aided Control Systems Design)
- Format representations and conversions
- Plot and display
- abinv
- arhnk
- arl2
- arma
- arma2p
- arma2ss
- armac
- armax
- armax1
- arsimul
- augment
- balreal
- bilin
- bstap
- cainv
- calfrq
- canon
- ccontrg
- cls2dls
- colinout
- colregul
- cont_mat
- contr
- contrss
- copfac
- csim
- ctr_gram
- damp
- dcf
- ddp
- dhinf
- dhnorm
- dscr
- dsimul
- dt_ility
- dtsi
- equil
- equil1
- feedback
- findABCD
- findAC
- findBD
- findBDK
- findR
- findx0BD
- flts
- fourplan
- freq
- freson
- fspecg
- fstabst
- g_margin
- gamitg
- gcare
- gfare
- gfrancis
- gtild
- h2norm
- h_cl
- h_inf
- h_inf_st
- h_norm
- hankelsv
- hinf
- imrep2ss
- inistate
- invsyslin
- kpure
- krac2
- lcf
- leqr
- lft
- lin
- linf
- linfn
- linmeq
- lqe
- lqg
- lqg2stan
- lqg_ltr
- lqr
- ltitr
- macglov
- minreal
- minss
- mucomp
- narsimul
- nehari
- noisegen
- nyquistfrequencybounds
- obs_gram
- obscont
- observer
- obsv_mat
- obsvss
- p_margin
- parrot
- pfss
- phasemag
- pol2des
- ppol
- prbs_a
- projsl
- reglin
- repfreq
- ric_desc
- ricc
- riccati
- routh_t
- rowinout
- rowregul
- rtitr
- sensi
- sident
- sorder
- specfact
- ssprint
- st_ility
- stabil
- sysfact
- syssize
- time_id
- trzeros
- ui_observer
- unobs
- zeropen
Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
linmeq
Sylvester and Lyapunov equations solver
Calling Sequence
[X(,sep)] = linmeq(task,A,(B,)C,flag,trans(,schur))
Arguments
- task
integer option to determine the equation type:
- =1
solve the Sylvester equation (1a) or (1b);
- =2
solve the Lyapunov equation (2a) or (2b);
- =3
solve for the Cholesky factor op(X) the Lyapunov equation (3a) or (3b).
- A
real matrix
- B
real matrix
- C
real matrix
- flag
(optional) integer vector of length 3 or 2 containing options.
- task
= 1 : flag has length 3
- flag(1)
= 0 : solve the continuous-time equation (1a); otherwise, solve the discrete-time equation (1b).
- flag(2)
= 1 : A is (quasi) upper triangular;
- flag(2)
= 2 : A is upper Hessenberg;
- otherwise
A is in general form.
- flag(3)
= 1 : B is (quasi) upper triangular;
- flag(3)
= 2 : B is upper Hessenberg;
- otherwise,
B is in general form.
- task
= 2 : flag has length 2
- flag(1)
if 0 solve continuous-time equation (2a), otherwise, solve discrete-time equation (2b).
- flag(2)
= 1 : A is (quasi) upper triangular otherwise, A is in general form.
- task
= 3 : flag has length 2
- flag(1)
= 0 : solve continuous-time equation (3a); otherwise, solve discrete-time equation (3b).
- flag(2)
= 1 : A is (quasi) upper triangular; otherwise, A is in general form.
Default: flag(1) = 0, flag(2) = 0 (, flag(3) = 0).
- trans
(optional) integer specifying a transposition option.
- =
0 : solve the equations (1) - (3) with op(M) = M.
- =
1 : solve the equations (1) - (3) with op(M) = M'.
- =
2 : solve the equations (1) with op(A) = A'; op(B) = B;
- =
3 : solve the equations (1) with op(A) = A; op(B) = B'.
Default: trans = 0.
- schur
(optional) integer specifying whether the Hessenberg-Schur or Schur method should be used. Available for task = 1.
- = 1 : Hessenberg-Schur method (one matrix is reduced
to Schur form).
- = 2 : Schur method (two matrices are reduced to Schur
form).
Default: schur = 1.
- X
- sep
(optional) estimator of Sep(op(A),-op(A)') for (2.a) or Sepd(A,A') for (2.b).
Description
linmeq function for solving Sylvester and Lyapunov equations using SLICOT routines SB04MD, SB04ND, SB04PD, SB04QD, SB04RD, SB03MD, and 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 solves various Sylvester and Lyapunov matrix equations:
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)
where op(M) = M, or M'.
Comments
- 1.
For equation (1a) or (1b), when schur = 1, the Hessenberg-Schur method is used, reducing one matrix to Hessenberg form and the other one to a real Schur form. Otherwise, both matrices are reduced to real Schur forms. If one or both matrices are already reduced to Schur/Hessenberg forms, this could be specified by flag(2) and flag(3). For general matrices, the Hessenberg-Schur method could be significantly more efficient than the Schur method.
- 2.
For equation (2a) or (2b), matrix C is assumed symmetric.
- 3.
For equation (3a) or (3b), matrix A must be stable or convergent, respectively.
- 4.
For equation (3a) or (3b), the computed matrix X is the Cholesky factor of the solution, i.e., the real solution is op(X)'*op(X), where X is an upper triangular matrix.
Revisions
V. Sima, Katholieke Univ. Leuven, Belgium, May 1999, May, Sep. 2000. V. Sima, University of Bucharest, Romania, May 2000.
Examples
//(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)
Report an issue | ||
<< linfn | CACSD (Computer Aided Control Systems Design) | lqe >> |