作者zx212012 (雨凉)
看板Fortran
标题[问题] 用梯形法做积分有warning看不懂
时间Sat Mar 19 16:46:47 2011
各位大大
小弟刚入门fortran
有些经验还是不够
找不出来哪边是错的
请提点一下
程式如下:
program trapezoid
integer i
real*8 h,sum,n,a,b,ans
read(*,*)a
read(*,*)b
read(*,*)n
h=(b-a)/n
sum=0
x=0
do i=1,n-1
sum=sum+f(x)
x=x+h
enddo
ans=((f(a)+f(b))/2+sum)*h
write(*,*) ans
end
function f(x)
real x
f=x*x
return
end
而跑出来的warning是说
inconsistent data type for argument 1 in call to F
我试一个简单的积分跑出来都没有值
看了很久不知道哪边有问题
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.78.69
1F:推 callmei:function里没有宣告f,program里没有宣告f是external?? 03/19 17:05
2F:推 callmei:另外你的f(x)里的x是单精度,可是a跟b却是双精度变数 03/19 17:14
3F:→ callmei:再CALL f(a)和f(b)时会出问题 03/19 17:15
4F:推 callmei:程式原本就可以跑应该是因为你没有implicit none.. 03/19 17:22
5F:→ callmei:所以program里的f被当成新的变数了 自然就可以编译 03/19 17:23
6F:→ callmei:但是却会跑不出答案... 03/19 17:23
7F:→ callmei:还有n应该是整数,否则DO回圈时 i=n-1应该会出问题 03/19 17:24
8F:推 callmei:你试试看我寄给你的修改过後code 我在ivf 11跑出来是对的 03/19 17:31
9F:推 callmei:噢我错了 n是不是宣告成整数好像没差XDD 原谅我XD 03/19 17:33
10F:→ zx212012:嗯!我大致上知道问题在哪了。是我的精确度没有看好 03/19 17:43
11F:→ zx212012:可以跑了!谢谢 03/19 17:58
12F:→ tonyruler:好像跟我学的梯型法不一样XD 03/21 01:50