作者joe1121111 (bsyoung)
看板Fortran
标题[问题] subroutine的问题
时间Thu May 19 00:05:46 2011
不好意思又来发问了
这个问题是用矩阵去解四元一次联立方程式
程式可以跑了
但是我写的subroutine backward(将矩阵右上方部分消掉)一直没办法运作
以下是主程式 跟subroutine
c Solving simultaneous equations
Program simul4
implicit none
integer maxdim, ndim, pivot_c, x
parameter(maxdim=100)
real*8 aug(maxdim, maxdim+1)
ndim=4
aug(1,1)=1; aug(1,2)=1; aug(1,3)=1; aug(1,4)=1; aug(1,5)=4
aug(2,1)=2; aug(2,2)=1; aug(2,3)=1; aug(2,4)=1; aug(2,5)=5
aug(3,1)=1; aug(3,2)=1; aug(3,3)=2; aug(3,4)=1; aug(3,5)=5
aug(4,1)=1; aug(4,2)=1; aug(4,3)=1; aug(4,4)=2; aug(4,5)=6
call displayMatrix(aug,ndim,ndim+1,maxdim,maxdim+1)
do pivot_c=1, ndim
call eliminatePivotColumn(aug,maxdim,maxdim+1,ndim,pivot_c)
call displayMatrix(aug,ndim,ndim+1,maxdim,maxdim+1)
end do
do x=1, ndim
call backward(aug,maxdim,maxdim+1,ndim,x)
call displayMatrix(aug,ndim,ndim+1,maxdim,maxdim+1)
end do
stop
End
c----------------------------------------------------------
subroutine backward(matrix, ndim, x ,m_max,n_max)
implicit none
integer col, pivot_r, i, j, m_max, n_max, ndim, x
real*8 matrix(m_max, n_max), tmp(n_max)
c backward
x=1
do i=x, ndim
do j=i+1, ndim+1
tmp(1)=matrix(i,j)
matrix(i,j)=matrix(i,j)-tmp(1)*matrix(i+1,j)
end do
end do
do i=x, ndim
do j=i+2, ndim+1
tmp(1)=matrix(i,j)
matrix(i,j)=matrix(i,j)-tmp(1)*matrix(i+2,j)
end do
end do
do i=x, ndim
do j=i+3,ndim+1
tmp(1)=matrix(i,j)
matrix(i,j)=matrix(i,j)-tmp(1)*matrix(i+3,j)
end do
end do
return
end
他display的矩阵是只有经过第一个subroutine 的eliminate的矩阵
第二个subroutine好像没有运算到
为什麽会这样?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.171.114.61
※ 编辑: joe1121111 来自: 118.171.114.61 (05/19 00:08)
1F:→ suzuke:副程式名字改短一点试试 05/19 00:16
2F:→ suzuke:还有人家回你的东西, 有没有帮助要说一下吧 05/19 00:16
3F:→ joe1121111:还是不行耶 05/19 15:41
※ 编辑: joe1121111 来自: 118.171.114.61 (05/19 17:05)
4F:→ charlesdc:第二个是哪个? backwardsubstitution根本没呼叫到!? 05/19 22:44
5F:→ charlesdc:而且谁知道你没贴出来的CODE有没有问题@@? 05/19 22:44
※ 编辑: joe1121111 来自: 118.171.114.61 (05/19 23:21)
6F:→ joe1121111:我把subroutine的backward改成backward了 可是还是没用 05/19 23:22
7F:→ joe1121111:第二个就是backward 05/19 23:22
8F:→ charlesdc:写法上是有点怪不过基本上是没问题 你要检查的是你在CAL 05/20 15:52
9F:→ charlesdc:L副程式的时候参数的对应关系 你那边应该是顺序写反了 05/20 15:53
10F:→ joe1121111:感谢c大 已解决问题了! 05/20 22:34