急,高手帮我看看这个fortran求积分的程序哪错了,为什么运行不出来结果.
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/03 14:56:44
急,高手帮我看看这个fortran求积分的程序哪错了,为什么运行不出来结果.
program f915
implicit none
external f1,f2,f3
double precision a,b,simps
write(*,*)'a,b'
read(*,*)a,b
write(*,*)simps(a,b,1d-7,f1)
write(*,*)simps(a,b,1d-7,f2)
write(*,*)simps(a,b,1d-7,f3)
end program
function simps(a,b,eps,f)
implicit none
double precision f
double precision a,b,simps,eps
double precision h,s1,s2,d,rc,rp
double precision x
integer m,i
h=(b-a)/2.0
s1=(f(a)+f(b)+4*f(a+h))*h/3.0
rc=f(a+h)
rp=f(a)+f(b)
m=2
do
rp=rp+2*rc
x=a-h/2.0
rc=0.0
do i=1,m
x=x+h
rc=rc+f(x)
enddo
s2=(rp+4.0*rc)*h/6.0
d=s2-s1
if(abs(s2)>=1.0)d=d/s2
if(abs(d)==0) s1=s2
h=h/2.0
m=m+m
enddo
simps=s2
end function simps
function f1(x)
implicit none
double precision x,f1
f1=1.0/(1.0+x)
end function f1
function f2(x)
implicit none
double precision x,y,f2
y=1.0/3.0
f2=0.5*((1.0+x*x)**y-(1.0-x*x)**y)
end function f2
function f3(x)
implicit none
double precision x,f3
f3=4.0/(1.0+x*x)
end function f3
program f915
implicit none
external f1,f2,f3
double precision a,b,simps
write(*,*)'a,b'
read(*,*)a,b
write(*,*)simps(a,b,1d-7,f1)
write(*,*)simps(a,b,1d-7,f2)
write(*,*)simps(a,b,1d-7,f3)
end program
function simps(a,b,eps,f)
implicit none
double precision f
double precision a,b,simps,eps
double precision h,s1,s2,d,rc,rp
double precision x
integer m,i
h=(b-a)/2.0
s1=(f(a)+f(b)+4*f(a+h))*h/3.0
rc=f(a+h)
rp=f(a)+f(b)
m=2
do
rp=rp+2*rc
x=a-h/2.0
rc=0.0
do i=1,m
x=x+h
rc=rc+f(x)
enddo
s2=(rp+4.0*rc)*h/6.0
d=s2-s1
if(abs(s2)>=1.0)d=d/s2
if(abs(d)==0) s1=s2
h=h/2.0
m=m+m
enddo
simps=s2
end function simps
function f1(x)
implicit none
double precision x,f1
f1=1.0/(1.0+x)
end function f1
function f2(x)
implicit none
double precision x,y,f2
y=1.0/3.0
f2=0.5*((1.0+x*x)**y-(1.0-x*x)**y)
end function f2
function f3(x)
implicit none
double precision x,f3
f3=4.0/(1.0+x*x)
end function f3
![急,高手帮我看看这个fortran求积分的程序哪错了,为什么运行不出来结果.](/uploads/image/z/17410592-56-2.jpg?t=%E6%80%A5%2C%E9%AB%98%E6%89%8B%E5%B8%AE%E6%88%91%E7%9C%8B%E7%9C%8B%E8%BF%99%E4%B8%AAfortran%E6%B1%82%E7%A7%AF%E5%88%86%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%93%AA%E9%94%99%E4%BA%86%2C%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%90%E8%A1%8C%E4%B8%8D%E5%87%BA%E6%9D%A5%E7%BB%93%E6%9E%9C.)
这是想写一维变步长Simpson积分吧
1、你给代码里有一个do后面什么都没有写啊,这肯定运行不出来的.
2、if(abs(s2)>=1.0)d=d/s2
if(abs(d)==0) s1=s2 这两句不太明白想表达什么.
我把simps(a,b,eps,f)修改了下,应该可以运行出来了,LZ看下
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
function simps(a,b,eps,f)
implicit none
double precision f
double precision a,b,simps,eps
double precision h,s1,s2,d,rc,rp
double precision x
integer m,i
h=(b-a)/2.0
s1=(f(a)+f(b)+4*f(a+h))*h/3.0
rc=f(a+h)
rp=f(a)+f(b)
m=2
d=eps+1.0
do while(d.ge.eps)
rp=rp+2*rc
x=a-h/2.0
rc=0.0
do i=1,m
x=x+h
rc=rc+f(x)
enddo
s2=(rp+4.0*rc)*h/6.0
d=abs(s2-s1)
s1=s2
h=h/2.0
m=m+m
enddo
simps=s2
end function simps
1、你给代码里有一个do后面什么都没有写啊,这肯定运行不出来的.
2、if(abs(s2)>=1.0)d=d/s2
if(abs(d)==0) s1=s2 这两句不太明白想表达什么.
我把simps(a,b,eps,f)修改了下,应该可以运行出来了,LZ看下
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
function simps(a,b,eps,f)
implicit none
double precision f
double precision a,b,simps,eps
double precision h,s1,s2,d,rc,rp
double precision x
integer m,i
h=(b-a)/2.0
s1=(f(a)+f(b)+4*f(a+h))*h/3.0
rc=f(a+h)
rp=f(a)+f(b)
m=2
d=eps+1.0
do while(d.ge.eps)
rp=rp+2*rc
x=a-h/2.0
rc=0.0
do i=1,m
x=x+h
rc=rc+f(x)
enddo
s2=(rp+4.0*rc)*h/6.0
d=abs(s2-s1)
s1=s2
h=h/2.0
m=m+m
enddo
simps=s2
end function simps
大神帮我看看这个matlab程序实现的拉格朗日插值程序计算运行为什么有问题?
求高手帮我看看我写的这道C语言程序哪里错了!
求fortran高手帮我看一下这段用高斯乔丹消元法解方程组的代码为什么总是得不到想要的结果
请高手帮我看看这个程序错在哪里?
求大神解释,为什么程序运行出来是这个结果,如下
求大神帮我看看程序的运算结果
简单的一个fortran程序为什么运行不出正确答案啊.
fortran或者其他编程高手来帮我编编这个程序~
大家帮我看看这个程序为什么报错,
交换两个字符型变量的值 我运行了一下,结果不对,请帮我看看哪里错了
C语言开关灯问题,麻烦大神们帮我看看这个程序哪里错了啊,结果不对啊!
高手帮我看这个2重积分的积分区域答案是不是错了