Problem: Obtain unit step response of the second order system given by the transfer function
in order to illustrate the response when the system is over, under, and critically damped. use \(\omega _{n}=1\) and change \(\xi \) over a range of values that extends from under damped to over damped.
Mathematica
Clear["Global`*"]; Needs["PlotLegends`"] sys=TransferFunctionModel[w^2/(s^2+2*z*w*s+w^2),s]; zValues = Range[.2,1.2,.2]; fun = OutputResponse[sys/.{w->1,z->#}, UnitStep[t], {t,0,20}]&/@zValues; Plot[Evaluate@Flatten@Table[fun[[i]], {i,1,Length[fun]}], {t,0,20}, Frame->True, FrameLabel->{{"y(t)",None}, {"t","step response for different \[Xi] values"}}, PlotRange->{{0,20},{0,1.6}}, GridLines->Automatic, GridLinesStyle->Dashed, PlotLegend->zValues, LegendPosition->{0.76,-0.5},LegendSize -> 1, LegendLabel -> "\[Xi] values", ImageSize -> 450, LabelStyle -> 14,AspectRatio -> 1 ]
Matlab
clear; close all; wn = 1; z = .2:.2:1.2; t = 0:0.05:20; y = zeros(length(t),length(z)); legendStr = cell(length(z),1); for i = 1:length(z) [num,den] = ord2(wn,z(i)); num = num*wn^2; [y(:,i),~,~] = step(num,den,t); legendStr(i) = {sprintf('%1.1f',z(i))}; end plot(t,y); legend(legendStr); title(sprintf( '2nd order system step response with changing %s', '\zeta')); xlabel('time (sec)'); ylabel('amplitude'); grid on; set(gcf,'Position',[10,10,400,400]);
Maple
restart; alias(DS=DynamicSystems): H := (w,zeta)->w^2/(s^2+2*zeta*w*s+w^2): sys := (w,zeta)->DS:-TransferFunction(H(w,zeta)): zetaValues := [seq(i,i=0.1..1.2,.2)]: sol:=map(z->DS:-Simulate(sys(1,z), Heaviside(t)),zetaValues): c :=ColorTools:-GetPalette("Niagara"): plots:-display(seq(plots[odeplot] (sol[i],t=0..20,color=c[i], legend=typeset(zeta,"=",zetaValues[i]), legendstyle=[location=right]), i=1..nops(zetaValues)), gridlines=true, title="step response for different damping ratios", labels=[typeset(t),typeset(y(t))]);
Instead of using Simulate as above, another option is to use ResponsePlot
which gives same plot as above.
restart; alias(DS=DynamicSystems): c:=ColorTools:-GetPalette("Niagara"): H:=(w,zeta)->w^2/(s^2+2*zeta*w*s+w^2): sys:= (w,zeta)-> DS:-TransferFunction(H(w,zeta)): zetaValues := [seq(i,i=0.1..1.2,.2)]: sol:=map(i->DS:-ResponsePlot(sys(1,zetaValues[i]), Heaviside(t), duration=14, color=c[i], legend=typeset(zeta,"=",zetaValues[i]), legendstyle=[location=right] ), [seq(i,i=1..nops(zetaValues))] ): plots:-display(sol,gridlines=true, title="step response for different damping ratios", labels=[typeset(t),typeset(y(t))] );