%% Lezárt kétkapu helyettesítése
% 
% H karakterisztikával adott kétkapu primer oldalon feszültséggenerátor,
% szekunder oldalon terhelő ellenállással
% 
%% 1. Helyettesítő kapcsolás meghatározása 
% a. szakadással lezárás 
syms Gb I0 u1 u2 i1 i2 H11 H12 H21 H22 Rt 

eq1 = u1 == H11*i1 + H12*u2; 
eq2 = i2 == H21*i1 + H22*u2;
eq3 = i1 + Gb*u1 - I0 == 0;
eq4a = i2 == 0;

solsz = solve([eq1, eq2, eq3, eq4a], [u1,i1,u2,i2]);

UT = solsz.u2; 
pretty(collect(UT));

%% b. rövidzáras lezárás 
% Felhasználjuk a korábbi egyenleteket! 4a helyett kell másik! 
% (Ez a szekunder oldali lezárást jelenti!) 
eq4b = u2 == 0;

solrz = solve([eq1,eq2,eq3,eq4b],[u1,i1,u2,i2]);

irz = -solrz.i2;
IN = -irz;
pretty(collect(IN));

%% c. Belső ellenállás 
% Ezt a korábbiak alapján tudjuk kiszámítani. 
RB = -UT/IN;
pretty(simplify(collect(RB)));

%% d. Tetszőleges terhelő ellenállás esetén is megoldható a dolog! 
% Figyeljünk arra, hogy a kapott összefüggést nem érdemes megjegyezni, csak
% a gondolatmenet általános voltára volt példa. 
eq4 = u2 == -i2*Rt;

sol = solve([eq1, eq2, eq3, eq4], [u1, i1, u2, i2]);
ut = sol.u2;
pretty(simplify(collect(ut)));

%% 2. Hatarozzuk meg adott értékek esetében a helyettesítő kapcsolást 
% a. 
% H = [2 kOhm 0.7; -0.9 3 mS]; I0 = 5 mA, Gb = 10 mS; Rb = 2 kOhm

% megoldas a szimbolikus megoldasbol helyettesitessel 
UTnum = subs(UT, {H11, H12, H21, H22, I0, Gb}, {2, 0.7, -0.9, 3,50, 10});
INnum = subs(IN, {H11, H12, H21, H22, I0, Gb}, {2, 0.7, -0.9, 3,50, 10});
RBnum = subs(RB, {H11, H12, H21, H22, I0, Gb}, {2, 0.7, -0.9, 3,50, 10});
fprintf('UT = %10f IN = %10f RB = %10f\n',double(UTnum), double(INnum), double(RBnum));
%% 2/b. megoldas a numerikus egyenletek megoldasaval
HH = [2 0.7;-0.9 3]; GB = 10; I0n = 50; RT = 2;
Asz = [1 -HH(1,1) -HH(1,2) 0;0 -HH(2,1) -HH(2,2) 1;GB 1 0 0;0 0 0 1];
Bsz = [0;0;I0n;0];
xsz = Asz \ Bsz;
UTn = xsz(3);

Arz = Asz; Arz(4,:) = [0 0 1 0];Brz = Bsz;
xrz = Arz \ Brz;
% irz = -i2; IN = - irz ==> IN = i2 !!
INn = xrz(4);

RBn = - UTn/INn;
fprintf('UT = %10f IN = %10f RB = %10f\n',UTn, INn, RBn);

%% 3. Megoldas numerikus kiserletezessel 
% Megoldjuk Rt-re, ahol Rt tetszoleges terheles. Megkeressuk melyik Rt
% eseten lesz a teljesitmeny maximalis. 
Rtv = 0.01:0.01:10;
utv = zeros(size(Rtv)); Ptv = zeros(size(Rtv));
for id=1:length(Rtv)
  RT = Rtv(id);
  A = [1 -HH(1,1) -HH(1,2) 0;0 -HH(2,1) -HH(2,2) 1;GB 1 0 0;0 0 1 RT];
  B = [0;0;I0n;0];
  x = A \ B;
  utv(id) = x(3); Ptv(id) = x(3)^2./RT;
end

%% Keressuk meg a maximalis teljesitmenyt! 
Pmax = max(Ptv);
idx = find(Ptv==Pmax);
Rbelso = Rtv(idx); 
fprintf('Pmax = %10f Rb = %10f Ut = %10f\n',Pmax, Rbelso,utv(idx));

%% abrazolas
figure; 
plot(Rtv, Ptv, 'r-', 'LineWidth', 2); xlabel('Rt'); ylabel('Pt'); 

% abrazoljuk a maximalis pontot 
hold on; plot(Rbelso, Pmax, 'bo','MarkerSize', 10, 'MarkerFaceColor','b');
