作者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