Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Топ:
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2017-09-30 | 361 |
5.00
из
|
Заказать работу |
Все ответы в примерах, приведенных ниже, получены для одномерного вещественного массива:
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; Real Value
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; Integer N
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; Integer N
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.
Справочные материалы
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!