Я новичок ie в fortran, и мне нужно умножать матрицы разных форм с помощью MATMUL (), и результат не тот, который я ожидал ...
Вот мой код fortran:
integer, dimension(3,2) :: a
integer, dimension(2,2) :: b
integer :: i, j
a = reshape((/ 1, 1, 1, 1, 1, 1 /), shape(a))
b = MATMUL(a,TRANSPOSE(a))
do j = 1, 2
do i = 1, 2
print*, b(i, j)
end do
end do
Я ожидал такой матрицы в результате:
b =
| 3 3 | , матрица 2x2
| 3 3 |
Вместо этого я получил это сообщение об ошибке:
matmlt.f90 (9): error # 6366: формы выражений массива не соответствуют. [B] b = MATMUL (a, TRANSPOSE (a)) ------ ^
Чтобы этот код работал правильно, мне пришлось переключить аргументы MATMUL следующим образом:
b = MATMUL (TRANSPOSE (a), a)
Таким образом, я получил то, что ожидал вначале. Но это не интуитивно.
На бумаге
a =
| 1 1 1 |
| 1 1 1 |
транспонирование (a) =
| 1 1 |
| 1 1 |
| 1 1 |
транспонирование оси (a) =
| 3 3 |
| 3 3 |
и
транспонирование (a) xa =
| 2 2 2 |
| 2 2 2 |
| 2 2 2 |
Что не так с моим кодом?
Спасибо.