Я хочу использовать оператор данных для инициализации матриц в Фортране. На мой взгляд, одним из преимуществ использования этого метода является то, что он обеспечивает компактный способ инициализации матриц. Однако то, как я использовал его в приведенном ниже примере, привело к ошибке в расчетах. И Z1, и ZZ1 должны давать матрицу размера 2x1, равную [7;13] (ZZ1 = [7;13], Z1 = [10;12]). Я считаю, что следует использовать такую опцию, как order=(/2,1/), но я не смог ее найти. Кто-нибудь может помочь?
program test_Multiplication
implicit none
integer :: Xp1(3,1), b1(2,1), IW1_1(2,3), Z1(2,1)
integer :: XXp1(3,1), bb1(2,1), IIW1_1(2,3), ZZ1(2,1)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! with data statement !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
data Xp1(1:3,1) &
/1, &
2, &
3/
data IW1_1(1:2,1:3) &
/1, 1, 1, &
2, 2, 2/
data b1(1:2,1) &
/1, &
1/
Z1 = matmul(IW1_1,Xp1)+b1
print*, 'Z1', Z1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! without data statement !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
XXp1 = reshape( (/1, &
2, &
3 /), &
shape(XXp1), order=(/2,1/) )
IIW1_1 = reshape( (/ 1, 1, 1, &
2, 2, 2/), &
shape(IIW1_1), order=(/2,1/) )
bb1 = reshape( (/1, &
1/), &
shape(bb1), order=(/2,1/) )
ZZ1 = matmul(IIW1_1,XXp1)+bb1
print*, 'ZZ1', ZZ1
end program test_Multiplication
Да, Фортран. Добавлен.
Fortran является основным языком столбцов. PS: я чуть не пропустил ответ на ваш вопрос из-за чрезмерного использования продолжения строки. Это затрудняет разбор кода.
Я не понимаю проблемы. Пожалуйста, покажите нам, что программа печатает и что вы хотите, чтобы она печатала вместо этого. Тем не менее, на мой взгляд, отчет о данных следует оставить в истории.
Зачем вам отчет о данных? Таковы 1970-е. Просто используйте инициализацию, если вы хотите сделать что-то подобное, при условии, что вы понимаете последствия неявного Save (который применяется к обоим методам)
@user790082,
Стив уже дал ваш ответ в качестве комментария (Fortran использует порядок столбцов: первый индекс изменяется быстрее всего в памяти). Если вы должны использовать оператор данных, измените инициализацию IW1_1 на
data IW1_1(1:2,1:3) /1, 2, 1, 2, 1, 2 /
(В этом случае продолжение строки является значительным отвлечением.)
Вы должны добавить тег, указывающий на язык программирования. Фортран?