PROGRAM d10r7(input,output); (* driver for routine LINMIN *) (*$I MODFILE.PAS *) CONST ndim = 3; pio2 = 1.5707963; TYPE RealArrayNP = ARRAY [1..ndim] OF real; VAR LinminNcom: integer; LinminPcom,LinminXicom: RealArrayNP; fret,sr2,x: real; i,j: integer; p,xi: RealArrayNP; FUNCTION fnc(VAR x: RealArrayNP): real; (* calling routine must define type TYPE RealArrayNP = ARRAY [1..np] OF real; where np is the dimension of vector x. *) VAR i: integer; f: real; BEGIN f := 0.0; FOR i := 1 TO 3 DO f := f+sqr(x[i]-1.0); fnc := f END; (*$I F1DIM.PAS *) (*$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.