11.84 Sample ‘mode

Example of mode.

MGL code:

define n 100
define kdx 0.5
crange 0 1
define $v 0.027
new m2 n n '(x^2<0.5)*(y^2<0.5)'
subplot 2 2 1 '<_'
axis:box:cont 0.5 m2 'k='
text 0.5 0.9 'linear' 'a';size -1.4
new v n n '$v'
mode v m2 '0' kdx
dens v/v.max 'wyrRk'

subplot 2 2 2 '<_'
axis:box:cont 0.5 m2 'k='
text 0.5 0.9 'defocusing' 'a';size -1.4
new v n n '$v'
mode v m2 '0-' kdx
dens v/v.max 'wyrRk'

subplot 2 2 3 '<_'
axis:box:cont 0.5 m2 'k='
text 0.5 0.9 'focusing' 'a';size -1.4
new v n n '$v'
mode v m2 '0+' kdx
dens v/v.max 'wyrRk'

subplot 2 2 0 '<_'
yrange 0 0.4
new m1 n '(x^2<0.5)'
plot m1 'k='
axis:box
define $u 0.1

new u n '$u'
mode u m1 '0' kdx
plot u '2b';legend '0'
new u n '$u'
mode u m1 '1' kdx
plot u '2m';legend '1'
new u n '$u'
mode u m1 'r' kdx
plot u '2c';legend 'r'
new u n '$u'
mode u m1 '0-' kdx
plot u '2g';legend '0--'
new u n '$u'
mode u m1 '0+' kdx
plot u '2r';legend '0+'
legend

C++ code:

void smgl_mode(mglGraph *gr)
{
	const long n=100;
	const double kdx=0.5, V = 0.027, U = 0.1;
	mglData m2(n,n), m1(n), v(n,n), u(n);
	gr->Fill(m2,"(x^2<0.5)*(y^2<0.5)");
	gr->Fill(m1,"(x^2<0.5)");
	mglDataV cv(1,1,1,0.5);
	gr->SetRange('c',0,1);

	gr->SubPlot(2,2,1,"<_");	gr->Axis();	gr->Box();	gr->Cont(cv,m2,"k=");
	gr->Puts(0.5,0.9,"linear","a",-1.4);
	v.Fill(V);	v.Mode(m2,"0",kdx);	v /= v.Maximal();	gr->Dens(v,"wyrRk");

	gr->SubPlot(2,2,2,"<_");	gr->Axis();	gr->Box();	gr->Cont(cv,m2,"k=");
	gr->Puts(0.5,0.9,"defocusing","a",-1.4);
	v.Fill(V);	v.Mode(m2,"0-",kdx);	v /= v.Maximal();	gr->Dens(v,"wyrRk");

	gr->SubPlot(2,2,3,"<_");	gr->Axis();	gr->Box();	gr->Cont(cv,m2,"k=");
	gr->Puts(0.5,0.9,"focusing","a",-1.4);
	v.Fill(V);	v.Mode(m2,"0+",kdx);	v /= v.Maximal();	gr->Dens(v,"wyrRk");

	gr->SubPlot(2,2,0,"<_");	gr->SetRange('y',0,0.4);
	gr->Axis();	gr->Box();	gr->Plot(m1, "k=");
	u.Fill(U);	u.Mode(m1,"0",kdx); 	gr->Plot(u,"2b","legend '0'");
	u.Fill(U);	u.Mode(m1,"1",kdx); 	gr->Plot(u,"2m","legend '1'");
	u.Fill(U);	u.Mode(m1,"r",kdx); 	gr->Plot(u,"2c","legend 'r'");
	u.Fill(U);	u.Mode(m1,"0-",kdx);	gr->Plot(u,"2g","legend '0--'");
	u.Fill(U);	u.Mode(m1,"0+",kdx);	gr->Plot(u,"2r","legend '0+'");
	gr->Legend();
}

Sample mode