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

📄 laguer.f90

📁 FORTRANvisualfortran常用数值算法集及源码
💻 F90
字号:
SUBROUTINE laguer(a,m,x,eps,polish)
COMPLEX a,x,dx,x1,b,d,f,g,h,sq,gp,gm,g2,zero
!dimension a(m+1)
DIMENSION a(*)
LOGICAL polish
PARAMETER (zero=(0.,0.),epss=6.e-8,maxit=100)
INTEGER iter,j
dxold=cabs(x)
do iter=1,maxit
  b=a(m+1)
  err=cabs(b)
  d=zero
  f=zero
  abx=cabs(x)
  do j=m,1,-1
    f=x*f+d
    d=x*d+b
    b=x*b+a(j)
    err=cabs(b)+abx*err
  end do
  err=epss*err
  if(cabs(b)<=err) then
    dx=zero
    return
  else
    g=d/b
    g2=g*g
    h=g2-2.*f/b
    sq=csqrt((m-1)*(m*h-g2))
    gp=g+sq
    gm=g-sq
    if(cabs(gp)<cabs(gm)) gp=gm
    dx=m/gp
  endif
  x1=x-dx
  if(x==x1) return
  x=x1
  cdx=cabs(dx)
  if(iter>6.and.cdx>=dxold) return
  dxold=cdx
  if(.not.polish) then
    if(cabs(dx)<=eps*cabs(x)) return
  endif
end do
PAUSE 'too many iterations'
END SUBROUTINE laguer

⌨️ 快捷键说明

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