Program ljhjfg
Implicit none
Real x10,x20,a,b,z1,z2,fz1,fz2,m,n,e,c
integer k
Write(*,*)"搜索区间为(1,7),搜索方向为(0.7071,0.7071),迭代精度为0.1,初始点坐标为(2,2)"
a=1
b=7
m=0.7071
n=0.7071
e=0.1
x10=2
x20=2
10 k=0
Do while(abs(b-a)>e)
k=k+1
Z1=a+0.382*(b-a)
Z2=a+0.618*(b-a)
Fz1=(x10+m*z1)**2+(x20+m*z1)**2-8*(x10+m*z1)-12*(x20+m*z1)+52
Fz2=(x10+m*z2)**2+(x20+m*z2)**2-8*(x10+m*z2)-12*(x20+m*z2)+52
If(fz1>=fz2)then
a=z1
z1=z2
fz1=fz2
z2=a+0.618*(b-a)
fz2=(x10+m*z2)**2+(x20+m*z2)**2-8*(x10+m*z2)-12*(x20+m*z2)+52
else
b=z2
z2=z1
fz2=fz1
z1= a+0.382*(b-a)
Fz1=(x10+m*z1)**2+(x20+m*z1)**2-8*(x10+m*z1)-12*(x20+m*z1)+52
end if
end do
write(*,*)"q=",(a+b)/2
write(*,*)"迭代次数k=",k
write(*,*)"最优点各分量:",x10+m*(a+b)/2,x20+m*(a+b)/2
write(*,*)"最小值为:",(x10+m*(a+b)/2)**2+(x20+m*(a+b)/2)**2-8*(x10+m*(a+b)/2)-12*(x20+m*(a+b)/2)+52
100 write(*,*)"请输入希望改变的初始条件序号: 1搜索区间端点 2探索方向 3迭代精度 4初始点坐标"
read(*,*)c
if(c==1)then
write(*,*)"请输入新的搜索区间端点a,b:"
read(*,*)a,b
goto 10
elseif(c==2)then
write(*,*)"请输入新的探索方向(m,n):"
read(*,*)m,n
goto 10
elseif(c==3)then
write(*,*)"请输入新的迭代精度e:"
read(*,*)e
goto 10
elseif(c==4)then
write(*,*)"请输入新的初始点坐标(x10,x20):"
read(*,*)x10,x20
goto 10
else
goto 100
endif
stop
end program