Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 95,具有非矩形边界的二重积分_Fortran - Fatal编程技术网

Fortran 95,具有非矩形边界的二重积分

Fortran 95,具有非矩形边界的二重积分,fortran,Fortran,我一直在尝试集成这个函数,s=0.1736901 我的代码是 它只是吐出NaN作为积分的值,不喜欢我的函数。 我基本上是一个初学者,我找不到任何类似的问题。首先,我用OCR从你的图像中提取代码,请编辑你的帖子插入代码 如果只删除func2d的最后一部分及其声明,则该代码有效: program trap2d !=================================== ! USUAL DECLERATIONS !===================================

我一直在尝试集成这个函数,s=0.1736901

我的代码是

它只是吐出NaN作为积分的值,不喜欢我的函数。
我基本上是一个初学者,我找不到任何类似的问题。首先,我用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