我想这是一个愚蠢的事情,我已经错过了,但我已经问过全班同学,没有人能够解决这个问题。在子程序中调用一个简单的程序,并且我在矩阵的条目中读取do循环有问题。
program Householder_Program
use QR_Factorisation
use numeric_kinds
complex(dp), dimension(:,:), allocatable :: A, Q, R, V
integer :: i, j, n, m
print *, 'Enter how many rows in the matrix A'
read *, m
print *, 'Enter how many columns in the matrix A'
read *, n
allocate(A(m,n), Q(m,n), R(n,n), V(n,n))
do i = 1,m
do j = 1,n
Print *, 'Enter row', i, 'and column', j, 'of matrix A'
read *, A(i,j)
end do
end do
call Householder_Triangularization(A,V,R,n,m)
print *, R
end program
它会问我A(1,1)但是当我输入一个数字时它不会问我A(1,2),它会留下一个空白行。当我尝试输入第二个数字时,它会出错并说:
Enter row 1 and column 1 of matrix A
1
2
At line 22 of file HouseholderProgram.f90 (unit = 5, file = 'stdin')
Fortran runtime error: Bad repeat count in item 1 of list input
答案 0 :(得分:4)
您的变量A
是类型为complex的(数组)。这意味着当您尝试执行元素值的列表定向输入时,您不能只指定一个数字。因此,在您的情况下,问题不在于程序,而在于输入。
来自Fortran 2008标准,10.10.3
当下一个有效项的类型为complex时,输入表单由左括号后跟一个有序的数字输入字段对,用逗号分隔(如果十进制编辑模式为POINT)或分号(如果是十进制编辑)模式是COMMA),然后是右括号。
输入必须类似于(1., 12.)
。
答案 1 :(得分:3)
您正在尝试阅读复杂的数字(A
很复杂)!因此,您应该为代码指定复数...由于您只提供一个整数,程序不知道该怎么做。
提供(1,0)
和(2,0)
代替1
和2
即可。
答案 2 :(得分:2)
如果用户输入始终是真实的,并且您想将其读入复杂类型数组,则可以执行以下操作:
Print *, 'Enter row', i, 'and column', j, 'of matrix A'
read *, dummy
A(i,j)=dummy
其中dummy
被声明为real
。这将使用户无需键入复数所需的括号。 (转换为复合体是自动的)