Progress-servis55.ru

Новости из мира ПК
15 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Matlab min max

Численная оптимизация в Matlab

Здравствуйте, уважаемые читатели. Продолжаем разбираться в Matlab. И сегодня наша тема связанна с численной оптимизацией — нахождением локальных и глобальных экстремумов функций одной или нескольких переменных в среде Matlab.

Общие сведения

Итак, в этом блоке ничего про Matlab не будет, лишь информация о понятии оптимизации. Это понятие сводится к терминам минимума и максимума функции, или, если коротко — экстремумам.

Под минимумом понимают такое значение функции, которое в некоторой окрестности этой функции, принимает наименьшее значение из всех возможных значений в этой окрестности. Соответственно максимум — это наибольшее значение функции в какой-либо окрестности.

Если не понятно — вот простой пример с всеми известной параболой:

У этой функции есть один минимум, и он находится в точке x = 0. Эта точка называется точкой минимума, а само значение этой функции есть минимум (он тоже равен 0). Максимумов у этой функции нет, но если бы функцию перевернули вверх ногами, то он бы появился.

Часто встречаются сложные функции, у которых есть несколько и минимумов и максимумов. И в таком случае, разделяют понятия локального и глобального экстремума. Локальный — это тот экстремум, который определен в некоторой области, а глобальный — на всей области определения функции. На рисунке выше представлен глобальный минимум параболы.

Поиск экстремумов в Matlab

И теперь, когда вы хоть как то познакомились с понятиями оптимизации и нахождения экстремумов функции, можем перейти к нахождению максимумов и минимумов в Matlab. Далее, как обычно мы будем разбирать примеры различной сложности. Часть примеров будет содержать в себе стандартные команды Matlab для нахождения минимума и максимума функции, а другая часть — это реализация метода с нуля.

Стандартные методы Matlab

Разберем 2 задачи нахождения минимума в Matlab:

1 пример. Вычислить минимум функции f(x)=-x 1/x , определив графически интервал его локализации. Вычисления провести с минимальным шагом по аргументу 1*10 -5

Для начала создадим скрипт, который отобразит эту функцию. Вот код для этого:

Запускаем скрипт и получаем:
По графику функции делаем вывод, что имеется один минимум, и его координаты находятся в интервале 2.5 — 3, то есть мы сократим интервал поиска минимума.

Теперь создадим еще один скрипт, дадим ему название first.m и пропишем в него функцию:

Таким образом в этом m-файле мы определили функцию. Теперь в командном окне мы пропишем следующий код:

И получаем такие значения:
x = 2.7183 — координата точки минимума
y = -1.4447 — значение минимума

В этой части кода мы использовали стандартный метод Matlab для нахождения минимума функции — fminbnd. мы передаем 3 параметра — саму функцию и интервалы для поиска минимума. Стоит отметить, что этот метод подходит только для функций, зависящих от одной переменной.

Итак, для этой задачи мы создали 2 скрипт-файла, которые вы можете скачать в конце статьи.

2 пример. Вычислить минимум функции двух переменных x 4 +y 4 -2x 2 +4xy-2y 2 +1 с точность 1*10-5.
Координаты начальной точки поиска [1.0,-1.0].

Для начала построим график функции от двух переменных — для этого создадим новый скрипт и пропишем там этот код:

Функция surf позволяет строить трехмерные графики и отображать глубину значений функции для лучшего понимания. Запускаем скрипт — в итоге получился такой график:
Как видно из графика, имеется два участка, где присутствует локальный минимум (темно-синие участки), и наша задача найти координаты и значения двух этих точек. Воспользуемся стандартными инструментами Matlab и создадим новый скрипт с именем second.m, в котором и пропишем код:

После этого, в командной строке, как и для первой задачи, прописываем стандартную функцию Matlab:

Получаем такой вывод:

Для нахождение минимумов в Matlab на этот раз мы использовали функцию fminsearch. Эта функция реализует симплекс — метод Нелдера-Мида. В выводе мы получили несколько переменных: в z записались значения координат точек минимума, в f само значение этого минимума. А в переменных exitflag и output помещены условия прерывания процесса поиска и информация об оптимизации соответственно.

В итоге у нас опять получилось 2 m-файла.

Метод Ньютона Matlab

А теперь попробуем сами реализовать метод Ньютона для оптимизации функции.

3 пример. Методом Ньютона найти точку минимума x* и минимальное значение f* функции f(x)=(x-2) 4 -lnx на отрезке xє[2;3] c точностью 10 -7

Начнем с того, что создадим новый скрипт и назовем его Newton.m. Затем пропишем в нем код:

Вполне понятная функция, которая работает с первой и второй производной символьной функции, которую получает в качестве параметра. Также в параметрах принимается диапазон. Эта функция возвращает координаты точки и значение экстремума.
Теперь нам осталось вызвать эту функцию в командном окне:

В итоге получилось:
Xk = 2.4663
Yk = -0.8554

Не будем приводить график, но вы сами можете проверить, что значения найдены правильно. Важно сказать, что этот метод позволяет найти только локальный экстремум, и если на выбранном диапазоне есть несколько экстремумов, то метод может найти не тот, который нужен вам.

Также, очень важно задавать как можно узкий диапазон поиска, иначе метод может работать некорректно, особенно это проявляется с периодическими функциями по типу cos(x) и т.п.

Заключение

Ну что ж, в этой статье мы рассмотрели некоторые методы для нахождения экстремумов в Matlab. Мы использовали как стандартные методы, так и реализовали метод Ньютона в среде Matlab. Их исходники чуть ниже.
Скачать исходники

На этом сегодня все, оставляйте ваши комментарии и задавайте вопросы.

Документация

Максимальные элементы массива

Синтаксис

Описание

M = max( A ) возвращает максимальные элементы массива.

Если A вектор, затем max(A) возвращает максимум A .

Если A матрица, затем max(A) вектор-строка, содержащий максимальное значение каждого столбца.

Если A многомерный массив, затем max(A) действует вдоль первого измерения массива, размер которого не равняется 1 , обработка элементов как векторы. Размер этой размерности становится 1 в то время как размеры всех других размерностей остаются то же самое. Если A пустой массив, первая размерность которого имеет нулевую длину, затем max(A) возвращает пустой массив с тем же размером как A .

M = max( A ,[], dim ) возвращает максимальный элемент по измерению dim . Например, если A матрица, затем max(A,[],2) вектор-столбец, содержащий максимальное значение каждой строки.

M = max( A ,[], nanflag ) задает, включать ли или не использовать NaN значения в вычислении. Например, max(A,[],’includenan’) включает весь NaN значения в A в то время как max(A,[],’omitnan’) игнорирует их.

M = max( A ,[], dim , nanflag ) также задает размерность, которую задает направление расчета при использовании nanflag опция.

[ M , I ] = max( ___ ) также возвращает индекс в операционную размерность, которая соответствует максимальному значению A для любого из предыдущих синтаксисов.

M = max( A ,[], ‘all’ ) находит максимум по всем элементам A . Этот синтаксис допустим для версий MATLAB ® R2018b и позже.

Читать еще:  Grid on в matlab

M = max( A ,[], vecdim ) вычисляет максимум по размерностям, заданным в векторном vecdim . Например, если A матрица, затем max(A,[],[1 2]) вычисляет максимум по всем элементам в A , поскольку каждый элемент матрицы содержится в срезе массивов, заданном размерностями 1 и 2.

M = max( A ,[], ‘all’ , nanflag ) вычисляет максимум по всем элементам A при использовании nanflag опция.

M = max( A ,[], vecdim , nanflag ) задает несколько размерностей, которых задают направление расчета при использовании nanflag опция.

[ M , I ] = max( A ,[], ___ ,’linear’) возвращает линейный индекс в A это соответствует максимальному значению в A .

C = max( A , B ) возвращает массив с самыми большими элементами, взятыми из A или B .

C = max( A , B , nanflag ) также задает, как обработать NaN значения.

Примеры

Самый большой векторный элемент

Создайте вектор и вычислите его самый большой элемент.

Самый большой комплексный элемент

Создайте комплексный вектор и вычислите его самый большой элемент, то есть, элемент с самой большой величиной.

Самый большой элемент в каждом столбце матрицы

Создайте матрицу и вычислите самый большой элемент в каждом столбце.

Самый большой элемент в каждой матричной строке

Создайте матрицу и вычислите самый большой элемент в каждой строке.

Самое большое включение элемента NaN

Создайте вектор и вычислите его максимум, исключая NaN значения.

max(A) также приведет к этому результату начиная с ‘omitnan’ опция по умолчанию.

Используйте ‘includenan’ отметьте, чтобы возвратить NaN .

Самые большие индексы элемента

Создайте матричный A и вычислите самые большие элементы в каждом столбце, а также индексы строки A в котором они появляются.

Максимум страницы массивов

Создайте трехмерный массив и вычислите максимум по каждой странице данных (строки и столбцы).

Начиная в R2018b, вычислять максимум по всем размерностям массива, можно или задать каждую размерность в векторном аргументе размерности или использовать ‘all’ опция.

Возвратите линейные индексы

Создайте матричный A и возвратите максимальное значение каждой строки в матричном M . Используйте ‘linear’ опция, чтобы также возвратить линейные индексы I таким образом, что M = A(I) .

Самое большое сравнение элемента

Создайте матрицу и возвратите самое большое значение между каждым из его элементов по сравнению со скаляром.

Входные параметры

A — Входной массив
скаляр | вектор | матрица | многомерный массив

Входной массив, заданный как скалярный, векторный, матричный или многомерный массив.

Если A является комплексным, затем max(A) возвращает комплексное число с самой большой величиной. Если величины равны, то max(A) возвращает значение с самой большой величиной и самым большим углом фазы.

Если A скаляр, затем max(A) возвращает A .

Если A пустой массив 0 на 0, затем max(A) также.

Если A имеет вводят categorical , затем это должно быть порядковым.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | categorical | datetime | duration
Поддержка комплексного числа: Да

dim — Размерность, которая задает направление расчета
положительный целочисленный скаляр

Величина для работы, заданная как положительный целый скаляр. Если значение не задано, то по умолчанию это первый размер массива, не равный 1.

Размерность dim указывает на размерность, длина которой уменьшает до 1 . size(M,dim) 1 , в то время как размеры всех других размерностей остаются то же самое, если size(A,dim) 0 . Если size(A,dim) 0 , затем max(A,dim) возвращает пустой массив с тем же размером как A .

Рассмотрите двумерный входной массив, A :

Если dim = 1 , затем max(A,[],1) возвращает вектор-строку, содержащий самый большой элемент в каждом столбце.

Если dim = 2 , затем max(A,[],2) возвращает вектор-столбец, содержащий самый большой элемент в каждой строке.

max возвращает A если dim больше, чем ndims(A) .

vecdim — Вектор размерностей
вектор положительных целых чисел

Вектор размерностей, заданных как вектор положительных целых чисел. Каждый элемент представляет размерность входного массива. Продолжительности выхода в заданных операционных размерностях равняются 1, в то время как другие остаются то же самое.

Рассмотрите 2 3х3 входным массивом, A . Затем max(A,[],[1 2]) возвращает 1 1 3 массивами, элементы которых являются максимумами, вычисленными по каждой странице A .

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

B — Дополнительный входной массив
скаляр | вектор | матрица | многомерный массив

Дополнительный входной массив, заданный как скаляр, вектор, матрица или многомерный массив. Числовые входные параметры A и B должен или быть одного размера или иметь размеры, которые совместимы (например, A M — N матрица и B скаляр или 1 — N вектор-строка). Для получения дополнительной информации см. «Совместимые размеры массивов для основных операций».

Если A и B datetime, длительность или категориальные массивы, затем они должны быть одного размера, если каждый не скаляр.

A и B должен быть совпадающий тип данных, если каждый не double . В этом случае типом данных другого массива может быть single длительность , или любой целочисленный тип.

Если A и B порядковые категориальные массивы, у них должны быть те же наборы категорий с тем же порядком.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | categorical | datetime | duration
Поддержка комплексного числа: Да

nanflag NaN условие
‘omitnan’ (значение по умолчанию) | ‘includenan’

NaN условие, заданное как одно из этих значений:

‘omitnan’ — Проигнорируйте весь NaN значения во входе. Если всеми элементами является NaN , затем max возвращает первый.

‘includenan’ — Включайте NaN значения во входе для вычисления.

Для datetime массивы, можно также использовать ‘omitnat’ или ‘includenat’ не использовать и включать NaT значения, соответственно.

Для categorical массивы, можно также использовать ‘omitundefined’ или ‘includeundefined’ не использовать и включать неопределенные значения, соответственно.

Типы данных: char

Выходные аргументы

M — Максимальные значения
скаляр | вектор | матрица | многомерный массив

Максимальные значения, возвращенные как скаляр, вектор, матрица или многомерный массив. size(M,dim) 1 , в то время как размеры всех других размерностей совпадают с размером соответствующей размерности в A , если size(A,dim) 0 . Если size(A,dim) 0 , затем M пустой массив с тем же размером как A .

I — Индекс
скаляр | вектор | матрица | многомерный массив

Индексируйте, возвращенный как скаляр, вектор, матрица или многомерный массив. I одного размера как первый выход.

Когда ‘linear’ не задан, I индекс в операционную размерность. Когда ‘linear’ задан, I содержит линейные индексы A соответствие максимальным значениям.

Если самый большой элемент происходит несколько раз, то I содержит индекс к первому вхождению значения.

C — Максимальные элементы от A или B
скаляр | вектор | матрица | многомерный массив

Максимальные элементы от A или B , возвращенный как скаляр, вектор, матрица или многомерный массив. Размер C определяется неявным расширением размерностей A и B Для получения дополнительной информации см. «Совместимые размеры массивов для основных операций».

Тип данных C зависит от типов данных A и B :

Если A и B совпадающий тип данных, затем C совпадает с типом данных A и B .

Если любой A или B single , затем C single .

Если любой A или B целочисленный тип данных с другим скалярный double , затем C принимает целочисленный тип данных.

Расширенные возможности

«Высокие» массивы
Осуществление вычислений с массивами, которые содержат больше строк, чем помещается в памяти.

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

Читать еще:  Функция mean matlab

Если вы задаете dim , затем это должна быть константа.

Массивы графического процессора
Ускорьте код путем работы графического процессора (GPU) с помощью Parallel Computing Toolbox™.

Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Выполнения на графическом процессоре (Parallel Computing Toolbox).

Распределенные массивы
Большие массивы раздела через объединенную память о вашем кластере с помощью Parallel Computing Toolbox™.

Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите функции MATLAB Выполнения с Распределенными Массивами (Parallel Computing Toolbox).

Смотрите также

Представлено до R2006a

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB
Поддержка

© 1994-2020 The MathWorks, Inc.

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.

Matlab min max

Maximum elements of an array

Syntax

Description

M = max( A ) returns the maximum elements of an array.

If A is a vector, then max(A) returns the maximum of A .

If A is a matrix, then max(A) is a row vector containing the maximum value of each column.

If A is a mult >max(A) operates along the first array dimension whose size does not equal 1 , treating the elements as vectors. The size of this dimension becomes 1 while the sizes of all other dimensions remain the same. If A is an empty array whose first dimension has zero length, then max(A) returns an empty array with the same size as A .

M = max( A ,[], dim ) returns the maximum element along dimension dim . For example, if A is a matrix, then max(A,[],2) is a column vector containing the maximum value of each row.

M = max( A ,[], nanflag ) specifies whether to include or omit NaN values in the calculation. For example, max(A,[],’includenan’) includes all NaN values in A while max(A,[],’omitnan’) ignores them.

M = max( A ,[], dim , nanflag ) also specifies the dimension to operate along when using the nanflag option.

[ M , I ] = max( ___ ) also returns the index into the operating dimension that corresponds to the maximum value of A for any of the previous syntaxes.

M = max( A ,[], ‘all’ ) finds the maximum over all elements of A . This syntax is valid for MATLAB ® versions R2018b and later.

M = max( A ,[], vecdim ) computes the maximum over the dimensions specified in the vector vecdim . For example, if A is a matrix, then max(A,[],[1 2]) computes the maximum over all elements in A , since every element of a matrix is contained in the array slice defined by dimensions 1 and 2.

M = max( A ,[], ‘all’ , nanflag ) computes the maximum over all elements of A when using the nanflag option.

M = max( A ,[], vecdim , nanflag ) specifies multiple dimensions to operate along when using the nanflag option.

[ M , I ] = max( A ,[], ___ ,’linear’) returns the linear index into A that corresponds to the maximum value in A .

C = max( A , B ) returns an array with the largest elements taken from A or B .

C = max( A , B , nanflag ) also specifies how to treat NaN values.

Examples

Largest Vector Element

Create a vector and compute its largest element.

Largest Complex Element

Create a complex vector and compute its largest element, that is, the element with the largest magnitude.

Largest Element in Each Matrix Column

Create a matrix and compute the largest element in each column.

Largest Element in Each Matrix Row

Create a matrix and compute the largest element in each row.

Largest Element Involving NaN

Create a vector and compute its maximum, excluding NaN values.

max(A) will also produce this result since ‘omitnan’ is the default option.

Use the ‘includenan’ flag to return NaN .

Largest Element Indices

Create a matrix A and compute the largest elements in each column, as well as the row indices of A in which they appear.

Maximum of Array Page

Create a 3-D array and compute the maximum over each page of data (rows and columns).

Starting in R2018b, to compute the maximum over all dimensions of an array, you can either specify each dimension in the vector dimension argument, or use the ‘all’ option.

Return Linear Indices

Create a matrix A and return the maximum value of each row in the matrix M . Use the ‘linear’ option to also return the linear indices I such that M = A(I) .

Largest Element Comparison

Create a matrix and return the largest value between each of its elements compared to a scalar.

Input Arguments

A — Input array
scalar | vector | matrix | multidimensional array

Input array, specified as a scalar, vector, matrix, or multidimensional array.

If A is complex, then max(A) returns the complex number with the largest magnitude. If magnitudes are equal, then max(A) returns the value with the largest magnitude and the largest phase angle.

If A is a scalar, then max(A) returns A .

If A is a 0-by-0 empty array, then max(A) is as well.

If A has type categorical , then it must be ordinal.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | categorical | datetime | duration
Complex Number Support: Yes

dim — Dimension to operate along
positive integer scalar

Dimension to operate along, specified as a positive integer scalar. If no value is specified, then the default is the first array dimension whose size does not equal 1.

Dimension dim indicates the dimension whose length reduces to 1 . The size(M,dim) is 1 , while the sizes of all other dimensions remain the same, unless size(A,dim) is 0 . If size(A,dim) is 0 , then max(A,dim) returns an empty array with the same size as A .

If dim = 1 , then max(A,[],1) returns a row vector containing the largest element in each column.

If dim = 2 , then max(A,[],2) returns a column vector containing the largest element in each row.

max returns A if dim is greater than ndims(A) .

vecdim — Vector of dimensions
vector of positive integers

Vector of dimensions, specified as a vector of positive integers. Each element represents a dimension of the input array. The lengths of the output in the specified operating dimensions are 1, while the others remain the same.

Читать еще:  Matlab на русском

Cons >A . Then max(A,[],[1 2]) returns a 1-by-1-by-3 array whose elements are the maximums computed over each page of A .

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

B — Additional input array
scalar | vector | matrix | multidimensional array

Additional input array, specified as a scalar, vector, matrix, or mult >A and B must either be the same size or have sizes that are compatible (for example, A is an M -by- N matrix and B is a scalar or 1 -by- N row vector). For more information, see Compatible Array Sizes for Basic Operations.

If A and B are datetime, duration, or categorical arrays, then they must be the same size unless one is a scalar.

A and B must be the same data type unless one is a double . In that case, the data type of the other array can be single , duration , or any integer type.

If A and B are ordinal categorical arrays, they must have the same sets of categories with the same order.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | categorical | datetime | duration
Complex Number Support: Yes

Matlab min max

В системе MATLAB несколько функций специально предназначены для работы с массивами. Одну из таких функций — функцию ones , f6fs24 мы уже рассмотрели в предыдущем пункте. Эта функция предназначена для создания массивов произвольной размерности с единичными элементами.

Другими функциями этой группы являются функция zeros , производящая массив из нулей, и функция rand , генерирующая массив со случайными элементами, равномерно распределёнными на интервале от до 1.

Например, выражение с этой функцией

производит массив 3×3 случайных чисел чисел

равномерно распределённых на интервале от до 1.

Если вызвать эту функцию с двумя аргументами

То получится матрица B размером 2×3, элементами которой являются случайные числа. Эту функцию можно вызвать и с большим числом скалярных аргументов — в этом случае будут генерироваться многомерные массивы случайных чисел.

Вообще, возможность вызывать функции в системе MATLAB с одним именем, но с различными аргументами — типична для этой системы! Все варианты возможных вызовов любой функции перечисляются с помощью команды

Получив такую справку по функции rand , узнаём, что вызов функции rand(2,3) полностью эквивалентен вызову rand([2,3]) , то есть вместо двух скалярных аргументов можно задать одну вектор-стоку с двумя элементами. Так как функция size для матрицы C = [ 1 2 ; 4 5 ; 7 8 ] возвращает вектор-строку v

элементами которой служат размеры матрицы C , то вызовы

D = rand(3,2); D = rand([3,2])

эквивалентны. Вместо последнего выражения можно использовать последовательность следующих двух выражений:

[m,n] = size(C); D = rand(m,n);

где мы ввели две скалярные переменные m и n для размеров матрицы C , определяемые за один вызов функции size .

Ранее при рассмотрении многомерных массивов мы уже сказали, что операцию конкатенации с помощью квадратных скобок нельзя применить для порождения нового измерения в матрицах (кроме как для перехода от размерности 1 к размерности 2). Для этой цели применяют специальную функцию cat . Пусть имеются два двумерных массива (матрицы) A1 = [ 1 2 3 ; 4 5 6 ] и A2 = [ 7 8 9 ; 3 2 1 ] . Тогда их конкатенация вдоль разных направлений приводит к следующим результатам:

1). cat(1,A1,A2) порождает массив [ 1 2 3 ; 4 5 6 ; 7 8 9 ; 3 2 1 ] , то есть тот же результат, что и [ A1 ; A2 ] .

2). cat(2,A1,A2) порождает массив [ 1 2 3 7 8 9 ; 4 5 6 3 2 1 ]

то есть тот же результат, что и [ A1 , A2 ] .

3). A3 = cat(3,A1,A2) порождает из двумерных массивов A1 и A2 трёхмерный массив A3 , который показывается в командном окне следующим образом:

Наглядно такой массив можно изобразить на «трёхмерном» рисунке:

Для простых расчётов с элементами массивов предназначены функции sum , prod , max , min и sort . Функцию sum чаще всего применяют для одномерных массивов, где она суммирует все элементы. Для матриц (двумерных массивов) эта функция суммирует элементы в столбцах, так что если B = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] , то

sum(B) == [ 12 , 15, 18 ]

Для многомерных массивов эта функция позволяет выбрать направление суммирования элементов.

Функция prod во всём аналогична только что рассмотренной функции sum , но только вместо суммирования выполняет умножение, так что

prod(B) == [ 28 , 80, 162 ]

Функции max и min ищут, соответственно, максимальный и минимальный элементы в массивах, причём если для одномерных массивов это единственный экстремальный элемент, то для матриц функции порождают набор экстремальных элементов для каждого столбца. Таким образом,

На примере этих функций покажем ещё одну уникальную особенность функций в системе MATLAB — возможность требовать от тех функций, которые это могут, разное число возвращаемых значений.

Пусть имеется вектор-сторока v=[ 5 2 6 8 3]; Вызывая функцию min для этого массива, находим наименьший из его элементов:

равный двум. Но если нас также будет интересовать и номер (индекс) N наименьшего элемента, то мы можем осуществить вызов функции min следующим образом:

откуда видно, что в векторе v наименьший элемент стоит на втором месте.

Функция sort сортирует в возрастающем порядке элементы одномерных массивов, элементы столбцов в матрицах (каждый столбец отдельно) и так далее.

Под конец рассмотрим очень важные функции all , any и find . Функция all в случае её применения к вектору возвращает 1 («истина«), если все элементы вектора не равны нулю («истинны«), или 0 в противном случае (то есть в случае, если хотя бы один элемент нулевой). Функция any действует противоположным образом. Она возвращает нуль в случае, когла все элементы вектора нулевые, и она возвращает единицу, когда хотя бы один элемент ненулевой. В случае применения к матрицам обе эти функции трактуют столбцы матриц как векторы, по каждому из которых нужно дать результат так, как это описано выше.

Для примера, если F = [ 1 2 0 ; 0 3 0; 7 4 0 ] , то

Функция find в качестве аргумента принимает некоторое условие, а возвращает набор номеров (индексов) неравных нулю элементов массива. Для одномерного массива v вызов этой функции

возвращает вектор u индексов ненулевых элементов. В частности, для вектора v=[1 0 3] имеет место равенство

так как отличны от нуля элементы с номерами (индексами) 1 и 3 .

Для матриц функция find возвращает уже не один вектор индексов, а целый их набор. Каждый вектор из этого набора получается обработкой отдельного столбца матрицы. Например, для матрицы A = [ 1 0 3; 0 4 5; 6 7 8] следующий вызов функции

возвращает вектор-столбцы u и u2 , первый из которых содержит номера строк отличных от нуля элементов матрицы A , причём матрица просматривается по столбцам слева-направо (сначала — первый столбец, затем — второй и т.д.). Вектор столбец u2 содержит номера столбцов ненулевых элементов. То есть справедливы равенства

Ссылка на основную публикацию
Adblock
detector