Example of pulse parameter determining.
MGL code:
subplot 1 1 0 '<_':title 'Pulse sample' new a 100 'exp(-6*x^2)':ranges 0 a.nx-1 0 1 axis:plot a pulse b a 'x' define m a.max line b(1) 0 b(1) m 'r=' line b(1)-b(3)/2 0 b(1)-b(3)/2 m 'm|' line b(1)+b(3)/2 0 b(1)+b(3)/2 m 'm|' line 0 0.5*m a.nx-1 0.5*m 'h' new x 100 'x' plot b(0)*(1-((x-b(1))/b(2))^2) 'g'
C++ code:
void smgl_pulse(mglGraph *gr) { gr->SubPlot(1,1,0,"<_"); if(big!=3) gr->Title("Pulse sample"); mglData a(100); gr->Fill(a,"exp(-6*x^2)"); gr->SetRanges(0, a.nx-1, 0, 1); gr->Axis(); gr->Plot(a); mglData b(a.Pulse('x')); double m = b[0]; gr->Line(mglPoint(b[1],0), mglPoint(b[1],m),"r="); gr->Line(mglPoint(b[1]-b[3]/2,0), mglPoint(b[1]-b[3]/2,m),"m|"); gr->Line(mglPoint(b[1]+b[3]/2,0), mglPoint(b[1]+b[3]/2,m),"m|"); gr->Line(mglPoint(0,m/2), mglPoint(a.nx-1,m/2),"h"); char func[128]; sprintf(func,"%g*(1-((x-%g)/%g)^2)",b[0],b[1],b[2]); gr->FPlot(func,"g"); }