2013-10-22 62 views
0

執行該功能時:等級不匹配FORTRAN

FUNCTION gaussian_elimination(A, C) result(X) 
implicit none 
real, intent(inout) :: C(:), A(size(C), size(C)) 
real :: X(size(C)) 

real :: D(size(C)) 
integer :: i, j, neq 

neq = size(C) 

! Forward reduction, only two loops since reduction is now row by row 
do i = 1, neq 
D = A(:,i)/A(i,i) 

do j = i+1, neq 
A(j,:) = A(j,:) - D(j)*A(i,:) 
C(j) = C(j) - D(j)*C(i) 
enddo 
enddo 

! Back substitution, only one loop 
do i = neq, 1, -1 
x(i) = (C(i) - sum(A(i, i+1:) * x(i+1:)))/A(i,i) 
enddo 

end FUNCTION gaussian_elimination 

隨着以下:

real , DIMENSION(6,6) :: K 
real , DIMENSION(6,1) :: R 
real , DIMENSION(6,1) :: n 
n = gaussian_elimination(K,R) 

結果:

n = gaussian_elimination(K,R) 
1 

錯誤:不兼容的行列2和1中的分配在( 1)

回答

0

您需要指定一個secon d尺寸X如果n應該是DIMENSION(6,1)

real :: X(size(C,1),size(C,2)) 

注意,你還必須指定虛擬參數錯誤......它可能應該閱讀:

FUNCTION gaussian_elimination(A, C) result(X) 
implicit none 
real, intent(inout) :: C(:,:), A(size(C,1), size(C,1)) 
real :: X(size(C,1),size(C,2)) 
... 

另外,您可以將Rn定義爲

real , DIMENSION(6) :: R 
real , DIMENSION(6) :: n 

並保持您的代碼不變。


選擇三:您使用數組切片工作:

n(:,1) = gaussian_elimination(K,R(:,1)) 

代碼中沒有改變...

+0

謝謝,刪除它。 –