Size matlab функция
Size matlab функция
В системе 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 содержит номера столбцов ненулевых элементов. То есть справедливы равенства
Основные математические функции MatLab
MatLab содержит в себе все распространенные математические функции, которые доступны по их имени при реализации алгоритмов. Например, функция sqrt() позволяет вычислять квадрат числа и может быть использована в программе следующим образом:
x = 2;
y = 4;
d = sqrt(x^2+y^2); %вычисление евклидового расстояния
Аналогичным образом вызываются и все другие математические функции, представленные в табл. 1.2.
Таблица 1.2. Основные математические функции MatLab
sqrt(x) | вычисление квадратного корня |
exp(x) | возведение в степень числа e |
pow2(x) | возведение в степень числа 2 |
log(x) | вычисление натурального логарифма |
log10(x) | вычисление десятичного логарифма |
log2(x) | вычисление логарифма по основанию 2 |
sin(x) | синус угла x, заданного в радианах |
cos(x) | косинус угла x, заданного в радианах |
tan(x) | тангенс угла x, заданного в радианах |
cot(x) | котангенс угла x, заданного в радианах |
asin(x) | арксинус |
acos(x) | арккосинус |
atan(x) | арктангенс |
pi | число пи |
round(x) | округление до ближайшего целого |
fix(x) | усечение дробной части числа |
floor(x) | округление до меньшего целого |
ceil(x) | округление до большего целого |
mod(x) | остаток от деления с учётом знака |
sign(x) | знак числа |
factor(x) | разложение числа на простые множители |
isprime(x) | истинно, если число простое |
rand | генерация псевдослучайного числа с равномерным законом распределения |
randn | генерация псевдослучайного числа с нормальным законом распределения |
abs(x) | вычисление модуля числа |
Почти все элементарные функции допускают вычисления и с комплексными аргументами. Например:
res = sin(2+3i)*atan(4i)/(1 — 6i); % res = -1.8009 — 1.9190i
Ниже показан пример задания вектора с именем a, и содержащий значения 1, 2, 3, 4:
a = [1 2 3 4]; % вектор-строка
Для доступа к тому или иному элементу вектора используется следующая конструкция языка:
disp( a(1) ); % отображение значения 1-го элемента вектора
disp( a(2) ); % отображение значения 2-го элемента вектора
disp( a(3) ); % отображение значения 3-го элемента вектора
disp( a(4) ); % отображение значения 4-го элемента вектора
т.е. нужно указать имя вектора и в круглых скобках написать номер индекса элемента, с которым предполагается работать. Например, для изменения значения 2-го элемента массива на 10 достаточно записать
a(2) = 10; % изменение значения 2-го элемента на 10
Часто возникает необходимость определения общего числа элементов в векторе, т.е. определения его размера. Это можно сделать, воспользовавшись функцией length() следующим образом:
N = length(a); % (N=4) число элементов массива а
Если требуется задать вектор-столбец, то это можно сделать так
a = [1; 2; 3; 4]; % вектор-столбец
b = [1 2 3 4]’; % вектор-столбец
при этом доступ к элементам векторов осуществляется также как и для векторов-строк.
Следует отметить, что векторы можно составлять не только из отдельных чисел или переменных, но и из векторов. Например, следующий фрагмент программы показывает, как можно создавать один вектор на основе другого:
a = [1 2 3 4]; % начальный вектор a = [1 2 3 4]
b = [a 5 6]; % второй вектор b = [1 2 3 4 5 6]
Здесь вектор b состоит из шести элементов и создан на основе вектора а. Используя этот прием, можно осуществлять увеличение размера векторов в процессе работы программы:
a = [a 5]; % увеличение вектора а на один элемент
Недостатком описанного способа задания (инициализации) векторов является сложность определения векторов больших размеров, состоящих, например, из 100 или 1000 элементов. Чтобы решить данную задачу, в MatLab существуют функции инициализации векторов нулями, единицами или случайными значениями:
a1 = zeros(1, 100); % вектор-строка, 100 элементов с
% нулевыми значениями
a2 = zeros(100, 1); % вектор-столбец, 100 элементов с
% нулевыми значениями
a3 = ones(1, 1000); % вектор-строка, 1000 элементов с
% единичными значениями
a4 = ones(1000, 1); % вектор-столбец, 1000 элементов с
% единичными значениями
a5 = rand(1000, 1); % вектор-столбец, 1000 элементов со
% случайными значениями
Матрицы в MatLab задаются аналогично векторам с той лишь разницей, что указываются обе размерности. Приведем пример инициализации единичной матрицы размером 3х3:
E = [1 0 0; 0 1 0; 0 01]; % единичная матрица 3х3
E = [1 0 0
0 1 0
0 0 1]; % единичная матрица 3х3
Аналогичным образом можно задавать любые другие матрицы, а также использовать приведенные выше функции zeros(), ones() и rand(), например:
A1 = zeros(10,10); % нулевая матрица 10х10 элементов
A2 = zeros(10); % нулевая матрица 10х10 элементов
A3 = ones(5); % матрица 5х5, состоящая из единиц
A4 = rand(100); % матрица 100х100, из случайных чисел
Для доступа к элементам матрицы применяется такой же синтаксис как и для векторов, но с указанием строки и столбца где находится требуемый элемент:
A = [1 2 3;4 5 6;7 8 9]; % матрица 3х3
disp( A(2,1) ); % вывод на экран элемента, стоящего во
% второй строке первого столбца, т.е. 4
disp( A(1,2) ); % вывод на экран элемента, стоящего в
% первой строке второго столбца, т.е. 2
Также возможны операции выделения указанной части матрицы, например:
B1 = A(:,1); % B1 = [1; 4; 7] – выделение первого столбца
B2 = A(2,:); % B2 = [1 2 3] – выделение первой строки
B3 = A(1:2,2:3); % B3 = [2 3; 5 6] – выделение первых двух
% строк и 2-го и 3-го столбцов матрицы А.
Размерность любой матрицы или вектора в MatLab можно определить с помощью функции size(), которая возвращает число строк и столбцов переменной, указанной в качестве аргумента:
a = 5; % переменная а
A = [1 2 3]; % вектор-строка
B = [1 2 3; 4 5 6]; % матрица 2х3
size(a) % 1х1
size(A) % 1х3
size(B) % 2х3
Не нашли то, что искали? Воспользуйтесь поиском:
Лучшие изречения: Студент — человек, постоянно откладывающий неизбежность. 11311 — | 7592 —
или читать все.
Size matlab функция
sz = size( A ) returns a row vector whose elements are the lengths of the corresponding dimensions of A . For example, if A is a 3-by-4 matrix, then size(A) returns the vector [3 4] .
If A is a table or timetable, then size(A) returns a two-element row vector consisting of the number of rows and the number of table variables.
szdim = size( A , dim ) returns the length of dimension dim when dim is a positive integer scalar. Starting in R2019b, you can also specify dim as a vector of positive integers to query multiple dimension lengths at a time. For example, size(A,[2 3]) returns the lengths of the second and third dimensions of A in the 1-by-2 row vector szdim .
szdim = size( A , dim1,dim2,…,dimN ) returns the lengths of dimensions dim1,dim2,…,dimN in the row vector szdim (starting in R2019b).
[ sz1. szN ] = size( ___ ) returns the lengths of the queried dimensions of A separately.
Examples
Size of 4-D Array
Create a random 4-D array and return its size.
Query only the length of the second dimension of A .
Starting in R2019b, you can query multiple dimension lengths at a time by specifying a vector dimension argument. For example, find the lengths of the first and third dimensions of A .
Find the lengths of the second through fourth dimensions of A .
Alternatively, you can list the queried dimensions as separate input arguments.
Size of Table
Create a table with 5 rows and 4 variables.
Find the size of the table. Although the BloodPressure variable contains two columns, size only counts the number of variables.
Dimension Lengths as Separate Arguments
Create a random matrix and return the number of rows and columns separately.
Input Arguments
A — Input array
scalar | vector | matrix | multidimensional array
Input array, specified as a scalar, a vector, a matrix, or a multidimensional array.
Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | function_handle | cell | categorical | datetime | duration | calendarDuration | table | timetable
Complex Number Support: Yes
dim — Queried dimensions
positive integer scalar | vector of positive integer scalars
Queried dimensions, specified as a positive integer scalar or vector of positive integer scalars. If an element of dim is larger than ndims(A) , then size returns 1 in the corresponding element of the output.
Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
dim1,dim2,…,dimN — List of queried dimensions
positive integer scalars
List of queried dimensions, specified as positive integer scalars separated by commas. If an element of the list is larger than ndims(A) , then size returns 1 in the corresponding element of the output.
Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Output Arguments
sz — Array size
row vector of nonnegative integers
Array size, returned as a row vector of nonnegative integers.
Each element of sz represents the length of the corresponding dimension of A . If any element of sz is equal to 0 , then A is an empty array.
If A is a scalar, then sz is the row vector [1 1] .
If A is a table or timetable, then sz is a two-element row vector containing the number of rows and the number of variables. Multiple columns within a single variable are not counted.
If A is a character vector of type char , then size returns the row vector [1 M] where M is the number of characters. However, if A is a string scalar, size returns [1 1] because it is a single element of a string array. For example, compare the output of size for a character vector and string:
Стандартные функции Matlab
Все операции в Matlab ориентированы прежде всего на работу с матрицами, но могут выть использованы при работе с векторами и скалярными переменными.
Элементарные функции Matlab. К ним относятся следующие функции:
sin(x) sinh(x) asin(x) asinh(x)
cos(x) cosh(x) acos(x) acosh(x)
tan(x) tanh(x) atan(x) atan2(x,y) atanh(x)
cot(x) coth(x) acot(x) acoth(x)
exp(x) log(x) log10(x) log2(x) pow2(x) sqrt(x)
Функции комплексного аргумента:
abs(z) – модуль комплексного числа; angle(z) – аргумент;
complex(x, y) – формирование комплексного числа x+y*i;
conj(z) – возвращает комплексно-сопряженное (по отношению к z) число;
real(z) – возвращает действительную часть; imag(z) – мнимую часть.
Функции округления и нецелочисленного деления:
fix(x) – округление в сторону к нулю, floor(x) – к –¥, ceil(x) – к +¥,
round(x) – до ближайшего целого;
mod(x, y) – остаток от деления x/y с учетом знака,
rem(x, y) – то же, без учета знака;
sign(x) – знак числа (+1/–1).
Элементарные функции, как и всякие другие, имеют один результат (массив). Элементарные функции могут быть использованы с одинаковым синтаксисом как для чисел, так и для массивов.
Пример 1. Разный тип параметров
» x=-8; X=[5 -1 -2]; A=[1 2 -3; -5 6 7]; z=3-4i;
Различают матричные и поэлементные арифметические операции.
+ – уточнение знака (унарная), сложение;
– – изменение знака (унарная), вычитание;
Поскольку математический смысл операций матричного и поэлементного сложения и вычитания идентичен:
C = A ± B означает
синтаксис матричных и поэлементных операций сложения и вычитания одинаков, в них используются одни и те же символы операций.
* – скалярное матричное умножение;
^ – матричное возведение в степень;
.^ – поэлементное возведение в степень;
– матричное деление слева;
/ – матричное деление справа;
.’ – несопряженное транспонирование (унарная).
Все арифметические операции, за исключением указанных, являются бинарными.
В операциях +, –, .*, ./ и .^ либо оба операнда должны иметь одинаковую размерность, либо один из операндов должен быть скалярной величиной.
» A=[1 2 3; 4 5 6]; B=[7 8 9; 3 2 1];
7.0000 4.0000 3.0000
0.7500 0.4000 0.1667
0.7000 0.8000 0.9000
0.3000 0.2000 0.1000
Для операции * (матричное произведение) матрица-сомножитель2 должна иметь столько строк, сколько столбцов имеет матрица-сомножитель1:
![]() |
Inner matrix dimensions must agree.
Операции транспонирования ‘ и .’ для матриц с действительными коэффициентами абсолютно равнозначны:
Для комплексных чисел и матриц с комплексными коэффициентами операция ‘ дает транспонированную сопряженную матрицу, а операция .’ – транспонированную несопряженную:
» Ac=[1+2i 1+3i 1+4i; 2+3i 2+4i 2+5i];
1.0000 — 2.0000i 2.0000 — 3.0000i
1.0000 — 3.0000i 2.0000 — 4.0000i
1.0000 — 4.0000i 2.0000 — 5.0000i
1.0000 + 2.0000i 2.0000 + 3.0000i
1.0000 + 3.0000i 2.0000 + 4.0000i
1.0000 + 4.0000i 2.0000 + 5.0000i
Операция ^ (матричное возведение в степень) выполняется только для квадратных матриц, и означает умножение матрицы саму на себя заданное число раз (второй операнд обязательно скаляр):
-0.9100 — 3.5442i 0.4163 + 1.6212i
0.6244 + 2.4318i -0.2856 — 1.1124i
генерирует обратную матрицу D -1 .
Операция X/Y эквивалентна X*Y -1 , операция XY – операции X -1 *Y.
Последняя операция широко используется при решении систем линейных уравнений вида
Действительно, представив систему уравнений в матричной форме:
и умножив обе части последнего уравнения на A -1 слева, получим:
A -1 * A * X = A -1 * B,
откуда решение системы уравнений:
Пример. Решить систему уравнений
Решение сводится к набору в интерактивном режиме следующих команд:
Проверку вычисления корней можно выполнить следующим образом:
| – логическое «или» (0|0 – 0, 1|0 – 1, 0|1 – 1, 1|1 – 1);
xor – логическое исключающее «или» (0xor0 – 0, 0xor1 – 1, 1xor0 – 1, 1xor1 – 0);
Если логические операции (а также логические функции) выполняются над действительными числами, то ложью считают число нуль, а истиной – все числа, не равные нулю.
Операции отношения (сравнения)
> – больше; >= – больше или равно; 1
» A=[1 8 3; 6 2 5]; B=[4 3 1; 2 6 8];
» A d 0 , 10 dk ]. Шаг по показателю степени hd= . Отношение двух соседних элементов есть величина постоянная
=10 hd .
10 100 1000 10000
1.0000 2.0000 3.0000 4.0000
zeros – матрица, состоящая из нулей; ones – матрица, состоящая из единиц;
rand – матрица, состоящая из случ. чисел с равномерным распределением;
randn – матрица, состоящая из случ. Чисел с нормальным распределением.
zeros(n) – формирует квадратную матрицу n´n, состоящую из нулей;
zeros(m, n) – формирует матрицу m´n, состоящую из нулей;
(zeros(1, n) – вектор-строка; zeros(m, 1) – вектор-столбец)
zeros(size(A)) – формирует матрицу, состоящую из нулей, той же размерности, что и матрица A.
Формат обращения к функциям ones, rand и randn аналогичный.
Разницу между функциями rand и randn можно показать графически:
» xr=rand(1,100); xrs=sort(xr); bar(xrs)
» yr=randn(1,100); yrs=sort(yr); bar(yrs)
eye(n) – формирует единичную диагональную матрицу n´n.
diag(B) (B – двухмерная матрица) – выделяет главную диагональ матрицы B и помещает ее в вектор-столбец;
diag(x) (x – вектор) – формирует диагональную матрицу, используя вектор x в качестве главной диагонали.
» A=[1 2 3; 4 5 6; 7 8 9];
Манипуляции с матрицами
tril (A) – формирует треугольную матрицу как нижнюю часть от матрицы A;
triu(A) – формирует треугольную матрицу как верхнюю часть от матрицы А.
» A=[1 2 3; 4 5 6; 7 8 9];
lu(A) – разложение Холецкого – заменяет квадратную матрицу A скалярным произведением двух треугольных матриц L и U методом Гаусса:
» A=[1 2 3; 4 5 6; 7 8 9];
0.5714 0.5000 1.0000
7.0000 8.0000 9.0000
inv(A) – возвращает матрицу A -1 , обратную заданной квадратной матрице A;
det(A) – возвращает определитель квадратной матрицы A.
fliplr(A) – поворот матрицы A на 180° в горизонтальном направлении;
flipud(A) – поворот матрицы A на 180° в вертикальном направлении;
rot90(A) – поворот матрицы A на 90° против часовой стрелки;
rot90(A, k) – поворот матрицы A на k*90° против часовой стрелки (k – целое число).
Манипуляции с векторами
cross(x, y) – векторное произведение векторов x и y в трехмерном пространстве;
cross(A, B, dim) – векторное произведение многомерных массивов A и B по размерности dim;
dot(x, y) – скалярное произведение векторов x и y;
dot(A, B, dim) – скал. произведение многомерных массивов A и B по размерности dim.
Длины векторов x и y, а также длина матриц A и B по размерности dim должны быть равны 3.
Базовые операции анализа
Пусть a,b,c – числа, х,у,z – векторы, А,В,C – матрицы.
c=max(a, b) – возвращает максимальное из двух чисел a и b (при комплексных аргументах по умолчанию сравниваются модули):
z=max(x, y) – вектор той же размерности, что x и y, составленный из максимальных элементов векторов;
C=max(A, B) – матрица той же размерности, что и , составленная из максимальных элементов матриц.
xmax=max(x) – максимальный элемент вектора x;
[xmax, imax]=max(x) – дополнительно записывает адрес максимального элемента в числовую переменную imax (если максимальных элементов несколько, возвращается адрес первого из них);
amax=max(A) – возвращает вектор-строку amax из максимальных элементов столбцов матрицы А;
[amax, imax]=max(A) – дополнительно формируется вектор-строка imax, составленный из номеров строк, в которых расположены максимальные элементы столбцов.
» a=1; b=2; x=[1 3 2]; y=[2 1 3]; A=[1 2 3; 4 5 6]; B=[3 2 1; 6 5 4];