Lindo Systems

! Given a function of 2 variables,   (ChartPcontour.lng)
  1) Create Surface and Contour charts of it,
  2) Find a global minimum ; 
! Keywords: Chart, Graph, ChartPsurface, ChartPcontour, Global;
PROCEDURE bivariatefun:
  fval = x*@sin(y) + y*@sin(x);
ENDPROCEDURE

SUBMODEL bivariateopt:
  min = fxy;
  fxy = x*@sin(y) + y*@sin(x);
  @free( fxy);  ! It could be < 0;
  @bnd( lb, x, ub);
  @bnd( lb, y, ub);
ENDSUBMODEL

CALC:
  lb = -10; ! Lower bound for x & y;
  ub =  10; ! Upper bound for x & y;

 @CHARTPSURFACE( 'f(x,y)=x*sin(y)+y*sin(x)', ! Chart title;
      'X-axis', 'Y-axis', 'z-axis', ! Titles of the axes;
      bivariatefun, ! Name of function procedure;
      x, lb, ub,    ! X variable and bounds;
      y, lb, ub,    ! Y variable and bounds;
      'f(x,y)', fval); ! Output title and variable;

 @CHARTPCONTOUR( 'f(x,y)=x*sin(y)+y*sin(x)', ! Chart title;
      'X-axis', 'Y-axis', 'z-axis', ! Titles of the axes;
      bivariatefun, ! Name of function procedure;
      x, lb, ub,    ! X variable and bounds;
      y, lb, ub,    ! Y variable and bounds;
      'f(x,y)', fval); ! Output title and variable;

! Optimize it;
  @SET( 'GLOBAL',1);   ! Use Global solver? 0:No, 1:Yes; 
  @SOLVE( bivariateopt);

  @WRITE(' f(x,y) achieves a global minimum value = ', fxy,
         ', at x = ',x,', y = ',y, @NEWLINE(1));

ENDCALC