6 subroutine minf_nm(id,rd,n,x,maxit,iter,eps)
9 integer,
intent(in) :: id(*)
10 real(8),
intent(in) :: rd(*)
11 integer,
intent(in) :: n
12 real(8),
intent(inout) :: x(n,n+1)
13 integer,
intent(in) :: maxit
14 integer,
intent(out) :: iter
15 real(8),
intent(in) :: eps
19 real(8),
parameter :: alpha=1.d0,gamma=2.d0
20 real(8),
parameter :: beta=0.5d0,sigma=0.5d0
21 real(8) fr,fe,fc,sm,t1
23 real(8) f(n+1),xm(n),xr(n),xe(n),xc(n)
25 real(8),
external :: fmin_nm
28 write(*,
'("Error(minf_nm): n < 1 : ",I8)') n
34 f(i)=fmin_nm(id,rd,x(:,i))
39 if (iter >= maxit)
return 44 if (f(i) < f(il)) il=i
45 if (f(i) > f(iu)) iu=i
48 if ((f(iu)-f(il)) < eps)
return 61 xr(:)=xm(:)+alpha*(xm(:)-x(:,iu))
63 if (f(il) > fr)
goto 30
64 if ((f(il) <= fr).and.(fr < f(iu)))
then 73 xe(:)=xm(:)+gamma*(xr(:)-xm(:))
86 xc(:)=xm(:)+beta*(x(:,iu)-xm(:))
96 x(:,j)=x(:,il)+sigma*(x(:,j)-x(:,il))
97 f(j)=fmin_nm(id,rd,x(1,j))
100 x(:,j)=x(:,il)+sigma*(x(:,j)-x(:,il))
101 f(j)=fmin_nm(id,rd,x(1,j))
subroutine minf_nm(id, rd, n, x, maxit, iter, eps)