Fortran 95,具有非矩形边界的二重积分
我一直在尝试集成这个函数,s=0.1736901 我的代码是 它只是吐出NaN作为积分的值,不喜欢我的函数。Fortran 95,具有非矩形边界的二重积分,fortran,Fortran,我一直在尝试集成这个函数,s=0.1736901 我的代码是 它只是吐出NaN作为积分的值,不喜欢我的函数。 我基本上是一个初学者,我找不到任何类似的问题。首先,我用OCR从你的图像中提取代码,请编辑你的帖子插入代码 如果只删除func2d的最后一部分及其声明,则该代码有效: program trap2d !=================================== ! USUAL DECLERATIONS !===================================
我基本上是一个初学者,我找不到任何类似的问题。首先,我用OCR从你的图像中提取代码,请编辑你的帖子插入代码 如果只删除
func2d
的最后一部分及其声明,则该代码有效:
program trap2d
!===================================
! USUAL DECLERATIONS
!===================================
Implicit none
real :: a, b, hx, hy, x, y ! <== removed func2d
real :: integralx, integraly
integer :: i, j, Nx, Ny
!===================================
!i is for the x part, j is for the y part
!===================================
!MAIN CODE--------------------------
! ==================================
Nx = 5
Ny = 5
a = 2.1736501
b = 2.1736501
hx = (a+b)/Nx
integralx = 0.0
do i = 0,Nx
x = b + i*hx
hy = (sqrt(1+x**2)+sqrt(1+x**2))/Ny
integraly = 0.0
do j = 0,Ny
y = sqrt(1+x**2) + j*hy
integraly = integraly + hx*sqrt(1+y**2)
end do
integralx = integraly + hx*integralx
end do
print*, integralx
end program trap2d
! function func2d (x)
! real :: func2d, x
! func2d(x) = sqrt(1+x**2)
! end function func2d
在函数定义中有一个输入错误
function func2d (x)
real :: func2d, x
! func2d(x) = sqrt(1+x**2) <- TYPO HERE
func2d = sqrt(1+x**2)
end function func2d
而函数的返回值语句如上所述
function func2d(x)
...
func2d = sqrt(1+x**2) ! you assign to the function's result variable a value
...
end function
请注意,您的程序甚至不调用
func2d
假设您确实想要调用func2d
(而不是在集成循环中硬编码函数),您可能需要注意:将函数定义为包含的过程。
通过这种方式,您可以获得一个明确的界面。请将您的问题和代码以字符(而不是图像)形式粘贴在此页面上,以便人们能够提供帮助。这些链接将很快过期,未来的读者可能会得到一些答案,但不会有任何疑问。请查看有关如何在stackoverflow上包含代码的内容(插入3个倒勾,然后插入代码,然后再次插入3个倒勾)。(如果编辑,可能值得指出“输入错误”的原因是件坏事。语句函数不会这样定义,而只是在主程序中定义,但有人可能会认为它们是。)对不起,我的意思是,
func2d(x)=……
如果在主程序中就可以了(我们还是在20世纪70年代),但是试图将语句函数与同名函数子程序结合使用是一个问题。我想我见过更多的人被语句函数所迷惑,而不是如何分配函数结果,但这可能是后一种情况。
program
...
y = func2d(x) + j*hy ! you call the function `func2d` and supply the argument `x`
...
end program
function func2d(x)
...
func2d = sqrt(1+x**2) ! you assign to the function's result variable a value
...
end function