Пиши Дома Нужные Работы

Обратная связь

Редукция одномерных массивов

Все ответы в примерах, приведенных ниже, получены для одномерного вещественного массива:

Real,dimension(1:7)::Ar

Таблица 38.Вещественный массив для редукции одномерных массивов

Массив Ar=[ 2.1, -0.7, 0.0, 17., -12., 0.4, -35.5] Номера элементов 1 2 3 4 5 6 7

Итоговые функции с редукцией массивов Sum, Product, MinVal, MaxVal

Здесь и далее в описаниях функций аргументы, указанные в квадратных скобках, необязательны (могут отсутствовать при конкретном вызове). Так, для одномерного массива аргумент №2 dim можно опускать или указывать dim=1 –для одномерного массива результат редукции – всегда скаляр, как итог по всему массиву. Аргумент dim почти во всех примерах отсутствует, поскольку для одномерного массива он не влияет на форму результата. Итоговые числовые функции перенимают тип у массива:

Real,dimension(1:5):: Ar;RealValue

Value =Sum(array[, dim][,mask])! сумма

Value =Product(array[,dim][,mask])! произведение

Value =MinVal(array[,dim] [,mask])! минимум

Value =MaxVal(array[, dim][,mask])! максимум

Примеры

1. Найти значение минимального положительного элемента массива Ar

Real Zmin
Два варианта задания аргументов при вызове функции MinVal:

Zmin=MinVal(Ar,1,Ar>0) – имена аргументов не пишут, поскольку все они указаны по порядку на своих местах;

Zmin=MinVal(Ar,mask=Ar>0) – пропущен аргумент №2 dim и из-за этого необходимо указать имя mask для аргумента №3, этого будем придерживаться в последующих примерах для одномерного массива.

В результате: Zmin = 0.4

2. Найти значение максимального элемента Ar из интервала [0.1, 17.6]

Real Zmax; Zmax=MaxVal(Ar, mask=0.1<=Ar.and.Ar<=17.6)

В результате: Zmax = 17.0

3. Найти сумму квадратов положительных элементов секции Ar(1:7:3)

Real SumQu; SumQu=Sum(Ar(1:7:3)**2, mask=Ar(1:7:3)>0)

В результате: SumQu = Ar(1)2 + Ar(4)2 = 2.12 + 172 = 293.41

4. Найти произведение модулей ненулевых элементов секции Ar(3:7)



Real Prod; Prod=Product(abs(Ar(3:7)),mask=Ar(3:7)/=0)

В результате:

Prod = Ar(4) * Ar(5) * Ar(6)* Ar(7) = 17.0*12.0*0.4*35.5 = 2896.8

Внимание, типичная ошибка, когда, используя секцию массива, забывают эту секцию указать для маски Mask, и тогда size(Array)≠size(Mask) :

- ошибка, которая выявится при компиляции

Su=Sum(Array =Ar(1:3),mask=Ar>0)

Su=Sum(Array=Ar(1:N), mask=Ar>0)- нет ошибок при компиляции

- при N=7 ошибки действительно нет

- при не­известном N<7 ошибка есть

- правильно так:Su=Sum(Array =Ar(1:N), mask=Ar(1:N)>0)

Any, all– итоговые логические функции с редукцией формы массива

Итоговые логические функции возвращают логическое значение:

Any(mask)– результат «true», если в массиве есть элементы со свойством mask; иначе говоря, это логическое ИЛИ элементов маски;

All(mask)– результат «true», если все элементы массива обладают свойством mask; иначе говоря, это логическое И элементов маски.

Примеры

1. Есть ли в массиве Ar элементы, по модулю большие 30 ?

Logical L1; L1=Any(abs(Ar)>30)

В результате: L1 = .true. так как|-35.5|>30

Другой пример

if(Any(abs(Ar)>30))print *,’ Ar > 30 presents’

2. Все ли элементы с пятого по седьмой отрицательны?

Logical L2

L2 = All(Ar(5:7)<0) ! В результате: L2=.false.

Другой пример:

if(.not.All(Ar(5:7)<0))print *,’not all Аr(5:7)< 0’

Итоговый счетчик Count

Возвращается целое число – количество элементов, со свойством mask

int=count(mask)сколько элементов удовлетворяет mask.

Пример

Найти количество элементов массива Аr, по модулю больших 11.

Integer K11; K11 = Count(abs(Ar)>11)

В результате: K11=3 – три элемента: |Ar(4)|>11, |Ar(5)|>11, |Ar(7)|>11

Внимание:

- аргументMaskзадают в виде логического выражения от числового массива, в то время как самого числового массива нет среди аргументов функций all, any, count;

- аргумент dim почти во всех примерах отсутствует, поскольку для одномерного массива он не влияет на форму результата.

Положение экстремума – MaxLoc MinLoc

Функции MaxLoc, MinLoc этой группы являются справочными и не редуцируют исходный массив.

Integer,dimension(1:1):: Num

Num=MaxLoc(array[,mask])! Num(1)- номер максимального элемента

Num=MinLoc(array[,mask])! Num(1)-номер минимального элемента

Для одномерного массива функции MaxLoc, MinLoc возвращают целочисленный однокомпонентный вектор с номером минимального (MinLoc) или максимального (MaxLoc) элемента для массива Array = Ar.

Примеры

1. Найти номер максимального элемента одномерного массива Ar.

Integer,dimension(1:1):: Num; IntegerN

Num=MaxLoc(Ar); N = Num(1)

Можно к однокомпонентному вектору MaxLoc(Ar) применить любую из четырех числовых функций редукции, тогда получим скаляр: N=Sum(MaxLoc(Ar))

В результате: N = 4 – для максимального элемента Ar(4) = 17.0

2. Найти номер минимального положительного элемента массиваAr.

Integer,dimension(1:1)::Num; IntegerN

Num=MinLoc(Ar,mask=Ar>0); N=Num(1)

или N=Sum(MinLoc(Ar,mask=Ar>0))
или N=Sum(MinLoc(Ar,1,Ar>0))

В результате: N=6 для минимального положительного элемента Ar(6)=0.4

Редукция двумерных массивов

В примерах везде, где функции применяются к матрице array=Matr, целочисленный двухкомпонентный вектор Num используется для хранения местоположения экстремума: Integer,dimension(1:2)::Num

Real,dimension(1:2,1:5) :: Matr

Таблица 39.

Вещественный массив для функций редукции двумерных массивов

1 2 3 4 5 Вещественный массив 1-11 –12. –13. –14. –15. (матрица Matr) 2-21 –22. –23. –24. 0.

Говоря о матрицах, прежде всего, обсудим аргумент dim, и условимся говорить о суммировании, имея в виду, что для других операций редукции все делается аналогично. Для двумерного массива аргумент dim может отсутствовать или принимать значения из {1,2}:

- нетdim: возвращаемое значение – скаляр, сумма по всему массиву;

- dim =1: возвращаемое значение – вектор-строка, полученная в результате суммирования строками;

- dim =2: возвращаемое значение – вектор-столбец, полученный в результате суммирования столбцами.

Числовые функции заимствуют тип результата у массива array:

Value =Sum(array[, dim][,mask])! сумма

Value =Product(array[,dim][,mask])! произведение

Value =MinVal(array[,dim] [,mask])! минимум

Value =MaxVal(array[, dim][,mask])! максимум

Примеры

1. В матрице Matr найти минимум среди элементов, больших -20

Real S; S = MinVal(Matr, mask=Matr>-20)

Аргумент dim отсутствует. В результате число: S = -15.0

2. Найти max элементы в каждом столбце Matr(вектор-строка)

Real, dimension(1:5) S; S = MaxVal(Matr, dim=1)

В результате – вектор-строка: S(1:5)= [ –11., –12., –13., –14., 0. ]

3. Найти вектор-столбец с построчными суммами для элементов матрицы Matr, больших –22.5

Real,dimension(1:2)S;S=Sum(Matr,dim=2,mask=Matr>-22.5)

В результате – вектор-столбец: S(1)=– 11. – 12. – 13. – 14. – 15.,

S(2)=21. – 22. + 0. => S(1:2)= [ – 65., – 43. ]

4. Найти вектор-столбец с построчными произведениями для ненулевых элементов матрицы Matr с нечетными индексами столбцов.

Real, dimension(1:2) S

S=product(Matr(:,1:5:2),2,mask=Matr(:,1:5:2)/=0)

В результате – вектор-столбец: S(1) = (-11)*(-13)*(-15) = –2145.

S(2)=2 (-21)*(-23) = 483.

Логические функции для двумерного исходного массива возвращают логическое значение или одномерный массив:

any(mask[,dim])– результат «истина», если в массиве есть элементы со свойством mask, то есть логическое ИЛИ элементов маски;

all(mask[,dim])– результат «истина», если все элементы со свойством mask, то есть логическое И элементов маски.

АргументMaskзадают в виде логического выражения от числовой матрицы, в то время как самой числовой матрицы нет среди аргументов.

Примеры

1. Есть ли в матрице Matr элементы, по модулю превышающие 30?

Logical L; L=Any(abs(Matr)>30)

Аргумент dim отсутствует. Результат – скаляр, L = .FALSE.

2. По каждой строке матрицы Matr: есть ли элементы > (–1)?

Logical, dimension(1:2) L; L=Any(Matr>-1, dim=2)

Результат логический массив (вектор-столбец) L(1:2) =[.false.,.true. ]

3. О каждом столбце матрицы Matr: все ли элементы отрицательны?

Logical, dimension(1:5) L; L=All(Matr<0, dim=1)

Результат – логический массив (вектор-строка)

L(1:5)=[.true.,.true.,.true.,.true., .false. ]

Итоговый счетчик возвращает целое число или целочисленный массив – количество элементов, удовлетворяющих условию mask

Count(mask[,dim])

Примеры

1. Подсчитать количество отрицательных элементов в матрице Matr.

Integer K; K=Count(Matr<0)

Аргумент dimотсутствует. В результате – число K=9

2. Пересчитать отрицательные элементы каждой строки матрицы Matr

Integer,dimension(1:2)K; K= Count(Matr<0, dim=2)

Результат – целочисленный массив (вектор-столбец) K(1:2)= [5, 4]

Положение экстремума MinLoc MaxLoc

Функции возвращают целочисленный двухкомпонентный вектор с номером строки и столбца, где расположен экстремум.
Num = MaxLoc(array[,mask])! координаты максимума

Num = MinLoc(array[,mask]) ! координаты минимума

Примеры

1. Найти координаты максимального элемента массива Matr

Integer, dimension(1:2):: Num

Num = MaxLoc(Matr)

В результате: Num= [ 2, 5 ] для Matr(2,5) = 0.

2. Найти координаты максимального отрицательного элемента Matr

Integer, dimension(1:2):: Num

Num = MaxLoc(Matr, Matr<0)

В результате: Num = [ 1, 1 ] для Matr(1, 1) = –11.

3. Найти номер max по модулю элемента первой строки массива Matr

Integer, dimension(1:1):: Num

! поиск максимума в первой строке (одно измерение)

Num = MaxLoc(abs(Matr(1,1:5))); N = Num(1)

В результате: Num(1) = 5; N = 5 для Matr(1, 5) = –15.

4. Найти номер min элемента > (-20) в третьем столбце массива Matr

Integer, dimension(1:1):: Num

! поиск минимума в третьем столбце (одно измерение)

Num=MinLoc(Matr(1:2,3),Matr(1:2,3)>-20)); N=Num(1)

В результате: Num=[ 1 ]; N = 1 для Matr(1, 3) = –13.

Внимание: Фортран-95 определяет результат и при наличии аргумента dim, которого не было в Фортран-90.

Справочные материалы






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2020 pdnr.ru Все права принадлежат авторам размещенных материалов.