Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- >> % Az első lépés az ismeretlenek bevitele
- >> % 12 ismeretlen lesz, ezek a következők:
- >> % Ezek a következők:
- >> % ic uc ucd (ucd = uc')
- >> % il ul ild (ild = il')
- >> % i1, i2, u2
- >> % u fi is
- >> % R L C (ezek valójában ismertlek, de először parametrikusan számolunk, ezért nem kapnak értéket)
- >> % 12 ismeretlen van, de 3 egyenlet szükséges a megoldáshoz, ezért 9 egyenletet kell felírni
- >> % Vigyük be az imseretleneket:
- >> syms ucd ild u uc il is f i1 i2 n u2 ic ul R C L
- >> % n értékét adjuk meg
- >> n = 8;
- >> % A második lépés az egyenletek beírása
- >> % 9 egyenlet szükséges összesen. Ez a következő képpen áll össze:
- >> % 2 a transzformátor karakterisztikája
- >> % 2 a két dinamikus komponens karakterisztikája
- >> % 5 csomóponti egyenlet. Ez pont megfelelő, hszen 6 csomópont van, így 6-1 független egyenlet írható fel
- >> % Vigyük be az egyenleteket:
- >> eq1 = (f+u+uc)*n == u2;
- >> eq2 = i1 == -n*i2;
- >> eq3 = ic == C*ucd;
- >> eq4 = ul == L*ild;
- >> eq5 = -is + (f+u+uc)/(2*R) + i1 + uc/R + uc/R + ic == 0;
- >> eq6 = is - (f+u+uc)/(2*R) - i1 - f/R == 0;
- >> eq7 = ((f+u)-(f+u2))/R - uc/R - uc/R - ic + u/(2*R) + ((f+u)-(f+L*ild))/R == 0;
- >> eq8 = f/R -i2 -u/(2*R) -il == 0;
- >> eq9 = i2 - ((f+u)-(f+u2))/R == 0;
- >> % A következő lépés az egyenletrendszer megoldása
- >> % Ehhez az equationsToMatrix() parancsot használjuk
- >> % Ez a parancs lineáris egyenletrendszereket mátrix formába konvertál át
- >> % Az első argumentumba beírjuk az egyenleteket, a másodikba pedig azokat a változokat, amelyeket ki akarunk fejezni
- >> % Itt az első három helyre ucd-t, ild-t és az u választ írjuk, így a mátrix első 3 sora lesz az ÁVLNA
- >> % Amásodik argumentumba írt változók a kimaradt változókból lesznek kifejezve, vagyis uc-ből, il-ből és is-ből. (Emellet R,L,C-ből.)
- >> % Alakítsuk ki a mátrixos alakot:
- >> [M,N] = equationsToMatrix([eq1,eq2,eq3, eq4, eq5, eq6, eq7, eq8, eq9],[ucd ild u ic ul i1 i2 u2 f])
- M =
- [ 0, 0, 8, 0, 0, 0, 0, -1, 8]
- [ 0, 0, 0, 0, 0, 1, 8, 0, 0]
- [ -C, 0, 0, 1, 0, 0, 0, 0, 0]
- [ 0, -L, 0, 0, 1, 0, 0, 0, 0]
- [ 0, 0, 1/(2*R), 1, 0, 1, 0, 0, 1/(2*R)]
- [ 0, 0, -1/(2*R), 0, 0, -1, 0, 0, -3/(2*R)]
- [ 0, -L/R, 5/(2*R), -1, 0, 0, 0, -1/R, 0]
- [ 0, 0, -1/(2*R), 0, 0, 0, -1, 0, 1/R]
- [ 0, 0, -1/R, 0, 0, 0, 1, 1/R, 0]
- N =
- -8*uc
- 0
- 0
- 0
- is - (5*uc)/(2*R)
- uc/(2*R) - is
- (2*uc)/R
- il
- 0
- >> % Ezután meg kell oldalnunk az egyenletrendszert
- >> % Ehhez a linsolve() parancsot használjuk
- >> % Ez MX = N mátrixos alakban megadott egyenletrendszer megoldására képes
- >> % Így az egyenletrendszer megoldása:
- >> X = linsolve(M,N)
- X =
- -(793*uc - 226*R*il + 26*R*is)/(331*C*R)
- -(226*uc + 593*R*il - 36*R*is)/(331*L)
- (36*R*is)/331 - (262*R*il)/331 - (226*uc)/331
- -(793*uc - 226*R*il + 26*R*is)/(331*R)
- (36*R*is)/331 - (593*R*il)/331 - (226*uc)/331
- (16*(9*uc - 13*R*il + 22*R*is))/(331*R)
- -(2*(9*uc - 13*R*il + 22*R*is))/(331*R)
- (80*R*is)/331 - (288*R*il)/331 - (208*uc)/331
- (226*R*il)/331 - (131*uc)/331 - (26*R*is)/331
- >> % A kapott egyenletek első sora uc', a második ild, a harmadik pedig az u válasz
- >> % Vagyis szebben leírva:
- >> % uc' = - (793*uc)/(331*C*R) + (226*il)/(331*C) - (26*is)/(331*C)
- >> % il' = - (226*uc)/(331*L) - (593*R*il)/(331*L) + (36*R*is)/(331*L)
- >> % u = - (226*uc)/331 - (262*R*il)/331 + (36*R*is)/331
- >> % A parametrikus számolás helyett beírhatjuk R, L, C értékét a további számításokhoz
- >> % Ezek koherens egységrendszerben:
- >> % R = 5 [Mohm]
- >> % L = 1 [Henry]
- >> % C = 8 [pFarad]
- >> % Fontos rögzíteni az így kapott eredmények mértékegységeit is:
- >> % u -> [KV]
- >> % i -> [mA]
- >> % Adjuk meg az értékeket:
- >> R = 5;
- >> L = 1;
- >> C = 8;
- >> % Az egyenletek frissítéséhez újra be kell vinnünk azokat:
- >> eq1 = (f+u+uc)*n == u2;
- >> eq2 = i1 == -n*i2;
- >> eq3 = ic == C*ucd;
- >> eq4 = ul == L*ild;
- >> eq5 = -is + (f+u+uc)/(2*R) + i1 + uc/R + uc/R + ic == 0;
- >> eq6 = is - (f+u+uc)/(2*R) - i1 - f/R == 0;
- >> eq7 = ((f+u)-(f+u2))/R - uc/R - uc/R - ic + u/(2*R) + ((f+u)-(f+L*ild))/R == 0;
- >> eq8 = f/R -i2 -u/(2*R) -il == 0;
- >> eq9 = i2 - ((f+u)-(f+u2))/R == 0;
- >> % Úgy ahogy az előbb, oldjuk meg újra az egyenletrendszert:
- >> [M,N] = equationsToMatrix([eq1,eq2,eq3, eq4, eq5, eq6, eq7, eq8, eq9],[ucd ild u ic ul i1 i2 u2 f]);
- >> X = linsolve(M,N)
- X =
- (113*il)/1324 - (13*is)/1324 - (793*uc)/13240
- (180*is)/331 - (2965*il)/331 - (226*uc)/331
- (180*is)/331 - (1310*il)/331 - (226*uc)/331
- (226*il)/331 - (26*is)/331 - (793*uc)/1655
- (180*is)/331 - (2965*il)/331 - (226*uc)/331
- (352*is)/331 - (208*il)/331 + (144*uc)/1655
- (26*il)/331 - (44*is)/331 - (18*uc)/1655
- (400*is)/331 - (1440*il)/331 - (208*uc)/331
- (1130*il)/331 - (130*is)/331 - (131*uc)/331
- >> % Szebben leírva:
- >> % uc' = - (793*uc)/13240 + (113*il)/1324 - (13*is)/1324
- >> % il' = - (226*uc)/331 - (2965*il)/331 + (180*is)/331
- >> % u = - (226*uc)/331 - (1310*il)/331 + (180*is)/331
- >> % A következő lépésben határozzuk meg az A, B, C és D mátrixokat
- >> % Az előbb kapott egyenletekből ezek leolvashatók
- >> A = [-793/13240 113/1324; -226/331 -2965/331]
- A =
- -0.0599 0.0853
- -0.6828 -8.9577
- >> B = [-13/1324; 180/331]
- B =
- -0.0098
- 0.5438
- >> CT = [-226/331 -1310/331]
- CT =
- -0.6828 -3.9577
- >> D = 180/331
- D =
- 0.5438
- >> % Következzen a rendszermátrix sajátértékeinek meghatározása
- >> % Ehhez az az eig() parancsot fogjuk használni
- >> % Ez az argumentumában egy mátrixot vár és két diagonális mátrixot ad vissza: az egyikben a sajátértékek, a másikban a sajátvektorok találhatók
- >> [E, la] = eig(A)
- E =
- 0.9971 -0.0096
- -0.0766 1.0000
- la =
- -0.0664 0
- 0 -8.9511
- >> %Mivel a rendszermátrix minden sajátértékének valós része negatív, ezért a rendszer aszimpotikusan stabilis
- >> %Következzen az ugrásválasz meghatározása
- >> %Ez három lépésből áll:
- >> % 1. A szabadösszetevő meghatározása
- >> % 2. A gerjesztett összetevő meghatározása
- >> % 3. A kezdeti feltételek érvényesítése
- >> % 1.
- >> % A gerjesztett összetevőt konstans alakjában keressük, hiszen a gerjesztés konstansnak tekinthető
- >> % Konstans deriváltja nulla, ez áll az egyenlet bal oldalán
- >> % Mivel impulzusválasznál a gerjesztés 1, ezért a felírandó egyenlet:
- >> % 0 = A*Xg + B*1
- >> % Vagyis matlabban:
- >> Xg = inv(A) * (-B)
- Xg =
- -0.0698
- 0.0660
- >> % A kezdeti feltételek érvényesítése a következő lépés
- >> % Tudjuk, hogy x(+0) = x(-0) = 0 = K1*m1 + K2*m2 + Xg
- >> % Ez mátrixokkal felírva: 0 = E*K + Xp
- >> % Vagyis matlabban:
- >> K = inv(E) * (-Xg)
- K =
- 0.0695
- -0.0607
- >> % Ez után következhet az ugrásválasz felírása
- >> % A képlet a következő:
- >> % gt = CT*x(t) + D*u(t) = CT*(xf(t)+xg(t)) + D*epszilon(t)
- >> % Ha ezt felbontjuk:
- >> % epszilon(t)*(K1*CT*m1*e^(lambda1*t)+ K2*CT*m2*e^(lambda2*t) + CT*Xg + D)
- >> % Ezt konstansokkal is kifejezhetjük:
- >> % epszilon(t)*(N1*e^(lambda1*t)+ N2*e^(lambda2*t) + N3)
- >> % Ez matlabban:
- >> N1 = K(1)*CT*E(:,1)
- N1 =
- -0.0262
- >> N2 = K(2)*CT*E(:,2)
- N2 =
- 0.2399
- >> N3 = CT*Xg + D
- N3 =
- 0.3302
- >> % Következhet a függvény felírása és az ábrázolás
- >> % Ehhez a linspace parancsot fogjuk használni
- >> % Ez a megadott intervallumot felosztja 1000 részre és az így kapott értékeket sorvektorként adja vissza
- >> % A 0-50usec időtartományt fogjuk vizsgálni, itt lezaljlanak a legfőbb változások
- >> t = linspace(0, 50, 1000);
- >> % Írjuk fel az átmeneti fügvényt az előbb meghatározott konstansok segítségével
- >> gt = N1*exp(la(1,1)*t) + N2*exp(la(2,2)*t) + N3;
- >> % Ábrázoljuk a függvényt
- >> figure
- >> plot(t,gt)
- >> xlabel("t[us]")
- >> ylabel("g(t)")
- >> title("Ugrásválasz")
- >> % Ellenőrizhetjük a megoldásunkat úgy, hogy a matlab beépített rendszerét használjuk erre a problémára
- >> % Létrehoztatunk állapotváltozós leírást az ss() parancs segítségével. Ennek bemenő paraméterei a rendszer mátrixai
- >> sys = ss(A, B, CT, D)
- sys =
- A =
- x1 x2
- x1 -0.05989 0.08535
- x2 -0.6828 -8.958
- B =
- u1
- x1 -0.009819
- x2 0.5438
- C =
- x1 x2
- y1 -0.6828 -3.958
- D =
- u1
- y1 0.5438
- Continuous-time state-space model.
- >> % A matlab beépített parancsát használhatjuk ugrásválasz meghatározásához
- >> figure
- >> step(sys, 50)
- >> % Láthatjuk, hogy ugyan azt a választ kapjuk, mint saját számolásokkal, így biztos, hogy jól dolgoztunk
- >> % Ez után következhet az impulzusválasz felírása
- >> % Ezt a legegyszerűbb felírni az ugrásválaszt általános deriváltjaként
- >> % A deriválás után alakja a következő:
- >> ft = la(1,1)*N1*exp(la(1,1)*t) + la(2,2)*N2*exp(la(2,2)*t);
- >> % A változások megközelítőleg 1 us alatt lezajlanag, ezért
- >> t = linspace(0, 1, 1000);
- >> % A megváltozott linspace miatt újra be kell vinni a plothoz
- >> ft = la(1,1)*N1*exp(la(1,1)*t) + la(2,2)*N2*exp(la(2,2)*t);
- >> % Ábrázoljuk a függvényt
- >> figure
- >> plot(t,ft)
- >> xlabel("t[us]")
- >> ylabel("f(t)")
- >> title("Impulzusválasz")
- >> % A matlab beépített parancsát használhatjuk impulzusválasz meghatározásához
- >> figure
- >> impulse(sys, 50)
- >> % Láthatjuk, hogy ugyan azt a választ kapjuk, mint saját számolásokkal, így biztos, hogy jól dolgoztunk
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement