home *** CD-ROM | disk | FTP | other *** search
- PROGRAM d10r5(input,output);
- (* driver for routine AMOEBA *)
- CONST
- np=3;
- mp=4;
- ftol=1.0e-6;
- TYPE
- glmpnp = ARRAY [1..mp,1..np] OF real;
- glmp = ARRAY [1..mp] OF real;
- glnp = ARRAY [1..np] OF real;
- VAR
- i,iter,j,ndim : integer;
- x : glnp;
- y : glmp;
- p : glmpnp;
-
- (*$I MODFILE.PAS *)
- (*$I BESSJ0.PAS *)
-
- FUNCTION func(x: glnp): real;
- (* calling function must define type
- TYPE
- glnp = ARRAY [1..np] OF real;
- where np is the physical dimension of the argument x. *)
- BEGIN
- func := 0.6-bessj0(sqr(x[1]-0.5)+sqr(x[2]-0.6)+sqr(x[3]-0.7))
- END;
-
- (*$I AMOEBA.PAS *)
-
- BEGIN
- p[1,1] := 0.0; p[1,2] := 0.0; p[1,3] := 0.0;
- p[2,1] := 1.0; p[2,2] := 0.0; p[2,3] := 0.0;
- p[3,1] := 0.0; p[3,2] := 1.0; p[3,3] := 0.0;
- p[4,1] := 0.0; p[4,2] := 0.0; p[4,3] := 1.0;
- ndim := np;
- FOR i := 1 to mp DO BEGIN
- FOR j := 1 to np DO BEGIN
- x[j] := p[i,j]
- END;
- y[i] := func(x)
- END;
- amoeba(p,y,ndim,ftol,iter);
- writeln;
- writeln('Iterations: ',iter:3);
- writeln('Vertices of final 3-d simplex and');
- writeln('function values at the vertices:');
- writeln;
- writeln('i':3,
- 'x[i]':10,'y[i]':12,'z[i]':12,'function':14);
- writeln;
- FOR i := 1 to mp DO BEGIN
- write(i:3);
- FOR j := 1 to np DO write(p[i,j]:12:6);
- writeln(y[i]:12:6)
- END;
- writeln;
- writeln('True minimum is at (0.5,0.6,0.7)')
- END.
-