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