Вычисления в ML
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Вычисления в ML
Команды вводятся в окне Command Window в командной строке после приглашения системы >>. Для выполнения введенной команды надо нажать клавишу Enter. Для просмотра и выбора предыдущих команд используются клавиши управления и .
Результат выполнения каждой команды сразу отображается на экране. Если в конце строки (после команды), стоит точка с запятой, то результат не будет выведен на экран.
Простейший способ работы в ML - это режим прямых вычислений. Команды выполняются сразу после их ввода, а результат выводится сразу после выполнения команды.
Например, вводим команду:
>> sin(0.5)
Нажимаем Enter
Получаем ответ:
ans =
0.4794
Вводим команду:
>> 3^2-(5+4)/2+6*3
Нажимаем Enter и получаем ответ:
ans =
22.5000
ML вычисляет выражение, помещает его в специальную переменную ans и выводит полученное значение в отдельной строке.
Элементы данных в ML
Основной элемент данных в ML— матрица. Числа и вектора рассматриваются как вырожденные матрицы. Например, число - это матрица размером 1х1. Вектора это матрицы с одним столбцом или с одной строкой.
Числа в ML могут быть целыми, вещественными, комплексными. Целые числа вводятся в обычной форме. Вещественные числа могут записываться в естественной форме с фиксированной точкой (2.5) и в экспоненциальной форме (3.4е-3).
Переменные в ML
Любая переменная до использования в формулах должна быть определена. Для этого надо присвоить ей значение. Типы переменных заранее не объявляются. Тип определяется значением, которое присваивается переменной. В качестве оператора присваивания используется знак равенства(=).
>> n=5
n =
5
>> k=0.5
k =
0.5000
Правила составления идентификаторов такие же, как и в ЯВУ (начинается с буквы и может содержать любые комбинации цифр, букв, символа подчеркивания, идентифицируются первые 63 символа, нельзя использовать специальные символы и пробелы, имя переменной должно быть уникальным и не должно совпадать с именами функций). Строчные и прописные буквы различаются (Abc и abc - разные имена).
Существуют встроенные системные переменные, которые можно использовать, не задавая значения. Они при необходимости могут быть переопределены, т.е. им можно присвоить другие значения, но тогда значения, заданные по умолчанию, будут утеряны.
• pi – число (=3.141592653589793);
• eps - погрешность операций над числами с плавающей точкой; очень маленькое значение, равное 2.2*10-16. Её используют, когда надо исключить деление на 0 (например, x/(y+eps));
• ans - результат последней команды, если в ней нет операции присваивания. Например, если набрали команду 41/75 и не определили, какой переменой присвоить результат, на экране отобразится
ans = 0.5467.
• nan — для обозначения неопределённости результата;
• i, j — мнимая единица(), используемая для задания мнимой части комплексного числа. Задать комплексные числа можно так:
z = 3+4i
Все эти переменные можно использовать в математических выражениях.
В ML все переменные занимают определенное место в памяти, называемой рабочим пространством системы - Workspace.
ML запоминает значения всех переменных, используемых в текущей сессии. Для того чтобы узнать, какие переменные были задействованы, используется команда who. Чтобы получить более подробную информацию о переменных: размеры, размерность можно использовать команду whos. Эту информацию можно увидеть и в окне Workspace.
Для удаления из памяти всех переменных используется команда clear.
Выборочное удаление переменных можно сделать, применив команду Clear следующим образом: Clear a b.
Способы задания векторов.
Вектор - это одномерный массив данных. Вектор в ML - это матрица из одного столбца или одной строки. Соответственно вектор может быть вектором – столбцом или вектором – строкой.
Для задания вектора можно воспользоваться одним из приведенных ниже способов.
• Можно задать значения вектора поэлементно:
<имя пер.>=[<значение1> <значение2> ….<значениеN>]
Например,
>>P=[3 5 7 12]
Значения элементов записываются через пробел или через запятую.
В результате выполнения этой команды создается вектор – строка.
P =
3 5 7 12
Если при задании вектора значения его элементов разделить точкой с запятой, то получим вектор-столбец.
<=<нач. значение>:<шаг>:<конечное значение>
Например,
>>X=0 : 0.5: pi
В результате будет сформирован вектор со значениями:
X =
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000
Шаг должен быть больше нуля. Если он равен единице, то его можно не указывать.
>>Х = 1 : 10
X =
1 2 3 4 5 6 7 8 9 10
Чтобы изменить форму вектора, надо записать Х’ – тогда вектор отобразится в виде столбца. Такая операция называется транспонированием.
Например,
>> X=1:1:5
X = 1 2 3 4 5
>> X'
ans =
1
2
3
4
5
• Также для формирования арифметической прогрессии можно использовать функцию linspace
linspace (<нач. значение>,<кон. значение>,<кол. значений>)
Например,
>>B=linspace(0,pi,5)
B =
0 0.7854 1.5708 2.3562 3.1416
• Вектор можно задать также путём объединения нескольких векторов.
Например,
>>A=[1 2 3]; B=[4 5 6]; C=[7 8 9]; D=[A B C]
D =
1 2 3 4 5 6 7 8 9
Для определения длины вектора предназначена функция length.
>> l=length(D)
l =
9
Для доступа к элементу вектора необходимо указать его имя и в круглых скобках номер элемента. Например, D(3). Для обращения к последнему элементу вектора можно записать: D(length(D)) или D(end).
Задание матриц
При задании матриц данные строк записываются через пробел или через запятую. Элементы разных строк разделяются знаком точка с запятой (;) или записываются с новой строки. В ML матрица хранится в порядке следования по столбцам.
Зададим матрицу:
>>A=[1 2 3; 4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
или
>> A=[1 2 3
4 5 6
7 8 9]
A =
1 2 3
4 5 6
7 8 9
Обращение к элементу матрицы: <имя> (<индексы>), например, А(2,3).
Операции в ML
В ML можно не только выполнять обычные арифметические операции над числами и вычислять значения функций, но и производить операции над векторами и матрицами.
Арифметические операции (АО)
К арифметическим операциям в ML относятся:
cложение (+), вычитание (-), умножение (*), деление(/), обратное деление (\), возведение в степень (^), транспонирование (‘).
Все арифметические операции являются “матричными” и осуществляются по правилам линейной алгебры.
При необходимости поэлементного выполнения операций над матрицами и векторами перед знаками операций ^, *, /, \ следует ставить точку.
>> X=[1 2 3 4];
>> X.^2
ans =
1 4 9 16
В данном случае каждый элемент исходного вектора возводится в квадрат. Выполнение команды X ^ 2 невозможно, т. к. это противоречит правилам матричной алгебры.
Транспонирование тоже бывает с точкой – тогда для комплексных чисел оно выполняется без комплексного сопряжения.
При выполнении арифметических операций с матрицами необходимо учитывать их размерность.
Каждой арифметической операции в ML соответствует определенная функция. Например, plus(x,y) –сложение массивов, times(x,y) – поэлементное умножение массивов, mtimes(x,y) – матричное умножение и т.д.
>> 2+3
ans =
5
>> plus(2,3)
ans =
5
>> X=[1 2 3 4];
>> Y=[5 6 7 8];
>> times(X,Y)
ans =
5 12 21 32
>> X.*Y
ans =
5 12 21 32
Выполнение арифметических операций с матрицами будет подробно рассмотрено далее.
Операции отношения
К операциям отношения в ML относятся:
равно(= =), не равно(~ =), меньше (<), меньше или равно(<=), больше (>), больше или равно (>=).
Операции отношения используются для поэлементного сравнения 2 операндов (чисел, матриц, векторов одинакового размера). Результатом операции отношения может быть соответственно число, матрица или вектор, состоящие из элементов, обозначающих «истина» или «ложь». В ML это 1 и 0 соответственно.
>>A=[1 0 3; -2 5 -6];
>> B=[8 -9 1; 7 2 2];
>> A>B
ans =
0 1 1
0 1 0
В результате получили матрицу, каждый элемент которой имеет значение «истина» или «ложь».
>> x=1; y=2; z=3;
>> ((x+y)==z)+(y, <=, >=, ==, =);
7. логическая операция И(&);
8. логическая операция ИЛИ(|);
Элементарные функции
В ML существует большое количество элементарных математических функций для выполнения действий с числами: тригонометрические, степенные, логарифмические и экспоненциальные и функции округления. Каждая функция обладает именем и списком аргументов, которые задаются в круглых скобках и, если их несколько, перечисляются через запятую.
Тригонометрические функции
Существуют встроенные тригонометрические и гиперболические функции sin(x), cos(x), tan(x), cot(x), asin(x), acos(x), atan(x), acot(x), sinh(x) и т. д.. Аргументы этих функций могут задаваться в радианах и в градусах (в следующих версиях, начиная с версии 7.0). У функций в градусной мере после названия функции добавляется буква d. sin(x)- аргумент в радианах, а sind(x) – аргумент в градусах
Некоторые часто используемые математические функции:
• exp(x) –экспонента числа x;
• log(x) – натуральный логарифм;
• log10(x) – десятичный логарифм;
• sqrt(x) – квадратный корень;
• abs(x) –абсолютное значение x;
• real(z) – вещественная часть комплексного числа;
• imag(z) - мнимой часть комплексного числа;
• mod(x, y) - остаток от целочисленного деления;
• round(x) – округление до ближайшего целого.
Для работы с датами можно воспользоваться функциями:
• calendar – выводит календарь на текущий месяц;
• date –выводит текущую дату.
Все элементарные функции, приведенные выше, можно применять к векторам и матрицам. Если введен вектор X, то задав функцию Y=sin(X), получим вектор, элементами которого будут значения синусов элементов исходного вектора.
>> X=[1 2 3 4];
>> Y=sin(X)
Y =
0.8415 0.9093 0.1411 -0.7568
Информацию о любой функции ML можно получить, выполнив команду: help <имя функции>.
Особые матрицы
B ML можно не только задавать матрицы своими значениями или формировать их по формулам, но можно с помощью специальных функций получать особые матрицы:
• матрица случайных чисел
rand(n, m) - формирует матрицу из n строк и m столбцов, заполненную случайными равномерно распределенными числами в интервале от 0 до 1.
rand(n) — формирует квадратную матрицу случайных чисел.
>>A=rand(3)
A =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
Можно задавать размер матрицы, используя вектор из двух элементов, равных числу строк и столбцов. Например,
>> B=rand([3 4])
B =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154
0.6068 0.7621 0.8214 0.7919
Если надо сгенерировать матрицу такого же размера, как и существующая матрица, то необходимо выполнить команду:
>> rand(size(A))
ans =
0.4103 0.3529 0.1389
0.8936 0.8132 0.2028
0.0579 0.0099 0.1987
size(A) — функция, возвращающая размер матрицы А в виде вектора.
• магический квадрат (матрица, у которой суммы элементов в строках, столбцах и диагоналях одинаковы) - magic(n,m)
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
• единичная матрица - eye(n,m)
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
• матрица из 0 – zeros(n,m)
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
• матрица из 1 – ones(n,m)
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
• диагональная матрица
Чтобы получить диагональную матрицу необходимо задать вектор, количество элементов которого определит размерность матрицы. Значения вектора расположатся на главной диагонали.
>> V=[1 2 3 4 5];
>> diag(V)
ans =
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
• выделение диагонали из матрицы
>> diag(A)
ans =
0.9501
0.8913
0.8214
Результат – вектор столбец, состоящий из элементов, расположенных на главной диагонали. Иными словами при использовании этой функции, если параметром является матрица, то результат – вектор, а если параметром является вектор, результат – матрица.
Для увеличения быстродействия работы программы, бывает полезно заранее задать размерность матрицы, для этого создать матрицу с нулевыми элементами - zeros(n,m), а затем заполнять ее значениями.
Операции с векторами и матрицами.
В ML операции с векторами и матрицами подразделяются на два типа: поэлементные преобразования и матричные (векторные) операции, которые соответствуют правилам линейной алгебры.
Выполнение операций с векторами
В ML можно выполнять поэлементные преобразования векторов с помощью арифметических операций. Следует помнить, что операции поэлементного преобразования возможны только над векторами одного размера и структуры. Сложение и вычитание векторов производится всегда поэлементно. Поэлементные операции обозначаются добавлением точки перед знаком операции. Например,
>>A=[2 5 7];
>>B=[1 2 3];
>>C=A.*B
C=
2 10 21
Каждый элемент вектора А умножается на один, соответствующий ему элемент вектора В, и таким образам получается каждый элемент вектора С.
Операторы поэлементного деления и возведения в степень записываются соответственно, как (./), (.^).
Векторное исчисление предусматривает следующие операции над векторами: сложение и вычитание векторов одного размера и типа, транспонирование векторов, умножение вектора на вектор (при условии, что они одного размера и один из них является вектор - столбцом, а другой – вектор – строкой или наоборот).
В соответствии с правилами векторного исчисления, если первый вектор – строка, а второй – столбец, то результат умножения – число.
>>A=[1 2 3];
>>B=[1;2;3];
>>A*B
ans=
44
Если первый вектор – столбец, а второй – строка, то результат умножения – квадратная матрица.
>>B*A
ans=
2 6 10
4 12 20
6 18 30
Для обозначения операции транспонирования векторов применяется апостроф.
>>A=[1 2 3];
>>B=A’
B=
1
2
3
При транспонировании вектор – строка преобразуется в столбец и наоборот.
Выполнение операций над матрицами
Операции с матрицами, как и с векторами, могут выполняться поэлементно, а могут – по правилам матричной алгебры. Операции, выполняемые в ML с матрицами:
• Транспонирование матрицы. Операция обозначается символом апостроф ( ' ).
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> B=A'
B =
1 4 7
2 5 8
3 6 9
• Сложение и вычитание матриц
Размер матриц должен быть одинаковым. При выполнении этих операций производится поэлементное сложение и вычитание.
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> B=[1 4 7;2 5 8;3 6 0]
B =
1 4 7
2 5 8
3 6 0
>> C=A+B
C =
2 6 10
6 10 14
10 14 9
>> D=A-B
D =
0 -2 -4
2 0 -2
4 2 9
• Умножение матриц.
При умножении A*B должно выполняться условие: число столбцов матрицы A равно числу строк матрицы B.
A(n, m) * B(m, k) → C(n, k)
Элементы результирующей матрицы вычисляются по правилу: каждый элемент строки матрицы A умножается на соответствующий элемент столбца матрицы B, затем произведения складываются, и получается один элемент матрицы С.
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> B=[1 4 7;2 5 8;3 6 0]
B =
1 4 7
2 5 8
3 6 0
>> C=A*B
C =
14 32 23
32 77 68
50 122 113
Матрицу можно умножать на число. В результате получим матрицу, в которой каждый элемент получается умножением элемента исходной матрицы на это число.
>> A=[1 2 3;4 5 6;7 8 9];
>>C = A * 2
C =
2 4 6
8 10 12
14 16 18
Если надо, чтобы действия производились поэлементно, то перед знаком операции ставится точка.
Создадим две матрицы: одну - единичную, вторую А=[1 2 3; 4 5 6; 7 8 9].
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> Е=eye(3)
Е =
1 0 0
0 1 0
0 0 1
>> B=A*Е
B =
1 2 3
4 5 6
7 8 9
Матрица В получена в результате матричного умножения матриц А и Е.
>> C=A .*Е
C =
1 0 0
0 5 0
0 0 9
Матрица С получена в результате поэлементного умножения матриц А и Е.
Пусть заданы 2 матрицы C и D одинакового размера.
>> C=[1 2 3; 4 5 6; 7 8 9];
>> D=[2 3 4; 1 2 3; 4 5 6];
>> Y=C.*D
Y =
2 6 12
4 10 18
28 40 54
• Деление(правое и левое)
В ML имеется две разновидности операции деления матриц – правое деление (/) и левое деление (\)
В случае с числами 2/3 в ML трактуется как результат деления 2 на 3.
2 \ 3 соответствует результату деления 3 на 2.
С векторами и матрицами происходит иначе.
Пусть A — матрица, а Х — вектор. А * Х = В и Х * А = В — разные уравнения.
Для решения уравнения Х * А = В- используется обычное деление
Х = B / A = В *А-1
Для решения уравнения А * Х = В - используется обратное деление
Х = А \ В = А-1 * В
Операция обратного деления используется для решения системы линейных уравнений. Например,
2x1 + 3x2 = 11
3x1 – 4x2 = 8
A — матрица коэффициентов левой части.
B — вектор правых частей.
Решается уравнение вида A*X=B
>> A=[2 3;3 -4];
>> B=[11 8 ];
>> Х=A\B'
Х =
4.0000
1.0000
Для проверки можно выполнить умножение A*X
>> A*X
ans =
11.0000
8.0000
В результате получили вектор правых частей, что доказывает правильность найденного решения.
Специальные функции для матриц
В ML существует множество специальных функций линейной алгебры. Приведем некоторые из них:
det(A) – вычисляет определитель (детерминант) матрицы.
inv(A) – вычисляет инверсную (обратную) матрицу.
Обратной для квадратной невырожденной (когда детерминант не равен нулю) матрицы А называется матрица А-1, которая при умножении на матрицу А справа и слева даёт единичную матрицу. B называется обратной А, если выполняется АВ=ВА=Е (единичная матрица).
eig(A) – определение собственных чисел (характеристических чисел);
norm(A, 1) – норма матрицы – наибольшая сумма модулей элементов столбцов;
norm(A, inf) – наибольшая сумма модулей элементов строки;
trace(A) – след матрицы (сумма элементов главной диагонали).
Действия с элементами матрицы
Обращение к элементу осуществляется заданием имени, за которым в круглых скобках через запятую указываются индексы - номера строки и столбца.
Если указать A(2,1), то выберется элемент второй строки первого столбца.
Можно выделить часть матрицы. Это делается с помощью символа двоеточие (:).
Пусть задана матрица:
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
Если двоеточие стоит вместо номера строки или столбца, то соответственно выделяются столбец или строка.
Получим 3-ий столбец матрицы А
>> B=A(:,3)
B =
3
6
9
Получим 3-ю строку матрицы А
>> X=A(3,:)
X =
7 8 9
Получим вектор-столбец из всех элементов матрицы
>> C=A(:)
C =
1
4
7
2
5
8
3
6
9
Индексом в ML может быть не только число, но и вектор. Этот вектор – индекс удобно задавать с помощью двоеточия.
Для доступа к элементам последней строки или столбца можно использовать в качестве индекса end.
Получим матрицу С, состоящую из элементов матрицы А, начиная со второго столбца:
>> C=A(:, 2:end)
C =
2 3
5 6
8 9
Поменяем местами первую и последнюю строки матрицы А
>> D=A(1,:);
>> A(1,:)=A(end,:);
>> A(end,:)=D;
>> A
A =
7 8 9
4 5 6
1 2 3
Получим вектор С, состоящий из элементов первых трех элементов второго столбца матрицы А.
Пусть задана матрица:
>> A=[1 2 3; 4 5 6; 7 8 9;1 0 1]
A =
1 2 3
4 5 6
7 8 9
1 0 1
Запишем:
>> C=A(1:3, 2)
C=
2
5
8
Первый индекс представляет собой вектор из 3 элементов [1:3], результат – вектор столбец С.
Выделим из матрицы А квадратную матрицу С размером 2х2:
>> C=A(3:4,2:3)
Получим:
C =
8 9
0 1
Выделим первые две строки матрицы А
>>С=A(1:2,:)
С =
1 2 3
4 5 6
Можно заменить один фрагмент матрицы другим.
Пусть имеем матрицу А = [1 2 3;4 5 6; 7 8 9], и зададим матрицу С
>> C=[20 30;10 15]
C =
20 30
10 15
Заменим правый верхний угол матрицы А матрицей С. Для этого запишем:
>> A(1:2,1:2)=C
Измененная матрица А
A =
20 30 3
10 15 6
7 8 9
Поменяем местами 1-ую и 3-ю строки матрицы А
Используем для этого возможность задания индекса вектором.
>>A=[1 2 3;4 5 6;7 8 9];
Для этого запишем:
>> A([1 3],:)=A([3 1],:)
Полученная матрица
A =
7 8 9
4 5 6
1 2 3
Обращение А([1 3], :) означает первую и третью строки матрицы; А([3 1], :) – аналогично третью и первую строки.
Индексация двоеточием упрощает формирование матриц по определенному закону. Пусть необходимо сформировать матрицу размером 5х5, в которой элементы первой и последней строк и первого и последнего столбцов равны 1. Остальные элементы матрицы равны 0.
Сначала создадим матрицу из нулей размером 5х5. Затем заполним первую и последнюю строки и первый и последний столбцы единицами.
>> Z(1:5,1:5)=0;
>>Z(1, :)=1;
>>Z(end, :)=1;
>>Z(:, 1);)=1;
>>Z(:, end)=1
В результате получим матрицу Z:
Z =
1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1
или лучше:
>> Z([1 end], :)=1;
>> Z(: ,[1 end])=1
Можно выполнить объединение матриц:
◦ по горизонтали
>> X=[1 2;3 4];
>> Y=[5 6;7 8];
>> Z=[X,Y]
Z =
1 2 5 6
3 4 7 8
◦ по вертикали
>> Z=[X;Y]
Z =
1 2
3 4
5 6
7 8
Размеры матриц должны быть согласованы.
Добавим строку к матрице А
>>A=[1 2 3;4 5 6;7 8 9];
Зададим вектор В
>> B=[5 5 5];
Запишем:
>> A=[A;B]
Получим новую матрицу размером 4х3
A =
1 2 3
4 5 6
7 8 9
5 5 5
Удалим из матрицы 2 и 3 строки
>> A(2:3, :)=[]
A =
1 2 3
5 5 5
Удалим из матрицы 2 столбец
>> A(:, 2)=[]
A =
1 3
5 5
Можно удалить элемент из матрицы.
A(3)=[] – удаление 3-го элемента матрицы.
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> A(3)=[]
Результат – вектор А, состоящий из элементов матрицы в порядке следования по столбцам без элемента А(3,1)
A =
1 4 2 5 8 3 6 9
Сделаем матрицу нулевой размерности
>>А=[];
Удаление матрицы из памяти
>>clear A
Функции, используемые для работы с векторами и матрицами
Ранее мы познакомились с функциями для создания векторов и матриц. В пакете Matlab имеются функции, предоставляющие возможность построчной или постолбцовой обработки элементов матрицы. Это функции позволяющие вычислить сумму либо произведение элементов, отсортировать данные, найти максимальное и минимальные значения элементов вектора или матрицы.
Пусть имеем вектор X
>> X=[9 2 3 4 15 6 1 7 ];
Рассмотрим некоторые функции:
• Сумма элементов вектора
>> sum(X)
ans =
47
• Произведение элементов вектора
>> prod(X)
ans =
136080
• Максимальное значение вектора
>> max(X)
ans =
15
• Максимальное значение вектора и его номер
>> [m,k]=max(X)
m =
15
k =
5
• Минимальное значение вектора
>> min(X)
ans =
1
• Минимальное значение вектора и его номер
>> [m,k]=min(X)
m =
1
k =
7
• Среднее арифметическое элементов вектора
>> mean(X)
ans =
5.8750
• Сортировка элементов вектора по возрастанию
>> sort(X)
ans =
1 2 3 4 6 7 9 15
Для сортировки элементов вектора по убыванию можно воспользоваться той же функцией:
>> -sort(-X)
ans =
15 9 7 6 4 3 2 1
• Разворот вектора на 900
>>rot90(X)
Эта функция разворачивает вектор против часовой стрелки. В результате получаем вектор-столбец.
ans =
15
9
7
6
4
3
2
1
Все эти функции можно применить к вектору, независимо от того столбец это или строка.
Для матриц используются те же функции.
Пусть имеем матрицу А
>> A=[1 2 3;4 5 6;7 8 9];
Рассмотрим некоторые функции:
• Сумма элементов в столбцах матрицы
>> sum(A)
ans =
12 15 18
или можно записать:
>> sum(A,1)
ans =
12 15 18
Для получения суммы элементов в строках матрицы введем команду:
>> sum(A,2)
ans =
6
15
24
Для получения суммы всех элементов матрицы введем команду:
>>sum(sum(A))
ans =
45
• Произведение элементов матрицы по столбцам
>> prod(A)
ans =
28 80 162
• Произведение элементов матрицы по строкам
>> prod(A')
ans =
6 120 504
Произведение чисел от 1 до 4
>> prod(1:4)
ans =
24
В функциях для вычисления суммы и произведения (sum и prod) элементов матрицы результатом будет вектор- строка, число элементов которой равно числу столбцов матрицы.
Есть функции, которые выдают наибольшее и наименьшее значения в строках или столбцах матрицы. Результат – вектор-строка.
• Максимальное значение в каждом столбце.
>> max(A)
ans =
7 8 9
• Максимальное значение в каждой строке.
>> max(A')
ans =
3 6 9
• Аналогично вычисляется наименьшее значение.
>> min(A)
ans =
1 2 3
>> min(A')
ans =
1 4 7
Можно не только найти минимальное и максимальное значения, но и позиции этих элементов
>> [m,k]=min(A)
Результат - два вектора, один из значений минимального или максимального значений в столбцах матрицы, а второй из позиций этих элементов в соответствующем столбце.
m =
1 2 3
k =
1 1 1
>> [m,k]=max(A)
m =
7 8 9
k =
3 3 3
• Среднее арифметическое в столбцах.
Результат – вектор-строка из средних арифметических в каждом столбце
>> mean(A)
ans =
4 5 6
>> mean(A')
ans =
2 5 8
• Сортировка
Сортировка элементов каждого столбца по возрастанию
>>sort(A)
Сортировка элементов каждой строки по возрастанию
>>sort(A,2)
• Разворот матрицы на 900
Эта функция разворачивает матрицу на 900 против часовой стрелки.
>> rot90(A)
ans =
3 6 9
2 5 8
1 4 7
• ’’Зеркальное’’ отображение матрицы относительно вертикальной оси
>> fliplr(A)
ans =
3 2 1
6 5 4
9 8 7
• ’’Зеркальное’’ отображение матрицы относительно горизонтальной оси
>> flipud(A)
ans =
7 8 9
4 5 6
1 2 3
Действия с полиномами (многочленами)
В ML предусмотрены функции для работы с полиномами. С помощью этих функций можно вычислить значение полинома, найти корни полинома, выполнить операции умножения и деления полиномов и т.д.
Полином (многочлен) – это выражение вида:
P(x)=a1xn+a2xn-1+…..+anx+an+1
В Matlab полином задаётся и хранится в виде вектора, элементами которого являются коэффициенты полинома.
P=[a1 a2 …an an+1]
Число элементов вектора должно быть на единицу больше степени полинома. Если в полиноме отсутствует слагаемое, соответствующее какой-либо степени х, то в этом случае в векторе в качестве значения коэффициента записывается ноль.
Например, пусть задан полином 2x3+x2-3x+5. Вектор коэффициентов полинома будет:
p=[2 1 -3 5]
• Для вычисления значения полинома при некотором значении аргумента предназначена функция polyval(p,x), где
p – вектор коэффициентов полинома;
х – значение аргумента, при котором надо посчитать значение полинома.
>> P=[2 1 -3 5];
>> Y=polyval(P,1)
Y =
5
В результате будет вычислено значение полинома 2x3+x2-3x+5 при x=1.
В качестве аргумента х может быть указан вектор или матрица. В результате получится вектор или матрица того же размера, что и аргумент.
>> P=[2 1 -3 5];
>> X=1:5;
>>Y=polyval(P,X)
Y =
5 19 59 137 265
Элементы вектора Y – значения полинома, вычисленные для каждого элемента вектора X.
• Вычислить корни полинома можно с помощью функции roots. Число корней определяется степенью полинома.
>> P=[2 1 -3 5];
>> roots(P)
ans =
-1.9388
0.7194 + 0.8786i
0.7194 - 0.8786i
В данном случае найдены три корня, из которых один вещественный и два комплексных.
• Чтобы вычислить производную от полинома следует использовать функцию polyder. Результатом этой функции является вектор, элементы которого представляют собой коэффициенты полинома-производной от исходного полинома.
>> P=[2 1 -3 5];
>> polyder(P)
ans =
6 2 -3
• Для выполнения умножения и деления полиномов предназначены функции conv и deconv.
Z=conv(P1,P2), где
P1,P2 – полиномы, заданные векторами;
Z – результирующий вектор коэффициентов полинома, полученного в результате перемножения полиномов, заданных векторами P1,P2
[R1, R2]=deconv(P1,P2)
Результат работы этой функции – два вектора R1, R2, где R1, R2 – векторы коэффициентов полинома-частного и полинома-остатка, полученного в результате деления полиномов, заданных векторами P1,P2.