数学建模社区-数学中国
标题:
wolf_powell线搜索方法
[打印本页]
作者:
ilikenba
时间:
2004-4-30 11:21
标题:
wolf_powell线搜索方法
<
> function wolf_powell(A,b,dir,gradt,x) result(wp_result)
: K' E" a! g. q& F) v9 f# ` s i
real,dimension(
,intent(in)::b,dir,gradt,x
1 g2 D+ \: Z- p. ] G
real,dimension(:,
,intent(in)::A
! U. E& B0 l$ c% J; c
real::a1,a2,f1,f2,a0,p,q,t,r,wp_result,gradt1(size(gradt)) ,r1
/ `5 c- L& D) p: \# r
t=2.0
8 m5 A/ z2 s2 |1 ^0 ~
a0=1
* _& t& ]# g0 T2 Q
p=0.1
j! w( A) Y* _0 |# C# Q. c
q=0.9
4 h& r5 a( ]" I' P
a1=0
' K. N8 {1 U" C6 }( m% f8 `' C% J
a2=100000
& d2 A+ n, C3 @# `
r=dot_product(dir,gradt)
" ]$ Q& @5 u" p4 u
f1=f(x,A,b)
* V( L$ @7 q( x- g5 w
10 f2=f(x+a0*dir,A,b)
% ]7 o5 u" _9 y- X) x
if(f2>f1+p*r*a0)then
% L0 t5 S4 y" W3 u' K6 |7 y
a2=a0
3 ^& P/ I/ a: K2 c$ ~
a0=a1+0.5*(a0-a1)/(1+(f1-f2)/(a0-a1)*r)
5 u0 r, I3 ?4 W; t9 _+ c- g/ J
goto 10
6 H6 {4 R2 X+ N' n1 {4 h1 J
else
" F# p E7 n3 h p% O
gradt1=matmul(A,x+a0*dir)+b
- Y2 V' j, E" {+ |: h9 y
r1=dot_product(gradt1,dir)
! Z+ |2 I8 c6 G2 M% Z. }$ Z
if(r1>=q*r)then
" T, n0 j" F& N- c( [% q
wp_result=a0
8 h' k4 d* f) l" c
else
6 A! z8 P; T% g) N; @' J- \
a1=a0
" x" p' u; c( A+ \, h- o- Y5 w
f1=f2
! M7 O' l# ^. r0 S* W
r=r1
) \3 S: H( H: p7 r! r, i
a0=a0+(a0-a1)*r1/(r-r1)
' H; L, }( ?/ d
goto 10
h) |3 k2 h! d: q7 j4 s3 ~
endif
& {: j* B, T! b: |. r
endif
) ]3 |4 D* P. Z6 ~; Z) T$ }
end function
- j4 m. ]+ ]! z. X! ^# _+ S& W
</P>
0 F$ |6 u6 A+ w, ^3 Q8 Z. n7 o" Q
<
>本程序由Fortran 90语言编写,在Visual Fortran 5上编译通过!本程序由沙沙提供!</P>
作者:
ammon
时间:
2007-5-24 18:52
真强,佩服,向您学习
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5