include 'bisecc.f' !Incluyo la subrutina del metodo de biseccion
implicit real*8 (a-h,o-z) !Trabajo en doble precision
external f !La funcion vendra definida debajo del end program
real*8 f !Tanto ella como la subrutina,en doble precision
b=0.1D0
pi=acos(-1.0D0) !Declaro el valor de pi
xl1=b !El valor que le doy desde la izquierda
xr1=1.D0 !El valor que le doy desde la derecha
xl2=xr1+b
xr2=2.D0
xl3=xr2+b
xr3=3.D0
xl4=xr3+b
xr4=3.5D0
xl5=xr4+b
xr5=4.D0
xl6=xr5+b
xr6=5.D0
xl7=xr6+b
xr7=6.D0
xl8=xr7+b
xr8=7.D0
kmax=100 !Numero de iteraciones maximo
tol=0.0001D0 !Tolerancia del 0.01%
call bisecc(f,xl1,xr1,kmax,tol,k,xm1) !Llamo a la subrutina
call bisecc(f,xl2,xr2,kmax,tol,k,xm2) !Llamo a la subrutina
call bisecc(f,xl3,xr3,kmax,tol,k,xm3) !Llamo a la subrutina
call bisecc(f,xl4,xr4,kmax,tol,k,xm4) !Llamo a la subrutina
call bisecc(f,xl5,xr5,kmax,tol,k,xm5) !Llamo a la subrutina
call bisecc(f,xl6,xr6,kmax,tol,k,xm6) !Llamo a la subrutina
call bisecc(f,xl7,xr7,kmax,tol,k,xm7) !Llamo a la subrutina
call bisecc(f,xl8,xr8,kmax,tol,k,xm8) !Llamo a la subrutin
stop
end program
*功能在主程序之外,这与其他问题中的代码相同......
real*8 function f(psi)
implicit real*8 (a-h,o-z)
real*8 M(8)
e=0.2056D0
pi=acos(-1.0D0)
M=(/pi/4.D0,pi/2.D0,3.D0/4.D0*pi,pi,5.D0/4.D0*pi,3.D0*
& pi/2.D0,7.D0/4.D0*pi,2.D0*pi/)
c=sqrt((1.0D0-e)/(1.0D0+e))
do i=1,8
f=psi-e*sin(psi)-M(i)
end do
return
end function
为什么我的函数只使用最后一个值f=psi-e*sin(psi)-M(8)
而不是f
的所有值(像这样):
f=psi-e*sin(psi)-M(1:8)
?
有没有办法可以获得所有值而不是最后的结果?