[問題] 用梯形法做積分有warning看不懂

看板Fortran作者 (雨涼)時間13年前 (2011/03/19 16:46), 編輯推噓5(507)
留言12則, 3人參與, 最新討論串1/1
各位大大 小弟剛入門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

03/19 17:05, , 1F
function裡沒有宣告f,program裡沒有宣告f是external??
03/19 17:05, 1F

03/19 17:14, , 2F
另外你的f(x)裡的x是單精度,可是a跟b卻是雙精度變數
03/19 17:14, 2F

03/19 17:15, , 3F
再CALL f(a)和f(b)時會出問題
03/19 17:15, 3F

03/19 17:22, , 4F
程式原本就可以跑應該是因為你沒有implicit none..
03/19 17:22, 4F

03/19 17:23, , 5F
所以program裡的f被當成新的變數了 自然就可以編譯
03/19 17:23, 5F

03/19 17:23, , 6F
但是卻會跑不出答案...
03/19 17:23, 6F

03/19 17:24, , 7F
還有n應該是整數,否則DO迴圈時 i=n-1應該會出問題
03/19 17:24, 7F

03/19 17:31, , 8F
你試試看我寄給你的修改過後code 我在ivf 11跑出來是對的
03/19 17:31, 8F

03/19 17:33, , 9F
噢我錯了 n是不是宣告成整數好像沒差XDD 原諒我XD
03/19 17:33, 9F

03/19 17:43, , 10F
嗯!我大致上知道問題在哪了。是我的精確度沒有看好
03/19 17:43, 10F

03/19 17:58, , 11F
可以跑了!謝謝
03/19 17:58, 11F

03/21 01:50, , 12F
好像跟我學的梯型法不一樣XD
03/21 01:50, 12F
文章代碼(AID): #1DX6rvqp (Fortran)
文章代碼(AID): #1DX6rvqp (Fortran)