1.16.4. Использование массивов.
Фортран позволяет работать с массивами так же, как и с единичными объектами данных.
Массивам можно присваивать значения.
Массивы можно применять в качестве операндов в выражениях с арифметическими, логическими операциями и операциями отношения. Результат выражения, которое содержит массивы, присваивается массиву. В результате присваивания получается массив, каждый элемент которого имеет значение, равное результату операций над соответствующими элементами операндов:
массив = выражение
Массивы могут быть параметрами встроенных математических (элементных) функций, например SINиSQRT. Элементные функции, получив массив в качестве аргумента, выполняются последовательно для всех элементов массива. Однако, имеется важное ограничение: используемые в качестве операндов массивы и массив, которому присваивается результат выражения, должны быть согласованы.
1.16.5. Некоторые встроенные функции для массивов.
Сумма элементов.
Функция SUM(array_a) вычисляет сумму элементов массиваarray_a.
Произведение элементов.
Функция PRODUCT(array_a) вычисляет произведение элементов массиваarray_a.
Значение максимального элемента.
Функция MAXVAL(array_a) определяет максимальный элемент массиваarray_a.
Значение минимального элемента.
Функция MINVAL(array_a) определяет минимальный элемент массиваarray_a.
Пример программы
integer, parameter:: n=3,m=4 real,dimension(m)::a=(/-1.,2.,-3.,4./) real,dimension(n,n)::b=(/1.,-2.,3.,-4.,5.,-6.,7.,-8.,9./) print 100,'vector a:',a 100 format(/2x,a,6g12.4) print 100,'summa el-ov mas.A=',sum(a) print 100,'proizvedenie el-ov mas.A=',product(a) print 100,'max element mas.A=',maxval(a) print 100,'min element mas.A=',minval(a)
print '(//10x,"matrix B"/(3g12.4))',((b(i,j),j=1,n),i=1,n) print 100,'summa el-ov mas.B=',sum(b) print 100,'proizvedenie el-ov mas.B=',product(b) print 100,'max element mas.B=',maxval(b) print 100,'min element mas.B=',minval(b)
end |
Результат выполнения
vector a: -1.000 2.000 -3.000 4.000 summa el-ov mas.A= 2.000 proizvedenie el-ov mas.A= 24.00 max element mas.A= 4.000 min element mas.A= -3.000
matrix B 1.000 -4.000 7.000 -2.000 5.000 -8.000 3.000 -6.000 9.000 summa el-ov mas.B= 5.000 proizvedenie el-ov mas.B= 0.3629E+06 max element mas.B= 9.000 min element mas.B= -8.000
|
Функции умножения матриц и векторов.
Функция MATMUL(matrix_a, matrix_b) производит операцию умножения двух матриц, матрицы на вектор или вектора на матрицу. Аргументами этой функции должны быть массивы либо оба числового типа (целого, вещественного, комплексного), либо оба – логического типа. Над логическими матрицами и векторами функция MATMUL производит логическое умножение. Размер первого (или единственного) измерения массива matrix_b должен быть равен размеру последнего (или единственного) измерения массива matrix_a.
Функция DOT_PRODUCT(vector_a, vector_b) производит вычисление скалярного произведения векторов. Правила в отношении типов аргументов такие же, что и для функции MATMUL, аргументы – одномерные массивы одинакового размера.
Функция транспонирования матрицы.
Функция TRANSPOSE(matrix) выполняет транспонирование матрицы (массива ранга 2). Аргумент может быть любого типа.
Пример выполнения лабораторной работы 6.
Требуется вычислить скалярное произведение - вариант 31.
Пример реализующей программы
integer,parameter::n=3 real,dimension(n,n)::a,b real,dimension(n)::p,q,r open(1,file='lab6var31.dat') read(1,*)((a(i,j),j=1,n),i=1,n) read(1,*)((b(i,j),j=1,n),i=1,n) read(1,*)p,q,r print 100,'matrix A',((a(i,j),j=1,n),i=1,n) print 100,'matrix B',((b(i,j),j=1,n),i=1,n) print 100,'vector P',p print 100,'vector Q',q print 100,'vector R',r 100 format(/10x,a/(3g12.4)) s=dot_product(matmul(a,p),matmul(b,q+r)) !var31 print '(//1x,"var.31: s=(Ap,B(q+r))=",g12.4)',s end |
Результат выполнения программы
matrix A 1.000 2.000 3.000 1.000 2.000 1.000 3.000 2.000 0.000
matrix B 4.000 1.000 2.000 0.000 4.000 3.000 1.000 1.000 1.000
vector P 0.1000 1.700 -1.500
vector Q -1.600 0.8000 1.100
vector R -0.7000 1.300 0.2000
var.31: s=(Ap,B(q+r))= 33.17 |
Исходные данные вводятся из файла lab6var31.dat.
1 2 3
1 2 1
3 2 0
4 1 2
0 4 3
1 1 1
0.1 1.7 -1.5
-1.6 0.8 1.1
-0.7 1.3 0.2