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");
}