Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Красавин Компютерныы практикум в среде МатЛаб 2015

.pdf
Скачиваний:
121
Добавлен:
12.11.2022
Размер:
9.22 Mб
Скачать

Шаг можно не указывать, в этом случае он будет равен единице.

Другим оператором, позволяющим создавать векторы, компоненты которых отстоят друг от друга на определенную величину, является linspace. Он употребляется в том случае, когда известен не шаг между соседними элементами, а число элементов на заданном участке. Например, команда

x = linspace(0,2*pi,100)

приведет к созданию сетки из 100 точек, равноотстоящих друг от друга на отрезке 0,2π .

Для создания специальных матриц в MatLab предусмотрено большое количество встроенных функций. Одними из наиболее часто используемых являются ones для создания матрицы из единиц, zeros для создания матриц из нулей и eye для создания матриц, у которых на главной диагонали – единицы, а остальные элементы равны нулю. Формат этих функций следующий:

A = zeros(m,n)

Здесь m – число строк матрицы; n – число столбцов. Если в аргументах указана только одна переменная m, то создается

квадратная матрица размера

 

. Например, команды

W = ones(3);

 

 

 

E = eye(2,3);

 

 

 

приведут к созданию матриц

1

1

1

 

 

1

1

1

и

1

1

1

 

1

0

0

 

0

1

0 .

 

21

 

 

Матрицы можно также создавать блочным способом, используя уже имеющиеся матрицы. Например, команда

A = [2*ones(2) eye(2); eye(2) [4 4; 3 3]];

создаст следующую матрицу:

2

0

1

0

0

2

0

1

1

0

4

4 .

0

1

3

3

2.2. Определение размеров матриц

Для определения размеров матрицы используется оператор size. Он возвращает вектор размера 1 2, в который записывается число строк и число столбцов исходной матрицы. Использование оператора size иллюстрирует следующий пример.

Пример 2.1.

A = ones(3,4); % создание единичной матрицы размера 3х4

Z = size(A); % размеры матрицы A записываются в вектор Z, при этом

Z(1)=3; Z(2)=4

[r c] = size(A); % здесь функция size вызвана с двумя выходными параметрами, поэтому число столбцов матрицы A будет записано в переменную r, а число строк – в переменную

c:r=3; c=4

ВMatLab и векторы, и даже скаляры представляются матрицами

(вектор является матрицей размера

 

или

 

, где

– число

компонент, а

скаляр

является

матрицей размера

). Для

 

1

 

1

 

оператор

определения

длины

вектора

удобнее

использовать1

1

length, который вычисляет число строк и число столбцов входной матрицы и возвращает только один параметр – наибольшее из этих значений.

22

2.3. Обращение к элементам матрицы

Обращение к отдельному элементу матрицы осуществляется путем указания номеров строки и столбца этого элемента в матрице: z(2,3). Первым аргументом является номер строки, вторым – номер столбца. Такой же оператор можно использовать для присвоения конкретному элементу матрицы нового значения (z(2,3)=50) или выводу его значения на экран

(disp(z(2,3))).

Для обращения к нескольким соседним элементам матрицы используется оператор «двоеточие». Его использование иллюстрируется в примере 2.2.

Пример 2.2.

Z = rand(6); % создание матрицы 6х6,

заполненной случайными

 

числами

 

 

 

 

Z =

 

 

 

 

 

0.2438

0.4152

0.7236

0.6971

0.4762

0.9544

0.0997

0.8191

0.4998

0.5970

0.1135

0.4516

0.5606

0.6758

0.9471

0.9047

0.5157

0.5333

0.0857

0.0464

0.9361

0.0330

0.8682

0.1265

0.2993

0.6715

0.9491

0.8230

0.4606

0.9051

0.2823

0.3165

0.7623

0.3662

0.3915

0.8013

A = Z(2,2:4) % A – вектор, состоящий из элементов матрицы Z во второй строке и столбцах со второго по четвертый

A =

0.8191 0.4998 0.5970

B = Z(1:2,3:5) % B – матрица, состоящая из элементов матрицы Z в сроках с первой по вторую и в столбцах с третьего по пятый

B =

0.7236

0.6971

0.4762

0.4998

0.5970

0.1135

C = Z(:,2) % C – вектор, состоящий из элементов матрицы Z во втором столбце

C =

23

0.4152

0.8191

0.6758

0.0464

0.6715

0.3165

D = Z(2:3,:) % D – матрица, состоящая из элементов матрицы Z в строках со вторую по третью; второй оператор двоеточия в данном случае означает «все столбцы»

D =

0.0997

0.8191

0.4998

0.5970

0.1135

0.4516

0.5606

0.6758

0.9471

0.9047

0.5157

0.5333

E = Z(4:end,:) % E – матрица, состоящая из элементов матрицы Z в строках с четвертую по последнюю; оператор end в данном случае указывает на последний элемент диапазона

E =

0.0857

0.0464

0.9361

0.0330

0.8682

0.1265

0.2993

0.6715

0.9491

0.8230

0.4606

0.9051

0.2823

0.3165

0.7623

0.3662

0.3915

0.8013

Z(:,2:4) = [] % удаление из матрицы Z столбцов со второго по четвертый

Z =

0.2438

0.4762

0.9544

0.0997

0.1135

0.4516

0.5606

0.5157

0.5333

0.0857

0.8682

0.1265

0.2993

0.4606

0.9051

0.2823

0.3915

0.8013

2.4. Поэлементные операции с матрицами

Помимо обычных операций матричной алгебры (сложение, вычитание и умножение матриц), в MatLab предусмотрены поэлементные операции. Поэлементные операции над матрицами предполагают, что матрицы имеют одинаковый размер. Пример 2.3 иллюстрирует использование поэлементных операций.

24

Пример 2.3.

A = 12*ones(2) % задание матрицы A

A =

12

12

12

12

B = [1 2; 3 4] % задание матрицы B

B =

1

2

3

4

C = A./B % матрица A поэлементно делится на матрицу B, т.е. каждый элемент матрицы C есть соответствующий элемент матрицы A, деленный на соответствующий элемент матрицы B

C =

12

6

4

3

D = A.*B % матрица A поэлементно умножается на матрицу B, т.е. каждый элемент матрицы D есть соответствующий элемент матрицы A, умноженный на соответствующий элемент матрицы B

D =

12

24

36

48

E = A*B % обычное перемножение матриц по правилам линейной алгебры

E =

48

72

48

72

F = A^2 % возведение матрицы A в квадрат, т.е. умножение матрицы A на саму себя

F =

288 288

288 288

25

G = A.^2 % поэлементное возведение матрицы A в квадрат; поэлементная операция таким образом заменяет циклы по всем строкам и столбцам

G =

144 144

144144

2.5.Функции для работы с матрицами и векторами

Функция sum суммирует все компоненты вектора, а функция prod перемножает их:

sum([2 4 6]) ans = 12

prod ([2 4 6]) ans = 48

Если применить эти функции к матрице, а не к вектору, то произойдет суммирование или перемножение всех элементов матрицы в каждом столбце. Для того чтобы найти сумму или произведение всех элементов матрицы, следует применить функцию дважды:

M = magic(3)

M =

1

6

8

3

5

7

4

9

2

sum(M)

 

 

ans =

15

15

15

sum(sum(M))

26

ans = 45

Для нахождения минимального или максимального элементов вектора используются, соответственно, функции min и max. Аналогично, если входным элементов для этих функций является матрица, а не вектор, функции выдают результат для каждого столбца. Эти функции могут быть также использованы для определения положения максимального или минимального элемента в векторе или матрице. Для этого к функции нужно обратиться с двумя выходными аргументами:

a = [3 9 5 7

4 1 2]

 

 

 

 

a =

9

5

7

4

1

2

3

[m,b] = max(a)

m =

9 % значение максимального элемента вектора а

b =

2 % позиция максимального элемента в векторе а

Пример 2.4 содержит один из возможных кодов для определения положения максимального элемента в матрице.

Пример 2.4.

v = [2

6; 4 1; 0 3] % задание матрицы

v =

6

 

2

 

4

1

 

0

3

 

[BigCol, RowCol] = max(v)

BigCol

=

% максимальный элемент в каждом столбце

4

6

 

 

27

RowCol =

21 % номер строки, которая содержит соответствующий максимальный элемент

[Big,Col] = max(BigCol)

Big =

6 % максимальный элемент во всей матрице

Col =

2 % номер столбца, содержащего максимальный элемент во всей матрице

Row = RowCol(Col) % определение строки, содержащей максимальный элемент

Row =

1

Элементы вектора или матрицы могут быть отсортированы при помощи функции sort:

a =

9

5

7

4

1

2

 

3

 

[b,c]=sort(a)

 

 

 

 

 

 

b =

2

3

4

 

5

7

9 % отсортированный

1

 

вектор

 

 

 

 

 

 

 

c =

7

1

5

3

4

2 %

положение элементов

6

отсортированного вектора b в исходном неотсортированном векторе a

В случае если входной элемент – матрица, функция sort выполняет сортировку в каждом столбце.

2.6. Фильтрация и логическое индексирование

Часто возникает задача выбора из элементов матрицы или вектора таких элементов, которые удовлетворяют определенному условию. Следующие примеры иллюстрируют возможные решения этой задачи.

28

Пример 2.5.

B = [1 5; 7 9] % задание матрицы

B =

 

5

 

 

 

1

 

 

 

 

7

 

9

создание логической матрицы; единица

означает, что

C = (B>5)

%

 

 

соответствующий элемент матрицы B больше 5

 

C =

 

0

 

 

 

0

 

 

 

 

1

 

1

 

 

 

D = B(B>=5)

% выбор из матрицы B всех элементов,

которые

больше

 

 

или равны 5, и запись их в вектор D

 

 

D =

 

 

 

 

 

7

 

 

 

 

 

5

 

 

 

 

 

9

 

 

 

 

 

B(B>=5)=13

%

присвоение всем элементам матрицы B,

которые

больше

 

 

или равны 5, значения 13

 

 

B =

13

 

 

 

1

 

 

 

13

13

 

 

 

Пример 2.6. Рассмотрим функцию find:

A = [6 3 8 2 1]; % задание вектора

loc = find(A>5) % нахождение позиций всех элементов вектора A, которые больше 5

loc =

1 3 % элементы под номерами 1 и 3 в векторе A больше 5

29

Задания

2.1. Создать матрицу

1

0

0

2

2

2

1

3

5

0

1

0

2

2

2

7

9

11

0

0

1

2

2

2

13

15

17

0

0

0

9

8

7

4

3

3

0

0

0

6

5

4

3

4

3 .

0

0

0

3

2

1

3

3

4

3

4

4

7

0

0

5

2

2

4

3

4

0

7

0

2

5

2

4

4

3

0

0

7

2

2

5

2.2. Создать трехдиагональную матрицу, используя функцию diag:

2

3

0

0

0

0

3

2

3

0

0

0

0

3

2

3

0

0

0

0

3

2

3

0 .

0

0

0

3

2

3

0

0

0

0

3

2

2.3.При помощи функции rand создайте квадратную матрицу размера 6 6 из случайных чисел и найдите сумму всех элементов, находящихся в строках с 4 по 6 и в столбцах с 4 по 6.

2.4.Даны два вектора

2 46 810 ;

1 47 10 13 .

Найти

;

;

;

1

.

 

 

30

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]