Операции над векторами
Поскольку вектор в Матлабе рассматривается как матрица из одной строки или одного столбца, то над векторами возможны те же операции, что и над матрицами, и для их выполнения также необходимо согласование размеров векторов.
Векторное исчисление предусматривает следующие операции над векторами: сложение и вычитание векторов одинакового размера, транспонирование векторов, умножение и деление вектора на число, вектора на вектор (одинакового размера, если один из них вектор–столбец, другой – вектор–строка или наоборот), скалярное и векторное произведение векторов. (векторное произведение выполняется для векторов длиной 3)
Операция + и - определена только для сложения/ вычитания одинаковых векторов (можно суммировать или вычитать вектор - строки или вектор – столбцы одинаковой длины).
Зададим 2 вектора:
>> X=[1 2 3]; %Исходные данные
>> Y=[4 5 6];
>> X+Y
ans =
5 7 9
Транспонирование
>>X'
ans =
1
2
3
Умножение вектора на число осуществляется обычной операцией *
>> b=5;
>> X*b
ans =
5 10 15
>> b*X
ans =
5 10 15
Деление вектора на число производится операцией обычного деления (/). Деление числа на вектор невозможно.
>> X/b
ans =
0.2000 0.4000 0.6000
При делении числа на вектор- ошибка
>> b/X
??? Error using ==> mldivide
Matrix dimensions must agree.
Произведение 2-х векторов в математике можно вычислить только если они имеют одинаковую длину. Если один вектор-строка, а другой вектор-столбец, то результат – число.
Скалярное произведение
>> X*Y' % Скалярное произведение векторов - сумма произведений элементов с одинаковыми номерами (X1*Y1+X2*Y2+…)
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
Далее будет рассмотрен вариант построения таблицы с использованием операций с векторами и матрицами (без циклов).
