Příklad - ukázka HUS

R1=10;
R2=10;
L=(10^(-3));
c=(10^(-6));
amplituda=10;
faze=0.8;
f=(10^6);
ω=2*Pi*f;
T=(1/f);
u1[t_]:=amplituda*Sin[ω*t+faze];

První způsob řešení

Klasické řešení metodou uzlových napětí (tak, jak to známe).

rceUzel={iR1[t]+iL[t]==iR2[t]+ic[t]};
rceSoucastek={iR1[t]==((u1[t]-u2[t])/R1),u1[t]-u2[t]==L*iL'[t],iR2[t]==((u2[t])/R2),ic[t]==c*u2'[t]};
pocPodminky={iL[0]==0,u2[0]==0};
tmax=20T;
rceDohromady=Union[rceSoucastek,rceUzel,pocPodminky];
nezname=Cases[rceDohromady,_Symbol[t],{0,∞}]//Union;

res=NDSolve[rceDohromady,nezname,{t,0,tmax},StartingStepSize->(10^(-9))][[1]];
plTimeDomain=Plot[u2[t]/.res,{t,0,tmax},AxesLabel->{"t[s]","u2[V]"},PlotRange->{Automatic,{-0.17,0.26}}]

Druhý způsob řešení

Vezmeme rovnice z klasického řešení a provedeme náhrady (na prvním řádku). Pak to vyřešíme jenom pomocí Solve (na druhém řádku). Už není potřeba NDSolve!

rceHUS=Union[rceSoucastek,rceUzel]/.{a_'[t]:>I*ω*a,a_[t]:>a,a_*Sin[b_+c_*t]:>a*Exp[I*b]};
resHUS=Solve[rceHUS][[1]];
Print["U1 fazor=  ",u2/.resHUS,"  V"]
u2HUS=Im[(u2/.resHUS)*Exp[I*ω*t]];
plHUS=Plot[u2HUS,{t,0,tmax},AxesLabel->{"t[s]","u2[V]"},PlotStyle->Hue[0],PlotRange->{Automatic,{-0.17,0.26}}]
Show[plHUS,plTimeDomain]

Třetí způsob řešení

Ukázka HUS přímo. Je to v podstatě totéž jako druhý způsob řešení, ale nepoužíváme rovnice z klasického řešení (které bychom upravili záměnami), nábrž rovnou píšeme rovnice pro HUS.

U1=u1[t]/.a_*Sin[b_+c_*t]:>a*Exp[I*b];
Print["U1 fazor=  ",U1,"  V"]
rceHUSprimo=((U1-U2)/R1)+((U1-U2)/(I*ω*L))==(U2/R2)+(U2/(1/(I*ω*c)));
Solve[rceHUSprimo][[1]]

Čtvrtý způsob řešení

Ukázka HUS jako dělič. Řešíme obvod jako odporový dělič.

Z1=(1/((1/R1)+(1/(I*ω*L))));
Z2=(1/((1/R2)+I*ω*c));
vystup=U1*(Z2/(Z1+Z2))