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