program main
call findbracket(x0, a, b)
end program
function f(x)
double precision x,f
f = x
end function
subroutine findbracket(x0,a,b)
double precision x0, a, b
double precision fa, fb
double precision dx
dx = 0.001d0
x0 = 1.0d0
a = x0
b = x0
print*, a, b
print*, f(a)
print*, f(b)
do
fa = f(a)
fb = f(b)
print*, "what is fa", fa
print*, "what is fb", fb
a = a - dx
if (fa*fb < 0) then
exit
end if
print*, b, dx
b = b + dx
if (fa*fb < 0) then
exit
end if
dx = dx*2
end do
end subroutine
我正在编写一个解决给定函数f(x)的根的程序。在这一点上,我只是想检查我是否为每一步获得了正确的值,我发现了一些错误。为简单起见,我有f(x)= x作为函数,我期望程序打印f(a)= 1.0和f(b)= 1.0,但输出是f(a)= 1.8750000000000000和f(b )= 0.0000000000000000。另外,虽然我将a和b都设置为等于x0,但它似乎是a = 1.0000002381857485并且b = 1.0000000000000000。任何人都可以解释为什么会这样吗?我可能会错过一些愚蠢的东西,但我找不到它。我感谢您的帮助。
答案 0 :(得分:0)
将这些行添加到子程序
subroutine findbracket(x0,a,b)
double precision x0, a, b
double precision fa, fb
double precision dx
interface
function f(x)
double precision x,f
end function
end interface
然后你应该得到f(x)的正确值。
编辑:
该接口使函数f(x)在子例程中可见(和可用)。