作者joelife (小熊)
看板Fortran
標題[問題] 反矩陣的副程式&主程式
時間Fri May 20 20:16:08 2011
副程式的部分是課本上的 應該不會有錯
現在就是在煩惱怎麼寫出主程式~ ~
需要求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
2F:→ Cypresslin:call inver那有問題,請看看副程式,看看要傳入副程式 05/20 22:15
3F:→ Cypresslin:的是什麼,然後副程式又會傳什麼回來 05/20 22:15
4F:→ joelife:副程式 SS是矩陣 所以主程式用KK矩陣過去應該沒問題阿.. 05/20 22:22
5F:→ joelife:但是N的部分應該是指N*N個矩陣 我把主程式的a改成2也是錯 05/20 22:23
6F:→ joelife:傳回來的應該是SS(i,i) <-反矩陣 (抱歉 還是不太懂ˊ ˋ" 05/20 22:24
7F:推 terryys:錯誤是說你呼叫副程式的時候用了錯誤的資料形態 05/20 22:49
8F:→ terryys:所以你就要看看哪一個參數的資料形態錯了 05/20 22:50
9F:→ terryys:那個錯誤連它需要的和你嘗試傳入的資料形態都寫出來了 05/20 22:51
10F:→ terryys:應該很容易發現錯在哪裡 05/20 22:51
11F:→ Cypresslin:你已經很接近讓他可以正常執行的這一步囉~你想想看要 05/20 22:56
12F:→ Cypresslin:讓副程式算的值要怎麼送進去 05/20 22:57
13F:→ joelife:2傳到副程式 變成2*2矩陣應該沒錯 KK的部分我實在想不透 05/20 23:02
14F:→ joelife:要用哪種型態傳到副程式.. 05/20 23:02
15F:推 terryys:你有傳2到副程式嗎? 05/20 23:07
把呼叫副程式改成 call inver(2,kk)
應該就會把2傳到 subroutine inver(n,ss) 的n吧..
16F:→ Cypresslin:那換個說法,你說副程式會丟回inv完的陣列ss,那他在運 05/20 23:09
17F:→ Cypresslin:算時是用什麼值來算呢?又,這些用於運算的值要怎麼來? 05/20 23:09
我把主程式改成
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)
18F:推 terryys:你有重新編譯嗎?我抄你的程式做你說的修改結果可以運行 05/20 23:43
19F:→ terryys:但是輸出數值不對 05/20 23:44
有.. 我是ftn95
但是執行之後依然跳出錯誤
http://ppt.cc/ahtR <- 執行畫面..
※ 編輯: joelife 來自: 111.252.47.251 (05/20 23:50)
20F:→ gilocustom:錯誤訊息說很清楚是精度不符。 05/21 01:19
21F:→ gilocustom:還有例圖麻煩大點,這樣看起來有些吃力= = 05/21 01:20
22F:推 terryys:問題已經解決,謝謝大家幫忙(咦怎麼怪怪的XD) 05/21 10:33
真的已經解決了 感謝大家的幫忙Q_Q
晚點挑戰20*20矩陣 還要CALL TIME ˋ(′_‵||)ˊ
※ 編輯: joelife 來自: 111.252.43.122 (05/21 11:38)
23F:推 zx212012:如何用imsl直接求反矩陣?? 05/25 15:00
24F:→ charlesdc:樓上是認真回文嘛!? 05/25 18:48
25F:→ joelife:就use IMSL 直接.ix.吧 05/26 20:35