>> X*Y' % Скалярное произведение векторов - сумма произведений элементов с одинаковыми номерами (X 1 *Y 1 +X 2 *Y 2 +…)
ans =
32
Для вычисления скалярного произведение векторов X и Y можно воспользоваться функцией sum.
>> sum(X.*Y)
ans =
32
При умножении вектора-столбца на вектор-строку результат – матрица
>> X'*Y
ans =
4 5 6
8 10 12
12 15 18
Умножение вектора-строки на вектор-строку приводит к ошибке
>> X*Y
??? Error using ==> *
Inner matrix dimensions must agree.
Для векторов из 3-х элементов можно вычислить векторное произведение.
>> cross(X,Y)
ans =
-3 6 -3
Поэлементные операции
Все поэлементные операции выполняются только над векторами одинакового размера.
Выполнение операции Х^2 невозможно, т.к. Х^2=Х*Х, а умножать можно только строку на столбец или столбец на строку.
Возведение в степень возможно только поэлементное Х.^2
>> X.^2
ans =
1 4 9
Результатом поэлементного умножения векторов является вектор из произведения соответствующих элементов исходных векторов.
>> A=[1 2 3];
>> B=[5 6 7];
>> A.*B
ans =
5 12 21
|
|
При попытке использовать обычное умножение – ошибка.
>> A*B
??? Error using ==> mtimes
Inner matrix dimensions must agree.
При умножении вектора на число:
>> A.*2
ans =
2 4 6
Деление (./)
>> A=[10 20 30];
>> B=[5 4 6];
>> A./B
ans =
2 5 5
Обратное деление (второго вектора на первый)
>> A=[10 20 30];
>> B=[5 4 6];
>> A.\B
ans =
0.5000 0.2000 0.2000
Возведение в степень
Возведем каждый элемент вектора в квадрат
>> B=[5 4 6];
>> B.^2
ans =
25 16 36
В данном случае каждый элемент исходного вектора возводится в квадрат. Выполнение команды B ^ 2 (без точки перед возведением в степень) невозможно, так как это противоречит правилам матричной алгебры. На экране будет:
??? Error using ==> mpower
Inputs must be a scalar and a square matrix.
Сложение и вычитание
Эти операции не требуют точки перед знаком операции.
>> B=[5 4 6];
>> B+2
ans =
7 6 8
>> B=[5 4 6];
>> A=[1 2 3];
>> B-A
ans =
4 2 3
Пример. Получить таблицу значений функции 1-sin(x)^2 для x изменяющегося от -1 до 1 с шагом 0.5.
Для этого необходимо задать два вектора: вектор изменения значений аргумента (создается вектор с нижней границей -1, шагом изменения значения 0.5 и верхней границей изменения 1) и вектор значений функции.
>>A=-1:0.5:1
>>B=1-sin(A).^2
A =
-1.0000 -0.5000 0 0.5000 1.0000
B =
0.2919 0.7702 1.0000 0.7702 0.2919
Для красивого вывода в виде таблицы:
disp(' A B')
for i=1:length(A)
disp(sprintf('%5.2f %.4f',A(i),B(i)))
end
Получим
A B
-1.00 0.2919
-0.50 0.7702
0.00 1.0000
0.50 0.7702
1.00 0.2919
Далее будет рассмотрен вариант построения таблицы с использованием операций с векторами и матрицами (без циклов).
Особые матрицы
B ML можно не только задавать матрицы своими значениями или формировать их по формулам, но можно с помощью специальных функций получать особые матрицы:
|
|
Матрица случайных чисел:
rand(n, m) – формирует матрицу из n строк и m столбцов, заполненную случайными равномерно распределенными числами в интервале от 0 до 1.
rand(n) – формирует квадратную матрицу случайных чисел в диапазоне от 0 до 1. Существует еще функция randn (n), которая формирует случайные числа, распределенные по нормальному закону.
>>A=rand(3)
A =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
B=randn(4)
B =
-0.1241 0.6715 0.4889 0.2939
1.4897 -1.2075 1.0347 -0.7873
1.4090 0.7172 0.7269 0.8884
1.4172 1.6302 -0.3034 -1.1471
Формирование треугольной матрицы
>> tril(B) % формирует нижний треугольник
ans =
-0.1241 0 0 0
1.4897 -1.2075 0 0
1.4090 0.7172 0.7269 0
1.4172 1.6302 -0.3034 -1.1471
>> triu(B) % формирует верхний треугольник
ans =
-0.1241 0.6715 0.4889 0.2939
0 -1.2075 1.0347 -0.7873
0 0 0.7269 0.8884
0 0 0 -1.1471
ans =
Можно задавать размер матрицы, используя вектор из двух элементов, равных числу строк и столбцов. Например,
>> B=rand([3 4]) % То же самое, что 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
>> G=randn(3)
G =
0.5377 0.8622 -0.4336
1.8339 0.3188 0.3426
-2.2588 -1.3077 3.5784
Если надо сгенерировать матрицу такого же размера, как и существующая матрица, то необходимо выполнить команду
>> 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
Для увеличения быстродействия работы программы бывает полезно заранеезадать размер матрицы, для этого создать матрицу с нулевыми элементами – zeros(n,m), а затем заполнять ее значениями.
Матрица из 1 – ones(n,m):
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1