home *** CD-ROM | disk | FTP | other *** search
- PROGRAM d10r6(input,output);
- (* driver for routine POWELL *)
- CONST
- ndim=3;
- ftol=1.0e-6;
- TYPE
- glnarray = ARRAY [1..ndim] OF real;
- glndim = glnarray;
- glnpbynp = ARRAY [1..ndim,1..ndim] OF real;
- gl3array = glnarray;
- VAR
- ncom : integer;
- pcom,xicom : glnarray;
- fret : real;
- i,iter,j,np : integer;
- p : glnarray;
- xi : glnpbynp;
-
- (*$I MODFILE.PAS *)
- (*$I BESSJ0.PAS *)
-
- FUNCTION fnc(x: gl3array): real;
- (* Programs using FNC must define the type
- TYPE
- gl3array = ARRAY [1..3] OF real;
- in the main routine. *)
- BEGIN
- fnc := 0.5-bessj0(sqr(x[1]-1.0)+sqr(x[2]-2.0)+sqr(x[3]-3.0))
- END;
-
- (*$I F1DIM.PAS *)
-
- FUNCTION func(x: real): real;
- BEGIN
- func := f1dim(x)
- END;
-
- (*$I MNBRAK.PAS *)
-
- (*$I BRENT.PAS *)
-
- (*$I LINMIN.PAS *)
-
- (*$I POWELL.PAS *)
-
- BEGIN
- np := ndim;
- xi[1,1] := 1.0; xi[1,2] := 0.0; xi[1,3] := 0.0;
- xi[2,1] := 0.0; xi[2,2] := 1.0; xi[2,3] := 0.0;
- xi[3,1] := 0.0; xi[3,2] := 0.0; xi[3,3] := 1.0;
- p[1] := 1.5; p[2] := 1.5; p[3] := 2.5;
- powell(p,xi,ndim,np,ftol,iter,fret);
- writeln('Iterations:',iter:3);
- writeln;
- writeln('Minimum found at: ');
- FOR i := 1 to ndim DO write(p[i]:12:6);
- writeln;
- writeln;
- writeln('Minimum function value =',fret:12:6);
- writeln;
- writeln('True minimum of function is at:');
- writeln(1.0:12:6,2.0:12:6,3.0:12:6)
- END.
-