Advertisement
Matqux

jelek final

Apr 29th, 2020
498
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 9.76 KB | None | 0 0
  1. >> % Az első lépés az ismeretlenek bevitele
  2. >> % 12 ismeretlen lesz, ezek a következők:
  3. >> % Ezek a következők:
  4. >> % ic uc ucd (ucd = uc')
  5. >> % il ul ild (ild = il')
  6. >> % i1, i2, u2
  7. >> % u fi is
  8. >> % R L C (ezek valójában ismertlek, de először parametrikusan számolunk, ezért nem kapnak értéket)
  9. >> % 12 ismeretlen van, de 3 egyenlet szükséges a megoldáshoz, ezért 9 egyenletet kell felírni
  10. >> % Vigyük be az imseretleneket:
  11. >> syms ucd ild u uc il is f i1 i2 n u2 ic ul R C L
  12. >> % n értékét adjuk meg
  13. >> n = 8;
  14.  
  15. >> % A második lépés az egyenletek beírása
  16. >> % 9 egyenlet szükséges összesen. Ez a következő képpen áll össze:
  17. >> % 2 a transzformátor karakterisztikája
  18. >> % 2 a két dinamikus komponens karakterisztikája
  19. >> % 5 csomóponti egyenlet. Ez pont megfelelő, hszen 6 csomópont van, így 6-1 független egyenlet írható fel
  20. >> % Vigyük be az egyenleteket:
  21. >> eq1 = (f+u+uc)*n == u2;
  22. >> eq2 = i1 == -n*i2;
  23. >> eq3 = ic == C*ucd;
  24. >> eq4 = ul == L*ild;
  25. >> eq5 = -is + (f+u+uc)/(2*R) + i1 + uc/R + uc/R + ic == 0;
  26. >> eq6 = is - (f+u+uc)/(2*R) - i1 - f/R == 0;
  27. >> eq7 = ((f+u)-(f+u2))/R - uc/R - uc/R - ic + u/(2*R) + ((f+u)-(f+L*ild))/R == 0;
  28. >> eq8 = f/R -i2 -u/(2*R) -il == 0;
  29. >> eq9 = i2 - ((f+u)-(f+u2))/R == 0;
  30.  
  31. >> % A következő lépés az egyenletrendszer megoldása
  32. >> % Ehhez az equationsToMatrix() parancsot használjuk
  33. >> % Ez a parancs lineáris egyenletrendszereket mátrix formába konvertál át
  34. >> % Az első argumentumba beírjuk az egyenleteket, a másodikba pedig azokat a változokat, amelyeket ki akarunk fejezni
  35. >> % 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
  36. >> % 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.)
  37. >> % Alakítsuk ki a mátrixos alakot:
  38. >> [M,N] = equationsToMatrix([eq1,eq2,eq3, eq4, eq5, eq6, eq7, eq8, eq9],[ucd ild u ic ul i1 i2 u2 f])
  39.  
  40. M =
  41.  
  42. [  0,    0,        8,  0, 0,  0,  0,   -1,        8]
  43. [  0,    0,        0,  0, 0,  1,  8,    0,        0]
  44. [ -C,    0,        0,  1, 0,  0,  0,    0,        0]
  45. [  0,   -L,        0,  0, 1,  0,  0,    0,        0]
  46. [  0,    0,  1/(2*R),  1, 0,  1,  0,    0,  1/(2*R)]
  47. [  0,    0, -1/(2*R),  0, 0, -1,  0,    0, -3/(2*R)]
  48. [  0, -L/R,  5/(2*R), -1, 0,  0,  0, -1/R,        0]
  49. [  0,    0, -1/(2*R),  0, 0,  0, -1,    0,      1/R]
  50. [  0,    0,     -1/R,  0, 0,  0,  1,  1/R,        0]
  51.  
  52.  
  53. N =
  54.  
  55.              -8*uc
  56.                  0
  57.                  0
  58.                  0
  59.  is - (5*uc)/(2*R)
  60.      uc/(2*R) - is
  61.           (2*uc)/R
  62.                 il
  63.                  0
  64.  
  65. >> % Ezután meg kell oldalnunk az egyenletrendszert
  66. >> % Ehhez a linsolve() parancsot használjuk
  67. >> % Ez MX = N mátrixos alakban megadott egyenletrendszer megoldására képes
  68. >> % Így az egyenletrendszer megoldása:
  69. >> X = linsolve(M,N)
  70.  
  71. X =
  72.  
  73.       -(793*uc - 226*R*il + 26*R*is)/(331*C*R)
  74.         -(226*uc + 593*R*il - 36*R*is)/(331*L)
  75.  (36*R*is)/331 - (262*R*il)/331 - (226*uc)/331
  76.         -(793*uc - 226*R*il + 26*R*is)/(331*R)
  77.  (36*R*is)/331 - (593*R*il)/331 - (226*uc)/331
  78.        (16*(9*uc - 13*R*il + 22*R*is))/(331*R)
  79.        -(2*(9*uc - 13*R*il + 22*R*is))/(331*R)
  80.  (80*R*is)/331 - (288*R*il)/331 - (208*uc)/331
  81.  (226*R*il)/331 - (131*uc)/331 - (26*R*is)/331
  82.  
  83. >> % A kapott egyenletek első sora uc', a második ild, a harmadik pedig az u válasz
  84. >> % Vagyis szebben leírva:
  85. >> % uc' = - (793*uc)/(331*C*R) + (226*il)/(331*C) - (26*is)/(331*C)
  86. >> % il' = - (226*uc)/(331*L) - (593*R*il)/(331*L) + (36*R*is)/(331*L)
  87. >> % u   = - (226*uc)/331 - (262*R*il)/331 + (36*R*is)/331
  88. >> % A parametrikus számolás helyett beírhatjuk R, L, C értékét a további számításokhoz
  89. >> % Ezek koherens egységrendszerben:
  90. >> % R = 5 [Mohm]
  91. >> % L = 1 [Henry]
  92. >> % C = 8 [pFarad]
  93. >> % Fontos rögzíteni az így kapott eredmények mértékegységeit is:
  94. >> % u -> [KV]
  95. >> % i -> [mA]
  96. >> % Adjuk meg az értékeket:
  97. >> R = 5;
  98. >> L = 1;
  99. >> C = 8;
  100.  
  101. >> % Az egyenletek frissítéséhez újra be kell vinnünk azokat:
  102. >> eq1 = (f+u+uc)*n == u2;
  103. >> eq2 = i1 == -n*i2;
  104. >> eq3 = ic == C*ucd;
  105. >> eq4 = ul == L*ild;
  106. >> eq5 = -is + (f+u+uc)/(2*R) + i1 + uc/R + uc/R + ic == 0;
  107. >> eq6 = is - (f+u+uc)/(2*R) - i1 - f/R == 0;
  108. >> eq7 = ((f+u)-(f+u2))/R - uc/R - uc/R - ic + u/(2*R) + ((f+u)-(f+L*ild))/R == 0;
  109. >> eq8 = f/R -i2 -u/(2*R) -il == 0;
  110. >> eq9 = i2 - ((f+u)-(f+u2))/R == 0;
  111.  
  112. >> % Úgy ahogy az előbb, oldjuk meg újra az egyenletrendszert:
  113. >> [M,N] = equationsToMatrix([eq1,eq2,eq3, eq4, eq5, eq6, eq7, eq8, eq9],[ucd ild u ic ul i1 i2 u2 f]);
  114. >> X = linsolve(M,N)
  115.  
  116. X =
  117.  
  118.  (113*il)/1324 - (13*is)/1324 - (793*uc)/13240
  119.    (180*is)/331 - (2965*il)/331 - (226*uc)/331
  120.    (180*is)/331 - (1310*il)/331 - (226*uc)/331
  121.     (226*il)/331 - (26*is)/331 - (793*uc)/1655
  122.    (180*is)/331 - (2965*il)/331 - (226*uc)/331
  123.    (352*is)/331 - (208*il)/331 + (144*uc)/1655
  124.       (26*il)/331 - (44*is)/331 - (18*uc)/1655
  125.    (400*is)/331 - (1440*il)/331 - (208*uc)/331
  126.    (1130*il)/331 - (130*is)/331 - (131*uc)/331
  127.  
  128. >> % Szebben leírva:
  129. >> % uc' = - (793*uc)/13240 + (113*il)/1324 - (13*is)/1324
  130. >> % il' = - (226*uc)/331 - (2965*il)/331 + (180*is)/331
  131. >> % u = - (226*uc)/331 - (1310*il)/331 + (180*is)/331
  132.  
  133. >> % A következő lépésben határozzuk meg az A, B, C és D mátrixokat
  134. >> % Az előbb kapott egyenletekből ezek leolvashatók
  135. >> A = [-793/13240 113/1324; -226/331 -2965/331]
  136.  
  137. A =
  138.  
  139.    -0.0599    0.0853
  140.    -0.6828   -8.9577
  141.  
  142. >> B = [-13/1324; 180/331]
  143.  
  144. B =
  145.  
  146.    -0.0098
  147.     0.5438
  148.  
  149. >> CT = [-226/331 -1310/331]
  150.  
  151. CT =
  152.  
  153.    -0.6828   -3.9577
  154.  
  155. >> D = 180/331
  156.  
  157. D =
  158.  
  159.     0.5438
  160.  
  161. >> % Következzen a rendszermátrix sajátértékeinek meghatározása
  162. >> % Ehhez az az eig() parancsot fogjuk használni
  163. >> % 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
  164. >> [E, la] = eig(A)
  165.  
  166. E =
  167.  
  168.     0.9971   -0.0096
  169.    -0.0766    1.0000
  170.  
  171.  
  172. la =
  173.  
  174.    -0.0664         0
  175.          0   -8.9511
  176.  
  177. >> %Mivel a rendszermátrix minden sajátértékének valós része negatív, ezért a rendszer aszimpotikusan stabilis
  178. >> %Következzen az ugrásválasz meghatározása
  179. >> %Ez három lépésből áll:
  180. >> % 1. A szabadösszetevő meghatározása
  181. >> % 2. A gerjesztett összetevő meghatározása
  182. >> % 3. A kezdeti feltételek érvényesítése
  183. >> % 1.
  184. >> % A gerjesztett összetevőt konstans alakjában keressük, hiszen a gerjesztés konstansnak tekinthető
  185. >> % Konstans deriváltja nulla, ez áll az egyenlet bal oldalán
  186. >> % Mivel impulzusválasznál a gerjesztés 1, ezért a felírandó egyenlet:
  187. >> % 0 = A*Xg + B*1
  188. >> % Vagyis matlabban:
  189. >> Xg = inv(A) * (-B)
  190.  
  191. Xg =
  192.  
  193.    -0.0698
  194.     0.0660
  195.  
  196. >> % A kezdeti feltételek érvényesítése a következő lépés
  197. >> % Tudjuk, hogy x(+0) = x(-0) = 0 = K1*m1 + K2*m2 + Xg
  198. >> % Ez mátrixokkal felírva: 0 = E*K + Xp
  199. >> % Vagyis matlabban:
  200. >> K = inv(E) * (-Xg)
  201.  
  202. K =
  203.  
  204.     0.0695
  205.    -0.0607
  206.  
  207. >> % Ez után következhet az ugrásválasz felírása
  208. >> % A képlet a következő:
  209. >> % gt = CT*x(t) + D*u(t) = CT*(xf(t)+xg(t)) + D*epszilon(t)
  210. >> % Ha ezt felbontjuk:
  211. >> % epszilon(t)*(K1*CT*m1*e^(lambda1*t)+ K2*CT*m2*e^(lambda2*t) + CT*Xg + D)
  212. >> % Ezt konstansokkal is kifejezhetjük:
  213. >> % epszilon(t)*(N1*e^(lambda1*t)+ N2*e^(lambda2*t) + N3)
  214. >> % Ez matlabban:
  215. >> N1 = K(1)*CT*E(:,1)
  216.  
  217. N1 =
  218.  
  219.    -0.0262
  220.  
  221. >> N2 = K(2)*CT*E(:,2)
  222.  
  223. N2 =
  224.  
  225.     0.2399
  226.  
  227. >> N3 = CT*Xg + D
  228.  
  229. N3 =
  230.  
  231.     0.3302
  232.  
  233. >> % Következhet a függvény felírása és az ábrázolás
  234. >> % Ehhez a linspace parancsot fogjuk használni
  235. >> % Ez a megadott intervallumot felosztja 1000 részre és az így kapott értékeket sorvektorként adja vissza
  236. >> % A 0-50usec időtartományt fogjuk vizsgálni, itt lezaljlanak a legfőbb változások
  237. >> t = linspace(0, 50, 1000);
  238.  
  239. >> % Írjuk fel az átmeneti fügvényt az előbb meghatározott konstansok segítségével
  240. >> gt = N1*exp(la(1,1)*t) + N2*exp(la(2,2)*t) + N3;
  241.  
  242. >> % Ábrázoljuk a függvényt
  243. >> figure
  244. >> plot(t,gt)
  245. >> xlabel("t[us]")
  246. >> ylabel("g(t)")
  247. >> title("Ugrásválasz")
  248.  
  249. >> % Ellenőrizhetjük a megoldásunkat úgy, hogy a matlab beépített rendszerét használjuk erre a problémára
  250. >> % Létrehoztatunk állapotváltozós leírást az ss() parancs segítségével. Ennek bemenő paraméterei a rendszer mátrixai
  251. >> sys = ss(A, B, CT, D)
  252.  
  253. sys =
  254.  
  255.   A =
  256.              x1        x2
  257.    x1  -0.05989   0.08535
  258.    x2   -0.6828    -8.958
  259.  
  260.   B =
  261.               u1
  262.    x1  -0.009819
  263.    x2     0.5438
  264.  
  265.   C =
  266.             x1       x2
  267.    y1  -0.6828   -3.958
  268.  
  269.   D =
  270.            u1
  271.    y1  0.5438
  272.  
  273. Continuous-time state-space model.
  274.  
  275. >> % A matlab beépített parancsát használhatjuk ugrásválasz meghatározásához
  276. >> figure
  277. >> step(sys, 50)
  278.  
  279. >> % Láthatjuk, hogy ugyan azt a választ kapjuk, mint saját számolásokkal, így biztos, hogy jól dolgoztunk
  280.  
  281. >> % Ez után következhet az impulzusválasz felírása
  282. >> % Ezt a legegyszerűbb felírni az ugrásválaszt általános deriváltjaként
  283. >> % A deriválás után alakja a következő:
  284. >> ft = la(1,1)*N1*exp(la(1,1)*t) + la(2,2)*N2*exp(la(2,2)*t);
  285.  
  286. >> % A változások megközelítőleg 1 us alatt lezajlanag, ezért
  287. >> t = linspace(0, 1, 1000);
  288.  
  289. >> % A megváltozott linspace miatt újra be kell vinni a plothoz
  290. >> ft = la(1,1)*N1*exp(la(1,1)*t) + la(2,2)*N2*exp(la(2,2)*t);
  291.  
  292. >> % Ábrázoljuk a függvényt
  293. >> figure
  294. >> plot(t,ft)
  295. >> xlabel("t[us]")
  296. >> ylabel("f(t)")
  297. >> title("Impulzusválasz")
  298.  
  299. >> % A matlab beépített parancsát használhatjuk impulzusválasz meghatározásához
  300. >> figure
  301. >> impulse(sys, 50)
  302.  
  303. >> % 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