ilikenba 发表于 2004-4-30 11:21

wolf_powell线搜索方法

<P> function wolf_powell(A,b,dir,gradt,x) result(wp_result)
real,dimension(:),intent(in)::b,dir,gradt,x
real,dimension(:,:),intent(in)::A
real::a1,a2,f1,f2,a0,p,q,t,r,wp_result,gradt1(size(gradt)) ,r1
t=2.0
a0=1
p=0.1
q=0.9
a1=0
a2=100000
r=dot_product(dir,gradt)
f1=f(x,A,b)
10 f2=f(x+a0*dir,A,b)
if(f2&gt;f1+p*r*a0)then
     a2=a0
  a0=a1+0.5*(a0-a1)/(1+(f1-f2)/(a0-a1)*r)
  goto 10
else
     gradt1=matmul(A,x+a0*dir)+b
  r1=dot_product(gradt1,dir)
  if(r1&gt;=q*r)then
       wp_result=a0
  else
       a1=a0
    f1=f2
    r=r1
    a0=a0+(a0-a1)*r1/(r-r1)
    goto 10
  endif
endif
end function
</P>
<P>本程序由Fortran 90语言编写,在Visual Fortran 5上编译通过!本程序由沙沙提供!</P>

ammon 发表于 2007-5-24 18:52

真强,佩服,向您学习
页: [1]
查看完整版本: wolf_powell线搜索方法