Скалярное произведение

>> 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

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: