⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powell.f90

📁 FORTRANvisualfortran常用数值算法集及源码
💻 F90
字号:
SUBROUTINE powell(p,xi,n,np,ftol,iter,fret)
INTEGER iter,n,np,NMAX,ITMAX
REAL fret,ftol,p(np),xi(np,np),func
EXTERNAL func
PARAMETER (NMAX=20,ITMAX=200)
!USES func,linmin
INTEGER i,ibig,j
REAL del,fp,fptt,t,pt(NMAX),ptt(NMAX),xit(NMAX)
fret=func(p)
do  j=1,n
  pt(j)=p(j)
end do
iter=0
do
  do
    do
      iter=iter+1
      fp=fret
      ibig=0
      del=0.
      do i=1,n
        do j=1,n
          xit(j)=xi(j,i)
        end do
        fptt=fret
        call linmin(p,xit,n,fret)
        if(abs(fptt-fret)>del) then
          del=abs(fptt-fret)
          ibig=i
        endif
      end do
      if(2.*abs(fp-fret)<=ftol*(abs(fp)+abs(fret))) return
      if(iter==ITMAX) then
	    pause 'powell exceeding maximum iterations'
		return
	  end if
      do j=1,n
        ptt(j)=2.*p(j)-pt(j)
        xit(j)=p(j)-pt(j)
        pt(j)=p(j)
      end do
      fptt=func(ptt)
      if(fptt>=fp) exit
    end do
    t=2.*(fp-2.*fret+fptt)*(fp-fret-del)**2-del*(fp-fptt)**2
    if(t>=0.) exit
  end do
  call linmin(p,xit,n,fret)
  do j=1,n
    xi(j,ibig)=xi(j,n)
    xi(j,n)=xit(j)
  end do
end do
END SUBROUTINE powell

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -