[問題] 反矩陣的副程式&主程式 (已解決)

看板Fortran作者 (小熊)時間13年前 (2011/05/20 20:16), 編輯推噓5(5020)
留言25則, 6人參與, 最新討論串1/1
副程式的部分是課本上的 應該不會有錯 現在就是在煩惱怎麼寫出主程式~ ~ 需要求20*20矩陣的反矩陣 所以我想先用2*2來跑看看 可以執行但是一直觸發中斷點 應該是我主程式寫錯的關係 有人可以幫看一下主程式哪裡有問題嗎ˊ ˋ" implicit none real a(2,2),kk(2,2) data a/1,3,2,4/ call inver(a,kk) write(*,*)kk pause end subroutine inver(n,ss) real*8 ss,d,tt integer n,i,j,k dimension ss(n,n) do i=1,n d=1.d0/ss(i,i) tt=-d do j=1,n ss(i,j)=ss(i,j)*tt end do do k=1,i-1 tt=ss(k,i) do j=1,i-1 ss(k,j)=ss(k,j)+tt*ss(i,j) end do do j=i+1,n ss(k,j)=ss(k,j)+tt*ss(i,j) end do ss(k,i)=tt*d end do do k=i+1,n tt=ss(k,i) do j=1,i-1 ss(k,j)=ss(k,j)+tt*ss(i,j) end do do j=i+1,n ss(k,j)=ss(k,j)+tt*ss(i,j) end do ss(k,i)=tt*d end do ss(i,i)=d end do end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.252.47.251

05/20 20:29, , 1F
http://ppt.cc/hopv 這是跳出錯誤的圖
05/20 20:29, 1F

05/20 22:15, , 2F
call inver那有問題,請看看副程式,看看要傳入副程式
05/20 22:15, 2F

05/20 22:15, , 3F
的是什麼,然後副程式又會傳什麼回來
05/20 22:15, 3F

05/20 22:22, , 4F
副程式 SS是矩陣 所以主程式用KK矩陣過去應該沒問題阿..
05/20 22:22, 4F

05/20 22:23, , 5F
但是N的部分應該是指N*N個矩陣 我把主程式的a改成2也是錯
05/20 22:23, 5F

05/20 22:24, , 6F
傳回來的應該是SS(i,i) <-反矩陣 (抱歉 還是不太懂ˊ ˋ"
05/20 22:24, 6F

05/20 22:49, , 7F
錯誤是說你呼叫副程式的時候用了錯誤的資料形態
05/20 22:49, 7F

05/20 22:50, , 8F
所以你就要看看哪一個參數的資料形態錯了
05/20 22:50, 8F

05/20 22:51, , 9F
那個錯誤連它需要的和你嘗試傳入的資料形態都寫出來了
05/20 22:51, 9F

05/20 22:51, , 10F
應該很容易發現錯在哪裡
05/20 22:51, 10F

05/20 22:56, , 11F
你已經很接近讓他可以正常執行的這一步囉~你想想看要
05/20 22:56, 11F

05/20 22:57, , 12F
讓副程式算的值要怎麼送進去
05/20 22:57, 12F

05/20 23:02, , 13F
2傳到副程式 變成2*2矩陣應該沒錯 KK的部分我實在想不透
05/20 23:02, 13F

05/20 23:02, , 14F
要用哪種型態傳到副程式..
05/20 23:02, 14F

05/20 23:07, , 15F
你有傳2到副程式嗎?
05/20 23:07, 15F
把呼叫副程式改成 call inver(2,kk) 應該就會把2傳到 subroutine inver(n,ss) 的n吧..

05/20 23:09, , 16F
那換個說法,你說副程式會丟回inv完的陣列ss,那他在運
05/20 23:09, 16F

05/20 23:09, , 17F
算時是用什麼值來算呢?又,這些用於運算的值要怎麼來?
05/20 23:09, 17F
我把主程式改成 implicit none real kk(2,2) data kk/1,3,2,4/ call inver(2,kk) write(*,*)kk pause end 宣告丟過去的kk是矩陣 資料是 1 3 2 4 還是錯在主程式的第四排 call過去的資料.. ※ 編輯: joelife 來自: 111.252.47.251 (05/20 23:20)

05/20 23:43, , 18F
你有重新編譯嗎?我抄你的程式做你說的修改結果可以運行
05/20 23:43, 18F

05/20 23:44, , 19F
但是輸出數值不對
05/20 23:44, 19F
有.. 我是ftn95 但是執行之後依然跳出錯誤 http://ppt.cc/ahtR <- 執行畫面.. ※ 編輯: joelife 來自: 111.252.47.251 (05/20 23:50)

05/21 01:19, , 20F
錯誤訊息說很清楚是精度不符。
05/21 01:19, 20F

05/21 01:20, , 21F
還有例圖麻煩大點,這樣看起來有些吃力= =
05/21 01:20, 21F

05/21 10:33, , 22F
問題已經解決,謝謝大家幫忙(咦怎麼怪怪的XD)
05/21 10:33, 22F
真的已經解決了 感謝大家的幫忙Q_Q 晚點挑戰20*20矩陣 還要CALL TIME ˋ(′_‵||)ˊ ※ 編輯: joelife 來自: 111.252.43.122 (05/21 11:38)

05/25 15:00, , 23F
如何用imsl直接求反矩陣??
05/25 15:00, 23F

05/25 18:48, , 24F
樓上是認真回文嘛!?
05/25 18:48, 24F

05/26 20:35, , 25F
就use IMSL 直接.ix.吧
05/26 20:35, 25F
文章代碼(AID): #1DrbkGK- (Fortran)
文章代碼(AID): #1DrbkGK- (Fortran)