Example of solve for root finding.
MGL code:
zrange 0 1 new x 20 30 '(x+2)/3*cos(pi*y)' new y 20 30 '(x+2)/3*sin(pi*y)' new z 20 30 'exp(-6*x^2-2*sin(pi*y)^2)' subplot 2 1 0:title 'Cartesian space':rotate 30 -40 axis 'xyzU':box xlabel 'x':ylabel 'y' origin 1 1:grid 'xy' mesh x y z # section along 'x' direction solve u x 0.5 'x' var v u.nx 0 1 evaluate yy y u v evaluate xx x u v evaluate zz z u v plot xx yy zz 'k2o' # 1st section along 'y' direction solve u1 x -0.5 'y' var v1 u1.nx 0 1 evaluate yy y v1 u1 evaluate xx x v1 u1 evaluate zz z v1 u1 plot xx yy zz 'b2^' # 2nd section along 'y' direction solve u2 x -0.5 'y' u1 evaluate yy y v1 u2 evaluate xx x v1 u2 evaluate zz z v1 u2 plot xx yy zz 'r2v' subplot 2 1 1:title 'Accompanied space' ranges 0 1 0 1:origin 0 0 axis:box:xlabel 'i':ylabel 'j':grid2 z 'h' plot u v 'k2o':line 0.4 0.5 0.8 0.5 'kA' plot v1 u1 'b2^':line 0.5 0.15 0.5 0.3 'bA' plot v1 u2 'r2v':line 0.5 0.7 0.5 0.85 'rA'
C++ code:
void smgl_solve(mglGraph *gr) // solve and evaluate { gr->SetRange('z',0,1); mglData x(20,30), y(20,30), z(20,30), xx,yy,zz; gr->Fill(x,"(x+2)/3*cos(pi*y)"); gr->Fill(y,"(x+2)/3*sin(pi*y)"); gr->Fill(z,"exp(-6*x^2-2*sin(pi*y)^2)"); gr->SubPlot(2,1,0); gr->Title("Cartesian space"); gr->Rotate(30,-40); gr->Axis("xyzU"); gr->Box(); gr->Label('x',"x"); gr->Label('y',"y"); gr->SetOrigin(1,1); gr->Grid("xy"); gr->Mesh(x,y,z); // section along 'x' direction mglData u = x.Solve(0.5,'x'); mglData v(u.nx); v.Fill(0,1); xx = x.Evaluate(u,v); yy = y.Evaluate(u,v); zz = z.Evaluate(u,v); gr->Plot(xx,yy,zz,"k2o"); // 1st section along 'y' direction mglData u1 = x.Solve(-0.5,'y'); mglData v1(u1.nx); v1.Fill(0,1); xx = x.Evaluate(v1,u1); yy = y.Evaluate(v1,u1); zz = z.Evaluate(v1,u1); gr->Plot(xx,yy,zz,"b2^"); // 2nd section along 'y' direction mglData u2 = x.Solve(-0.5,'y',u1); xx = x.Evaluate(v1,u2); yy = y.Evaluate(v1,u2); zz = z.Evaluate(v1,u2); gr->Plot(xx,yy,zz,"r2v"); gr->SubPlot(2,1,1); gr->Title("Accompanied space"); gr->SetRanges(0,1,0,1); gr->SetOrigin(0,0); gr->Axis(); gr->Box(); gr->Label('x',"i"); gr->Label('y',"j"); gr->Grid(z,"h"); gr->Plot(u,v,"k2o"); gr->Line(mglPoint(0.4,0.5),mglPoint(0.8,0.5),"kA"); gr->Plot(v1,u1,"b2^"); gr->Line(mglPoint(0.5,0.15),mglPoint(0.5,0.3),"bA"); gr->Plot(v1,u2,"r2v"); gr->Line(mglPoint(0.5,0.7),mglPoint(0.5,0.85),"rA"); }