【发布时间】:2019-09-20 20:24:41
【问题描述】:
这种双重积分的解决方案是 -0.083,但在最终的编译中它显示为 -Infinity。貌似错误很简单,但是实在找不到。
我一直在专门搜索模块部分,但我不明白为什么它看起来像 -Infinity。例如,如果您更改它们之间的两个函数(f2 中的 x 和 f1 中的 x^2),则积分的解为 0.083,并且代码给出了正确的结果。任何人都可以找到错误吗?非常感谢。
module funciones
contains
function f(x,y)
implicit none
real*8:: x,y,f
f=2d0*x*y
end function
function f1(x)
real*8::x,f1
f1=x
end function
function f2(x)
real*8::x,f2
f2=x**2d0
end function
function g(x,c,d,h)
implicit none
integer::m,j
real*8::x,y,c,d,k,s,h,g
m=nint(((d-c)/h)+1d0)
k=(d-c)/dble(m)
s=0.
do j=1d0,m-1d0
y=c+dble(j)*k
s=s+f(x,y)
end do
g=k*(0.5d0*(f(x,c)+f(x,d))+s)
return
end function
subroutine trapecio(a,b,n,integral)
implicit none
integer::n,i
real*8::a,b,c,d,x,h,s,a1,a2,b1,b2,integral
h=(b-a)/dble(n)
s=0d0
do i=1d0,n-1d0
x=a+dble(i)*h
c=f1(x)
d=f2(x)
s=s+g(x,c,d,h)
end do
a1=f1(a)
a2=f2(a)
b1=f1(b)
b2=f2(b)
integral=h*(0.5d0*g(a,a1,a2,h)+0.5d0*g(b,b1,b2,h)+s)
end subroutine
end module
program main
use funciones
implicit none
integer::n,i
real*8::a,b,c,d,x,s,h,integral
print*, "introduzca los valores de a, b y n"
read(*,*) a, b, n
call trapecio (a,b,n,integral)
print*,integral
end program
主程序很简单,调用子程序,使用模块。它还会打印最终结果。
【问题讨论】:
-
欢迎您阅读How to Ask和minimal reproducible example。您还应该包括主程序,以便我们可以测试代码。编写代码时请使用缩进,以便于阅读。
-
谢谢,我会上传主程序!
-
一些缩进和较少的空行将是有益的。
-
对不起,我是新来的。我仍在学习它是如何工作的。
标签: fortran gfortran fortran90 fortran95