Question: Subprocedures in a main procedure

How to add any/many subprocedure in a mainprocedure?
Somehow the mainprocedure must deliver the input for the mainprocedure

Here is a example 

Note: probably can this old procedure be rewritten in modern Maple programming language ?  

> 

restart;

 

Code to Find the Max and Min Values in a List A

 

> 

maxmin:=proc(A,maxv::evaln,minv::evaln)

> 

   local i;

> 

   maxv:=A[1]; minv:=A[1];

> 

   for i from 2 to nops(A) do

> 

     if eval(maxv) < A[i] then maxv:=A[i] end if;

> 

     if eval(minv) > A[i] then minv:=A[i] end if;

> 

   end do;

> 

   RETURN()

> 

end proc:

> 

 

Now we can call the maxmin procedure from a procedure named optimize, which is designed to create the polygonal approximation, use maxmin to find the largest and smallest y-values from among the vertices, and produce some graphic output.

See the documentation in the book.

 

Code to Approximate the Max and Min Values of a Function  f :

 

> 

optimize:=proc(f,a,b,N,pic::evaln)

> 

  local X,Y,L,i,A,xmax,xmin;

> 

  X:=array(0..N);Y:=array(0..N);L:=array(0..N);

> 

  with(plots,display);

> 

  for i from 0 to N do

> 

    X[i]:=evalf(a+i*(b-a)/N);

> 

    Y[i]:=f(X[i]);

> 

    L[i]:=plot([[X[i],0],[X[i],Y[i]]],color=black):

> 

  end do;

> 

  A:=[seq(Y[i-1],i=1..N+1)];

> 

  maxmin(A,maxv,minv); # USE OF SECOND PROCEDURE --------------

> 

  xmax:={};xmin:={};

> 

  for i from 0 to N do

> 

    if Y[i]=maxv then xmax:=xmax union {X[i]} end if;

> 

    if Y[i]=minv then xmin:=xmin union {X[i]} end if;

> 

  end do; #----------------------------------------------------

> 

  pic:=display({seq(L[i],i=1..N)}):

> 

  print(`maximum y value is`,maxv,`and occurs at these x values`,xmax);

> 

  print(`minimum y value is`,minv,`and occurs at these x values`,xmin);

> 

  end proc:

> 

 

Note that you must execute the code that defines maxmin before the procedure optimize will work. This only make sense.

 

We test the optimize procedure with the following function

 

> 

f:=x->3+10*(-x^2+x^4)*exp(-x^2);

proc (x) options operator, arrow; 3+10*(-x^2+x^4)*exp(-x^2) end proc

(1)

on the interval [-1, 4].

 

> 

optimize(f,-1,4,150,pic);

`maximum y value is`, 6.088066652, `and occurs at these x values`, {1.633333333}

 

`minimum y value is`, 1.391538737, `and occurs at these x values`, {-.6333333333, .6333333333}

(2)
> 

pic;

 

 

Download procedure_en_subprocedures.mw

Please Wait...