- 41
- 0
- 约4.58万字
- 约 21页
- 2020-10-07 发布于浙江
- 举报
数值分析第三次作业
设计方案
对Fredholm积分方程,用迭代法进行求解:
,其中
对于公式中的积分部分用数值积分方法。
复化梯形积分法,取2601个节点,取迭代次数上限为50次。实际计算迭代次数为18次,最后算得误差为r= 0.97E-10。
复化Simpson积分法,取迭代次数上限为50次,取2*41+1,即83个节点时能满足精度要求。实际计算迭代次数为17次,最后的误差为 r= 0.97E-10。
Guass积分法选择的Gauss—Legendre法,取迭代次数上限为50次,直接选择8个节点,满足精度要求。实际计算迭代次数为24次,最后算得误差为r= 0.87E-10。
全部源程序
module integral
implicit none
contains
!//////////复化梯形
subroutine trapezoid(m)
implicit none
integer :: i,j,k,m
real*8 :: x(m+1),u(m+1)
real*8 :: sum,sum1,g,r,h
real*8 :: e=1.0e-10
h=2./m
do i=1,m+1
x(i)=-1.+(i-1)*h
end do
u=0.02
do k=1,50
do i=1,m+1
sum1=0.
g=dexp(x(i)*4.)+(dexp(x(i)+4.)-dexp(-4.-x(i)))/(x(i)+4.)
do j=2,m
sum1=sum1+dexp(x(i)*x(j))*u(j)
end do
sum=h/2.*(dexp(x(i)*-1.)*u(1)+dexp(x(i)*1.)*u(m+1)+2*sum1)
u(i)=g-sum
end do
r=h/2.*((dexp(x(1)*4)-u(1))**2+(dexp(x(m+1)*4)-u(m+1))**2)
do i=2,m
r=r+h*(dexp(x(i)*4)-u(i))**2
end do
if(dabs(r)=e) exit
end do
write(*,*) k
open(1,file=trapezoid.txt)
do i=1,m+1
write(1,(3(f18.12))) x(i),u(i),dexp(x(i)*4.)
end do
write(1,(4x,a2,e9.2)) r=,r
close(1)
return
end subroutine trapezoid
!///////////复化simpson
subroutine simpson(m)
implicit none
integer :: i,j,k,m
real*8 :: x(2*m+1),u(2*m+1)
real*8 :: sum,sum1,sum2,g,r,h
real*8 :: e=1.0e-10
h=2./(2.*m)
do i=1,2*m+1
x(i)=-1.+(i-1)*h
end do
u=0.02
do k=1,50
do i=1,2*m+1
sum1=0.
sum2=0.
g=dexp(x(i)*4.)+(dexp(x(i)+4.)-dexp(-4.-x(i)))/(x(i)+4.)
do j=1,m
sum1=sum1+dexp(x(i)*x(2*j))*u(2*j)
end do
do j=1,m-1
sum2=sum2+dexp(x(i)*x(2*j+1))*u(2*j+1)
end do
sum=h/3.*(dexp(x(i)*-1.)*u(1)+dexp(x(i)*1.)*u(2*m+1)+4*sum1+2*sum2)
u(i)=g-sum
end do
r=h/3.*((dexp(x(1)*4)-u(1))**2+(dexp(x(2*m+1)*4)-u(2*m+1))**2)
do i=1,m
r=r+4.*h/3.*(dexp(x(2*i)*4)-u(2*i))**2
end do
do i=1,m-1
r=r+2.*h/3.*(dexp(x(2*i+1)*4)-u(2*i+1))**2
end do
if(dabs(r)=e) exit
end do
write(*,*) k
open(2,file=simpson.txt)
do i=1,2*m+1
write(2,(3(f18.12))) x(i),u(i),dexp(x(i)*4.)
end do
write(2,(4x,a2,e9.2)) r=,r
close
原创力文档

文档评论(0)