PROGRAM d10r7(input,output); (* driver for routine LINMIN *) CONST ndim=3; pio2=1.5707963; TYPE glnp = ARRAY [1..ndim] OF real; glndim = glnp; glnarray = glnp; VAR ncom : integer; pcom,xicom : glndim; fret,sr2,x : real; i,j : integer; p,xi : glnp; FUNCTION fnc(x : glnp) : real; (* calling routine must define type TYPE glnp = ARRAY [1..np] OF real; where np dimension of vector x. *) VAR i : integer; f : real; BEGIN f := 0.0; FOR i := 1 to 3 DO BEGIN f := f+sqr(x[i]-1.0) END; fnc := f END; (*$I MODFILE.PAS *) (*$I F1DIM.PAS *) FUNCTION func(x: real): real; BEGIN func := f1dim(x) END; (*$I MNBRAK.PAS *) (*$I BRENT.PAS *) (*$I LINMIN.PAS *) BEGIN writeln; writeln('Minimum of a 3-d quadratic centered'); writeln('at (1.0,1.0,1.0). Minimum is found'); writeln('along a series of radials.'); writeln; writeln('x':9,'y':12,'z':12,'minimum':14); FOR i := 0 to 10 DO BEGIN x := pio2*i/10.0; sr2 := sqrt(2.0); xi[1] := sr2*cos(x); xi[2] := sr2*sin(x); xi[3] := 1.0; p[1] := 0.0; p[2] := 0.0; p[3] := 0.0; linmin(p,xi,ndim,fret); FOR j := 1 to 3 DO write(p[j]:12:6); writeln(fret:12:6) END END.