Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_4_задание векторов и матриц.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
158 Кб
Скачать
☆

Операции над векторами

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

Векторное исчисление предусматривает следующие операции над векторами: сложение и вычитание векторов одинакового размера, транспонирование векторов, умножение и деление вектора на число, вектора на вектор (одинакового размера, если один из них вектор–столбец, другой – вектор–строка или наоборот), скалярное и векторное произведение векторов. (векторное произведение выполняется для векторов длиной 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

Далее будет рассмотрен вариант построения таблицы с использованием операций с векторами и матрицами (без циклов).