数学建模社区-数学中国

标题: wolf_powell线搜索方法 [打印本页]

作者: ilikenba    时间: 2004-4-30 11:21
标题: wolf_powell线搜索方法
<> function wolf_powell(A,b,dir,gradt,x) result(wp_result)2 d9 R: D2 v5 D5 h$ W' W5 a
real,dimension(,intent(in)::b,dir,gradt,x2 ~  y) f8 @8 m% V
real,dimension(:,,intent(in)::A& J- g" ^: ?$ w- {0 v
real::a1,a2,f1,f2,a0,p,q,t,r,wp_result,gradt1(size(gradt)) ,r1
% e8 |5 n# o& w% a  z* C# b t=2.0
5 U; a" N& h0 t a0=11 ^& p) L0 `  j. D* G* b
p=0.1
3 v- N& j6 |6 H& u+ h  Q1 r4 c q=0.9
' T0 D* D3 O1 n( |( X a1=0
2 Y" _/ D0 A" L( o a2=100000
9 M  `  U* m% Q. } r=dot_product(dir,gradt)
( u. v% s# R* Y, Z1 \ f1=f(x,A,b)
1 a6 P: ]6 o" D2 W% e' X/ G10 f2=f(x+a0*dir,A,b)
6 F; w# z  U, [5 Z$ C9 x+ @8 y if(f2&gt;f1+p*r*a0)then
4 q4 `$ e6 I0 W* G) \     a2=a0
, C3 f( R* b; b  a0=a1+0.5*(a0-a1)/(1+(f1-f2)/(a0-a1)*r)
; o9 v! X# O/ b0 ^: y8 j* u  goto 10
2 I+ S" C- M6 ~) e else/ I& N4 ~0 @6 }4 e* g
     gradt1=matmul(A,x+a0*dir)+b; u. ?' k; j0 C
  r1=dot_product(gradt1,dir)! o4 t$ \* \( J$ j. }' C
  if(r1&gt;=q*r)then
& R/ y3 |& v/ J5 W       wp_result=a0" @1 r, p+ O# D% t
  else
) D5 h8 i2 y6 e* k8 @1 F       a1=a0
8 u. {1 F, j( l3 f& S    f1=f22 ?# C' S9 [+ }. U. T
    r=r1
; r1 e1 {* z, X: h    a0=a0+(a0-a1)*r1/(r-r1)
7 V+ U: s) S3 |8 B2 |2 E8 l! `    goto 10
, ]" O! e' ~, M' E- E  endif! `$ L8 R  P! j! L9 x- w4 t
endif" ^& R( g5 t2 F4 ^
end function, Y5 C2 E- I) a7 _. i4 u! g; _
</P>5 I- T; P0 R1 x: V; h2 I
<>本程序由Fortran 90语言编写,在Visual Fortran 5上编译通过!本程序由沙沙提供!</P>
作者: ammon    时间: 2007-5-24 18:52
真强,佩服,向您学习




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5