program erfenfa !
implicit none
real(8)::a,b,c,ex,x
print,"Please input:a,b,ex(精度)"
read,a,b,ex
call erfen(a,b,ex,x)
print*,x
end program erfenfa
subroutine erfen(a,b,ex,x)
implicit none
real(8)::a,b,c,ex,x,fa,fb,fc,f
do while(dabs(b-a)>=ex)
fa=f(a)
fb=f(b)
c=(a+b)/2
fc=f(c)
if(fafc>0)then
a=c
end if
if(fbfc>0)then
b=c
end if
if(fc==0)exit
end do
x=(a+b)/2
end subroutine erfen
function f(x) result(x_result)
implicit none
real(8)::x,x_result
x_result=xxx-x-1 !所需要进行二分法的函数
end function f
!Please input:a,b,ex(精度)
===========================================追赶法============
program zhuigan !
implicit none
real(8),dimension(:),allocatable::a,b,c,x,f
integer::n
print,"输入维度n"
read(,)n
allocate(a(n-1),b(n),c(n-1),f(n),x(n))
print,"输入nn的数组,存储A的三条对角元素:"
print,"一维矩阵a"
read(,)a
print,"一维矩阵b"
read(,)b
print,"一维矩阵c"
read(,)c
print,"等式右侧结果f(一维矩阵)"
read(,),f
call zhuiganfa(n,a,b,c,f,x)
print,x
end program zhuigan
!****************************************************
subroutine zhuiganfa(n,a,b,c,f,x)
implicit none
integer::i,j,k,m,n
real(8),dimension(n)::a,b,c,x,beta,f,y
beta(1)=c(1)/b(1)
do i=2,n-1
beta(i)=c(i)/(b(i)-a(i-1)beta(i-1))
end do
y(1)=f(1)/b(1)
do i=2,n
y(i)=(f(i)-a(i-1)y(i-1))/(b(i)-a(i-1)beta(i-1))
end do
x(n)=y(n)
do i=n-1,1,-1
x(i)=y(i)-beta(i)x(i+1)
end do
end subroutine zhuiganfa