PROGRAM SUBDEM
INTEGER key, n, m, loopA
REAL resq
REAL A(3,2)
REAL B(3)
REAL X(2)
key = 0
n = 2
m = 3
resq = 0
CALL QR(m, n, A, B, X, resq)
END
QR 루틴은 다음과 같습니다
subroutine QR(m, n, a, b, x, resq)
implicit double precision (a-h, o-z)
dimension a(m,n),b(m),x(n)
double precision sum, dot
resq=-2.0
if (m .lt. n) then
return
endif
resq=-1.0
! Loop ending on 1800 rotates a into upper triangular form.
do 1800 j=1, n
! Find constants for rotation and diagonal entry.
sq=0.0
do 1100 i=j, m
sq=a(i,j)**2 + sq
1100 continue
if (sq .eq. 0.0) then
return
endif
qv1=-sign(sqrt(sq), a(j,j))
u1=a(j,j) - qv1
a(j,j)=qv1
j1=j + 1
! Rotate remaining columns of sub-matrix.
do 1400 jj=j1, n
dot=u1*a(j,jj)
do 1200 i=j1, m
dot=a(i,jj)*a(i,j) + dot
1200 continue
const=dot/abs(qv1*u1)
do 1300 i=j1, m
a(i,jj)=a(i,jj) - const*a(i,j)
1300 continue
a(j,jj)=a(j,jj) - const*u1
1400 continue
! Rotate b vector.
dot=u1*b(j)
do 1600 i=j1, m
dot=b(i)*a(i,j) + dot
1600 continue
const=dot/abs(qv1*u1)
b(j)=b(j) - const*u1
do 1700 i=j1, m
b(i)=b(i) - const*a(i,j)
1700 continue
1800 continue
! Solve triangular system by back-substitution.
do 2200 ii=1, n
i=n-ii+1
sum=b(i)
do 2100 j=i+1, n
sum=sum - a(i,j)*x(j)
2100 continue
if (a(i,i).eq. 0.0) then
return
endif
x(i)=sum/a(i,i)
2200 continue
! Find residual in overdetermined case.
resq=0.0
do 2300 i=n+1, m
resq=b(i)**2 + resq
2300 continue
return
end subroutine
그러나 나는 점점 오전 :
오류 1 오류 # 6633 : 실제 인수의 형식이 임시 인수의 형식 인 과 다릅니다. [A] 오류 2 오류 # 6633 : 실제 인수가 의 유형이 더미 인수의 유형과 다릅니다.
[B] 오류 3 오류 # 6633 : 실제 인수의 형식이 더미 인수의 형식에서 과 다릅니다. [X] 오류 4 오류 # 6633 : 실제 인수의 유형이 더미 인수의 유형과 다릅니다. [RESQ]
무엇이 잘못 되었나요?
a, b, x 및 resq real을 서브 루틴에서 기본 및 (암시 적으로) 배정 밀도로 선언했습니다. – agentp
IMO에서는 '암시 적 없음'이 아닌 '암시 적'의 사용을 강력히 피해야합니다. 반대로 '암시 적 없음'을 적극 권장합니다. –