Sunteți pe pagina 1din 10

# Constantin Daniel Alexandru

Grupa 332 AA

## Probleme pentru colocviul de laborator

--- CALCUL NUMERIC N AUTOMATIC ---

## Laboratorul 2 - Rezolvarea ecuaiilor matriceale liniare Sylvester i Liapunov

Problema 1 : Se consider date matricile S R mxm superior bidiagonal T R nxn diagonal i
C R mxn . Se cere un program MATLAB eficient pentru rezolvarea ecuaiei matriciale Sylvester
continue SX + XT = C:
for i = m:-1:1
for j = 1:n
X(i,j)=(C(i,j)-S(i,i+1)*X(i+1,j))/(S(i,i)+T(j,j))
end
end
Problema 2 : Se consider date matricile S R mxm superior bidiagonal, T R nxn inferior
triunghiular i C R mxn . Se cere un program MATLAB eficient pentru rezolvarea ecuaiei
matriciale Sylvester discrete SXT - X = C:
S1=0;
S2=0;
For i = m:-1:1
For j=n:-1:1
For k=j+1:n
S1=S1+S(i,i)*X(i,k)*T(k,j);
end
For k=j:n
S2=S2+S(i,i+1)*X(i+1,k)*T(k,j);
end
X(i,j)=(C(i,j)-S1-S2))/((S(i,i)*T(j,j)-1)
end
end
Problema 3 : Se consider date matricile A R mxm superior bidiagonal i C R mxm .
Se cere un program MATLAB eficient pentru rezolvarea ecuaiei matriciale Liapunov continue

AT X XA C
for i = 1:m
for j = 1:m
X(i,j)=(C(i,j)-A(i-1,i)*X(i-1,j)-X(i,j-1)*A(j-1,j))/(A(i,i)+A(j,j))
end
end

Problema 4 : Se consider date matricile A R mxm superior bidiagonal i C R mxm .Se cere un
program MATLAB eficient pentru rezolvarea ecuaiei matriciale Liapunov discrete AT XA X C
for j=1:m
for i=j:m
X(i,j) = (C(i,j) (A(i-1,i)*X(i-1,j-1)*A(j-1,j)+A(i,i)*X(i,j-1)*A(j-1,j)+A(I-1,I)*X(I1,j)*A(j,j))/ /(A(i,i)*A(j,j)-1 )
end
end
Laboratorul 3 - Calculul funciilor de matrice. Exponeniala matriceal
Problema 1 : Algoritmul Parlett n versiunile pe linii i pe coloane.
function [F]=ParlletLinii(T,f)
n=length(T);
F=zeros(n);
for i=n:-1:1
F(i,i)=feval(f,T(i,i));
for j=i+1:n
s=0;
for k=i+1:j-1
s=s+T(i,k)*F(k,j)-F(i,k)*T(k,j);
end
F(i,j)=(T(i,j)*(F(j,j)-F(i,i))+s)/(T(j,j)T(i,i));
end
end

function [F]=ParlletColoane(T,f)
n=length(T);
F=zeros(n);
for j=1:n
F(j,j)=feval(f,T(j,j));
for i=j-1:-1:1
s=0;
for k=i+1:j-1
s=s+T(i,k)*F(k,j)-F(i,k)*T(k,j);
end
F(i,j)=(T(i,j)*(F(j,j)-F(i,i))+s)/(T(j,j)T(i,i));
end
end

## Problema 2 : Implementarea algoritmului de calcul al exponenialei matriceale bazat pe

aproximaia Taylor.
function [F]=Taylor(A,t)
%Schema (1/2)^2
norma=norm(A);
m=0;
while t*norma>=1
t=t/2;
m=m+1;
end
n=length(A);

X=eye(n);
F=eye(n);
p=6;
for k=1:p
X=1/k*t*A*X;
F=F+X;
end

## Problema 3 : Algoritmul Parlett pentru calculul funciilor de matrice inferior triunghiulare cu

elementele diagonale distincte.
function [F]=ParlettInf(T,f)
n=length(T);

for i=1:n
F(i,i)=feval(f,T(i,i));
end
for i=1:n
for j=i-1:-1:1
F(i,j)=T(i,j)*(F(j,j)-F(i,i));
s=0;
for k=j+1:i-1
s=s+T(i,k)*F(k,j)-F(i,k)*T(k,j);
end
F(i,j)=(F(i,j)+s)/(T(j,j)-T(i,i));
end
end
Problema 4 : Scriei un algoritm eficient pentru calculul funciei F = f(A), unde A este superior
bidiagonal cu elemente diagonale distincte.
function [F]=SupBdg(T,f);
n=length(T);
for i=n:-1:1
F(i,i)=feval(f,T(i,i));
for j=i+1:n
F(i,j)=(T(i,i+1)*F(i+1,j)-F(i,j-1) * T(j-1,j))/(T(j,j)-T(i,i));
end
end
Laboratorul 4 - Modele sistemice liniare. Reprezentare numeric. Conversii. Conexiuni
Problema 1 : Funcii proprii de conversie tf2ss.
function [A,B,C]= tf2ssSISO(N,p)
n = length(N);
A = zeros(n,n);
B = zeros(n,1);
C = zeros(1,n);
B(1,1) = 1;
for i=1:n
C(1,i) = N(1,i);
end
for i=1:n-1
A(i+1,i) = 1;
end
for i=1:n
A(1,i) = -p(1,i+1);
End
function [A,B,C]=tf2ssSIMO(N,p)

[l,ni] = size(p);

M = zeros(l,ni-1);
for i=1:l
M(i,:) = roots(p(i,:));
end
k = 0;
for i=1:l
for j=1:ni-1
apar = 0;
for ki=1:k
apar = apar +1;
end
end
if(apar = = 0)
k = k+1;
end
end

end
n = k + 1;
p1 = zeros(1,n);
A = zeros(n-1);
for i=1:n-1
A(1,i) = -p1(1,i+1);
A(i,i+1) = 1;
end
B = zeros(n-1,1);
B(1,1) = 0;
C = zeros(l,n-1);
for i=1:l
for j=1:n-1
C(i,j) = N(i,j);
end
end

Problema 2 : Se vor scrie programe MATLAB proprii pentru implementarea algoritmilor de calcul
polinomial necesare manipulrii matricelor de transfer.
%Suma a 2 polinoame de grade diferite.
function[c]=suma(a,b)
[p,m]=size(a);
[p,n]=size(b);
c=zeros(1,max(m,n));
if m>n
for i=1:m-n
c(i)=a(i);
end
for i=m-n+1:m
c(i)=b(i-m+n)+a(i);
end
else
for i=1:n-m
c(i)=b(i);
end
for i=n-m+1:n
c(i)=a(i-n+m)+b(i);
end
end

%mprirea a 2 polinoame cu proprietetea: gradul primului este mai mare dact gardul celui de-al
doilea

function[c]=impartzire(a,b)
[p,m]=size(a);
[p,n]=size(b);
var=m-n+1;
c=zeros(1,var);
c(1)=a(1)/b(1);
if (mod(m,2)==1)
for i=2:var
s=0;
for j=1:i-1
s=s+c(j)*b(var-j+1);
end
c(i)=(a(i)-s)/b(1);
end
else
for i=s:var-1
s=0;
for j=1:i-1
s=s+c(j)*b(var-k);
end
c(i)=(a(i)-s)/b(1);
end
c(var)=a(m)/b(n);
end
%Calcului coeficienilor unui polinom cunoscnd rdcinile
function[b]=coeficientzi(a)
[p,m]=size(a);
for i=1:m+1
b(i)=0;
end
b(1)=1;
for i=1:m
for j=i+1:-1:2
b(j)=b(j)- a(i)*b(j-1);
end
end
Problema 3 : Fiind date trei sisteme Si, i=1:3, prin metodele lor de transfer, s se scrie algoritmii de
construcie ai matricelor de transfer ale sistemelor rezultate prin interconectarea sistemelor date
conform schemelor din figurile:

## Matricea de transfer pentru (a):

(a): Y1 H 11 H 2 U 2 Y1 H 12 H 1 U 2 Y1
Y2 H 21 H 2 U 1 Y1 H 22 H 1 U 2 Y2
Se rezolva sistemul si se scot expresiile lui Y1 si Y2. De exemplu pentru Y2 se obtine:
Y2

H 21 H 1 U 1 H 21 H 2 H 12 H 1U 2 H 22 H 1U 2 H 22 H 1 H 11 H 2U 2
1 H 11 H 2 H 22 H 1 H 22 H 1 H 11 H 22 H 21 H 2 H 11 H 1

function [HH1,HH2]=mymatricetransfer_a(H1,H2,H3)
[m1,n1]=size(H1);
[m2,n2]=size(H2);
[m3,n3]=size(H3);
Hd1=zeros(m2+m3,n2+n3);
Hd1(1:m2,1:n2)=H2;
Hd1(m2+1:m2+m3,n2+1:n2+n3)=H3;
Hs1=zeros(m2+m3,n2+n3);
Hs1(1:m2,n3+1:n2+n3)=H2;
Hs1(m2+1:m2+m3,1:n3)=H3;
HH1=inv(eye(m2+m3,n2+n3)-Hs1)*Hd1;
Hd1=zeros(m1+m3,n1+n3);
Hd1(1:m1,1:n1)=H1;
Hd1(m1+1:m1+m3,n1+1:n1+n3)=H3;
Hs1=zeros(m1+m3,n1+n3);
Hs1(1:m1,n3+1:n1+n3)=H1;
Hs1(m1+1:m1+m3,1:n3)=H3;

HH2=inv(eye(m1+m3,n2+n3)-Hs1)*Hd1;
Matricea de transfer pentru (b):
function [HH1,HH2]=mymatricetransfer_b(H1,H2,H3)
[m1,n1]=size(H1);
[m2,n2]=size(H2);
[m3,n3]=size(H3);
Hd1=zeros(m2+m3,n2+n3);
Hd1(1:m3,1:n3)=H3;
Hd1(m3+1:m2+m3,n3+1:n2+n3)=H2;
Hs1=zeros(m2+m3,n2+n3);
Hs1(1:m3,n2+1:n2+n3)=H3;
Hs1(m3+1:m2+m3,1:n2)=H2;
HH1=inv(eye(m2+m3,n2+n3)-Hs1)*Hd1;
Hd1=zeros(m1+m3,n1+n3);
Hd1(1:m3,1:n3)=H3;
Hd1(m3+1:m1+m3,n3+1:n1+n3)=H1;
Hs1=zeros(m1+m3,n1+n3);
Hs1(1:m3,n1+1:n1+n3)=H3;
Hs1(m3+1:m1+m3,1:n1)=H1;
HH2=inv(eye(m1+m3,n2+n3)-Hs1)*Hd1;
Problema 4 : Se d sistemul S= (A,B,C,D) ale crui matrice au structura:

S se scrie o procedur de reprezentare a lui S sub forma unei conexiuni a) paralel i b) serie a dou
sisteme S1, S2 convenabil definite.
a) la conexiunea serie:

x1'
A1 x1 B1u

'

x2 A2 x2 B2 (C1 D1u )
rezult:
0
A1
B1
A
si B

. =>
B2 C1 A2
B2 D1
A21=B2C2 si G2=B2D1
y=y2=C2X2+D2u2=C2x2+D2(C1X1+D1u) = D2 C1

1
C 2 [D2D1]u
x2

D2 .

## Laboratorul 5 - Calculul rspunsului n timp al sistemelor liniare

Problema 1 : Scriei algoritmul de calcul al rspunsului unui sistem liniar discret S descris printr-o
relaie intrare - ieire de forma:

## preciznd cu grij datele iniiale necesare.

function y=calcul_rasp1(a,b,u)
n=length(a);
d=length(b);
m=length(u);
for k=1:m
sum1=0;
for i=1:n
if k-i>0
sum1=sum1+a(i)*y(k-i);
end
end
for i=1:d
if k-i+1>0
sum1=sum1+b(i)*u(k-i+1);
end
end
y(k)=sum1;
end
Problema 2 : Scriei algoritmul de calcul al raspunsului y(kh), k = 1 : k f , al unui sistem liniar
discret daca in locul starii initiale x(0) = x0 se da starea finala x(tf ) = .
function calcul_rasp2(A,B,C,D,kf,x)
for k=kf+1:-1:1

Y(:,k)=C*x+D*U(:,k);
x=SL_GPP(A,x-B*U(:,k))

end
s-au folosit pentru rezolvarea exerciiului anterior urmtoarele funcii:
function [A,U,p]=GPP(A)
n=length(A);
b=0;
U=zeros(n);
p=1:1:n;
for k=1:n-1
v=1:1:n-k+1;
for i=k:n
v(i-k+1)=abs(A(i,k));
end
d=max(v);
for i=k:n
if d==abs(A(i,k))
p(k)=i;
break;
end
end
for j=k:n
s=A(k,j);
A(k,j)=A(p(k),j);
A(p(k),j)=s;
end
for i=k+1:n;
U(i,k)=A(i,k)/A(k,k);
A(i,k)=0;
end
for i=k+1:n
for j=k+1:n
A(i,j)=A(i,j)-U(i,k)*A(k,j);
end
end
end

function [x]=SL_GPP(A,b)
n=length(b);
[U,M,p]=GPP(A);
for k=1:n-1
s=b(k);
b(k)=b(p(k));
b(p(k))=s;
for i=k+1:n
b(i)=b(i)-M(i,k)*b(k);
end
x=s_sup_tr(b,U);
end
function [x]=s_sup_tr(b,a)
n=length(b);
for i=n:-1:1
s=b(i);
if i<n
for k=i+1:n
s=s-a(i,k)*x(k);
end
end
x(i)=s/a(i,i);
end

## Problema 3 : Programele MATLAB pentru implementarea algoritmilor de calcul al rspunsului

permanent al sistemelor liniare continue la intrri armonice.
sistemele sunt SIMO B=n*1
function Y=rasp_perm_contin_armonice(A,B,C,D,gamma1,gamma2,w,h,tf)
AG=[0,-w^2;1,0]
BG=[1;0]
CG=[gamma1,w*gamma2]
m=length(A);
M=zeros(2*m,2*m);
M(1:m,1:m)=-A;
M(1:m,m+1:2*m)=w*eye(m,m);

M(m+1:2*m,1:m)=-w*eye(m,m);
M(m+1:2*m,m+1:2*m)=-A;
R=[B*gamma1;B*gamma2];
v=SL_GPP(M,R)
v1=v(1:m)'
v2=v(m+1:2*m)'
w1=C*v1+D*gamma1;
w2=C*v2+D*gamma2;
V=[w1 w*w2]
W=C*V+D*CG
Y=initial_g(AG,W,BG,h,tf);
s-a folosit funcia descris la exercitiul anterior, SL_GPP, si funcia specific sistemelor SIMO:
function [Y]=initial_g(A,C,x,h,tf)
kf=fix(tf/h);
B=zeros(length(A),1);
D=zeros(length(C),1);
Problema 4 : Programul MATLAB pentru implementarea algoritmului de calcul al caracteristicilor
de frecven a unui sistem SISO continuu. Se prevede reprezentarea grafic a hodografului
(diagrama Nyquist), a modulului i fazei (diagrame Bode)
function [RE,IM]=caract_frecv(a,b,c,d,w,n)
for k=1:n
w(k)=10^(k-1);
end
[M,H]=hess(a)
b=M*b
c=c*inv(M)
[m,m]=size(a)
for k=1:n
a0=i*w(k)*eye(m)-a
[N,R]=schur(a0)
[N,R]=rsf2csf(N,R)

b0=N*b
V=inv(a0)*b0
T=c*V+d
w(k)
RE=[RE real(T)]
IM=[IM imag(T)]
A=[A sqrt(real(T)^2+imag(T)^2)]
F=[F atan(imag(T)/real(T))]
end
J=ss(a,b,c,d);
[Re,Im]=nyquist(J,w)
[MAG,PHASE] = BODE(J,w)