- 积分
- 61
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2016-1-19
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2016-8-28 14:45:08
|
显示全部楼层
program mian
implicit none
real x(3,2),f(3),xh(2),xl(2),x0(2),xr(2),xe(2),xc(2)
integer i,k
real fh,fl,fs,f0,fr,fe,fc,t,q
external num
read*,x
fh=-10
fl=100
fs=0
t=0
q=1
call num(x(1,1:2),f(1))
call num(x(2,1:2),f(2))
call num(x(3,1:2),f(3))
do while(q.gt.0.2)
do i=1,3
if(fh.lt.f(i))then
fh=f(i)
xh=x(i,1:2)
k=i
end if
end do
do i=1,3
if(fl.gt.f(i))then
fl=f(i)
xl=x(i,1:2)
end if
end do
do i=1,3
if((f(i).lt.fh).and.(f(i).gt.fl))then
fs=f(i)
end if
end do
print*,fh,xh,fl,xl
x0=(x(1,1:2)+x(2,1:2)+x(3,1:2)-xh)/2
call num(x0,f0)
xr=2*x0-xh
call num(xr,fr)
if(fr.lt.fl)then
xe=2*xr-x0
call num(xe,fe)
if(fe.lt.fl)then
x(k,1:2)=xe
f(k)=fe
xh=xe
fh=fe
else if(fe.ge.fl)then
x(k,1:2)=xr
f(k)=fr
xh=xr
fh=fr
end if
else if(fr.ge.fl)then
if(fr.gt.fl)then
if(fr.gt.fh)then
xc=0.5*xh+0.5*x0
call num(xc,fc)
else if(fr.le.fh)then
xh=xr
fh=fr
xc=0.5*xh+0.5*x0
call num(xc,fc)
end if
if(fc.gt.fh)then
do i=1,3
x(i,1:2)=(x(i,1:2)+xl)/2
end do
else if(fc.le.fh)then
x(k,1:2)=xc
f(k)=fc
xh=xc
fh=fc
end if
end if
end if
do i=1,3
t=t+(f(i)-f0)**2
end do
q=sqrt(t/3)
print*,x,q
end do
end program
!外部子列行程序
subroutine num(a,s)
implicit none
real a(2),s
s=a(1)-a(2)+2*a(1)**2+2*a(1)*a(2)+a(2)**2
end subroutine num
|
|