数学建模社区-数学中国
标题:
wolf_powell线搜索方法
[打印本页]
作者:
ilikenba
时间:
2004-4-30 11:21
标题:
wolf_powell线搜索方法
<
> function wolf_powell(A,b,dir,gradt,x) result(wp_result)
* r8 c# @# |2 s7 H/ c: B+ B
real,dimension(
,intent(in)::b,dir,gradt,x
K: J- i/ |6 _0 ]# ?
real,dimension(:,
,intent(in)::A
4 G+ z( R6 M% V9 P/ c
real::a1,a2,f1,f2,a0,p,q,t,r,wp_result,gradt1(size(gradt)) ,r1
+ U& e3 m- T' Z Z0 n( o( R! }1 ]
t=2.0
- u! T- t" y! y" `7 H/ R4 H& }+ h, Z
a0=1
- N5 [ [% b& z. d7 K
p=0.1
* L, r) c1 V, C
q=0.9
/ L7 z8 m# H. E3 p) t4 M
a1=0
0 g3 g x) N; ~1 R
a2=100000
. k7 O4 A& L( _' M# L% T6 }
r=dot_product(dir,gradt)
0 G8 T4 X* i( T* v
f1=f(x,A,b)
& H2 m' }' o9 c
10 f2=f(x+a0*dir,A,b)
# }% X4 J7 A; _: c4 A
if(f2>f1+p*r*a0)then
0 Q8 I5 A1 f7 B6 ^; B
a2=a0
% {# Z. W" ?- x& R" \ f
a0=a1+0.5*(a0-a1)/(1+(f1-f2)/(a0-a1)*r)
4 V8 k5 G5 W; B. k$ h
goto 10
& U' B+ T1 L: Z& ], _2 E
else
2 B' I7 E' Z% z/ U+ X5 p
gradt1=matmul(A,x+a0*dir)+b
, j! X( c5 F8 R4 p! D& X0 }
r1=dot_product(gradt1,dir)
* b4 Q2 w B5 }# P
if(r1>=q*r)then
1 K; M. `" o! \" e: Z4 P
wp_result=a0
; X) P; L3 j% ~1 @$ E. Z9 @
else
- q( c% V- a( `% v8 }9 L3 l
a1=a0
: x Y" W% U- S; y
f1=f2
a! V) j6 ` ?4 g0 h. \: @
r=r1
4 M- z9 p7 k* c, q" M, k7 T k$ L
a0=a0+(a0-a1)*r1/(r-r1)
2 I: R2 S) A8 ?5 b6 \8 r" v/ l
goto 10
: T. }4 {1 b0 A# Q9 [
endif
: L, {1 R$ S9 l% r
endif
5 [; l1 ?5 j+ T$ `/ k5 Z) W/ q) W
end function
. D' s, R4 F) C) s% k
</P>
3 C, J$ O& e) Z2 \: q3 X4 Y R* s9 H
<
>本程序由Fortran 90语言编写,在Visual Fortran 5上编译通过!本程序由沙沙提供!</P>
作者:
ammon
时间:
2007-5-24 18:52
真强,佩服,向您学习
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5