Я пытаюсь написать функцию, которая принимает матрицу ранга 1 (вектор-строку) и выводит вектор-столбец, поскольку встроенный TRANSPOSE()
не принимает матрицы ранга 1. Когда я вызываю следующую функцию, используя вектор-строку A = [1 2 3]
, я получаю:
forrtl: severe (40): recursive I/O operation, unit -1, file unknown
в окне вывода программы.
! Below is the code in the main program that ends up calling rowToColumnVec
REAL, DIMENSION(1:3,1) :: A, B, C ! Define 3 column vectors
INTEGER :: length
length = SIZE(A, DIM = 1)
CALL oneDimInput(A, length)
CALL oneDimInput(B, length)
WRITE(*,*) "A = ", A
READ(*,*)
WRITE(*,*) "A transpose is ", rowToColumnVec(A)
READ(*,*)
! Below is code that exists in a separate .f90 file that is used by the main
! program. I know that the main program has no problem running other
! functions and subroutines from this .f90 file.
FUNCTION rowToColumnVec(A)
IMPLICIT NONE
REAL, DIMENSION(1,1:3), INTENT(IN) :: A
REAL, DIMENSION(1:3,1) :: B
REAL, DIMENSION(1:3,1) :: rowToColumnVec
B(1,1) = A(1,1)
B(2,1) = A(1,2)
B(3,1) = A(1,3)
rowToColumnVec(1,1) = B(1,1)
rowToColumnVec(2,1) = B(2,1)
rowToColumnVec(3,1) = B(3,1)
WRITE(*,*) "Shape B: ", SHAPE(B)
READ(*,*)
END FUNCTION rowToColumnVec
Что происходит не так?
Кроме того, есть ли другая встроенная функция для транспонирования матрицы ранга 1?
Редактировать: добавлен код в основную программу, которая вызывает функцию.
write(*,*) rowToColumnVec(x)
, вы действительно ожидаете так называемый рекурсивный ввод-вывод. См. этот ответ, чтобы узнать, как с этим справиться. - person francescalus   schedule 07.06.2017(lbound:ubound)
. Вы можете использовать их как матрицы и векторы вmatmul()
,dot_product()
и подобных функциях, но нет различий между строками и столбцами. - person Vladimir F   schedule 08.06.2017