Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LEKTsIYa-3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
200.19 Кб
Скачать

Лекция 3

3.1. Векторно-матричные операции.

Все данные в системе MATLAB интерпретируются как массивы. Массив – это упорядоченный набор однотипных данных (действительных и комплексных чисел, переменных, арифметических выражений). Каждый массив имеет имя. Массивы бывают одномерными, двумерными и многомерными. Доступ к конкретному элементу массива осуществляется путем указания его индекса (номера элемента в массиве).

Вектор в MATLAB – это одномерный массив, матрица – двумерный массив. По умолчанию программа предполагает, что каждая заданная переменная это вектор или матрица. Так, например, запись v=1 означает вектор, состоящий из единственного элемента = 1.

Способы задания векторов и матриц:

  1. если значения элементов векторов являются арифметической прогрессией, такой вектор можно задать в виде:

имя = xn : dx : xk

где имя – имя, которое присваивается массиву; xn, xk – соответственно значения первого и последнего элементов массива, dx – шаг для формирования следующего элемента массива. Если параметр dx отсутствует, тогда шаг = 1 и вектор задается так:

имя = xn : xk

Пример.

>> x=-3:2:3

x =

-3 -1 1 3 >>

>>

>> x=-3:3

x =

-3 -2 -1 0 1 2 3

>>

  1. Поэлементный ввод. Для определения вектор-строки записывается имя массива, знак присваивания “=”, затем в квадратных скобках через пробел или запятую значения элементов массива, например, v=[1 2 3 4 5] или v=[1,2,3,4,5].

Элементы вектора-столбца вводятся через точку с запятой, например, v=[1;2;3;4;5].

При обращении к элементу вектора указывается имя массива и порядковый номер элемента в круглых скобках, например v(1).

Ввод элементов матрицы осуществляется в квадратных скобках, при этом элементы строки отделяются друг от друга пробелом или запятой, а сами строки разделяются между собой точкой с запятой, например A=[1 2; 3 4]. Второй вариант задания той же матрицы

A=[1 2

3 4]

Обращение к элементу матрицы имеет вид: A(m,n), где m – номер строки элемента, n – номер столбца.

  1. Путем объединения нескольких векторов. Результатом выполнения следующего фрагмента программы

>> a=[1 2 3];

>> b=[4 5 6];

>> c=[a b];

будет вектор с, содержащий элементы:

1 2 3 4 5 6

Результатом выполнения фрагмента программы

>> a=[1 2];

>> b=[3 4];

>> с=[a; b]

станет матрица с, имеющая вид

1 2

3 4

Формирование матриц и векторов определенного вида:

  1. zeros(m,n) – прямоугольная матрица с нулевыми элементами, где m – число строк, n – число столбцов.

>> A=zeros(2,3)

A =

0 0 0

0 0 0

>>

  1. zeros(m) – квадратная матрица с нулевыми элементами.

>> A=zeros(3)

A =

0 0 0

0 0 0

0 0 0

>>

  1. ones(m,n) – прямоугольная матрица, состоящая из единиц;

>> B=ones(2,3)

B =

1 1 1

1 1 1

>>

  1. ones(m) – квадратная матрица, состоящая из единиц;

>> B=ones(3)

B =

1 1 1

1 1 1

1 1 1

>>

  1. eye(m,n) – прямоугольная матрица с 1 по главной диагонали, остальные элементы = 0.

>> E=eye(2,3)

E =

1 0 0

0 1 0

>>

  1. eye(m) – квадратная матрица из 1, расположенных по главной диагонали.

E =

1 0 0

0 1 0

0 0 1

>>

  1. diag(A) – извлечение главной диагонали матрицы A.

>> A=[1 2 3;4 5 6;7 8 9]

A =

1 2 3

4 5 6

7 8 9

>> D=diag(A)

D =

1

5

9

>>

  1. diag(A,m) – извлечение любой диагонали матрицы A, m – номер извлекаемой диагонали (диагонали отсчитываются вверх и вниз от главной диагонали, у которой по умолчанию номер = 0).

>> D=diag(A,-1)

D =

4

8

>> D=diag(A,1)

D =

2

6

>>

И наоборот, если в функции diag(d,m) в качестве аргумента d использовать вектор-столбец, то в результате получим диагональную матрицу, где элементы вектора d образуют диагональ с номером m, например:

>> d=[1;2;3]

d =

1

2

3

>> A=diag(d)

A =

1 0 0

0 2 0

0 0 3

>> B=diag(d,2)

B =

0 0 1 0 0

0 0 0 2 0

0 0 0 0 3

0 0 0 0 0

0 0 0 0 0

>> C=diag(d,-3)

C =

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

1 0 0 0 0 0

0 2 0 0 0 0

0 0 3 0 0 0

>>

Операции над векторами делятся на 2 типа:

  1. Поэлементное преобразование (возможно только над векторами одинакового размера и типа). Признак поэлементной операции – точка перед знаком операции. В случае сложения или вычитания знак поэлементной операции ставить не нужно. Примеры: c=a.*b или d=k+p.

  2. Векторные операции (сложение и вычитание векторов, транспонирование векторов, умножение на число, умножение вектора на вектор, скалярное и векторное произведение векторов). Примеры: b=x-y или z=x'.

Для транспонирования применяется знак апостроф (’).

Умножение вектора на число выполняется с помощью обычного оператора умножения «*», причем умножать вектор на число можно и справа и слева.

Операции над матрицами:

  1. поэлементные операции (поэлементное умножение и деление матриц одинакового размера, поэлементное возведение в степень). Знаки, обозначающие соответствующие поэлементные операции эквиваленты векторным поэлементным операциям.

  2. матричные операции (сложение и вычитание матриц одинаковых размеров, умножение матрицы на число, умножение матрицы на матрицу; возведение матрицы в целую степень, транспонирование матрицы, участие в матричной операции обращенной матрицы). Перечисленные операции выполняются в MATLAB с помощью обычных арифметических операторов.

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

  • size(A) – определяется размер массива;

  • length(a) – определяется количество элементов вектора;

  • sort(a) – сортировка элементов вектора по возрастанию, где а – вектор. Если аргумент - матрица, тогда в результате функция упорядочивает каждый столбец матрицы отдельно;

  • max(a) и min(a) – соответственно определение максимального (минимального) элемента вектора. Если аргумент этой функции – матрица, то результат – вектор-строка состоящая из максимальных (минимальных) элементов в соответствующих столбцах матрицы;

  • dot(a,b) – скалярное произведение векторов a и b. Другой способ – матричное умножение транспонированного вектора a (строки) на вектор b (столбец). Пример: a’*b;

  • eig(A)возвращает вектор собственных значений матрицы А; [T,J]=eig(A) дает матрицу T, столбцы которой – собственные вектора матрицы A, и диагональную матрицу J с собственными значениями матрицы A;

  • inv(A) возвращает обратную матрицу к матрице A.

Пример 1. Вывести на печать матрицы А, АТ, В и ВТ, где

; ;

а также векторы

; ;

в виде столбцов и строк, а также составить из них матрицу

Пример текста программы для М-файла

A=[1 2 3;1 2 1;3 2 0]

disp('At-транспонирование A:'),At=A'

B=[4 1 2; 0 4 3;1 1 1]

disp('Bt-транспонирование B:'),Bt=B'

disp('p,q,r-столбцы:')

p=[.1;1.7;-1.5]

q=[-1.6;0.8;1.1]

r=[-0.7;1.3;0.2]

disp('матрица PQR=[p q r]:'),PQR=[p q r]

disp('p,q,r-строки:')

p=[.1 1.7 -1.5]

q=[-1.6 0.8 1.1]

r=[-0.7 1.3 0.2]

Результаты счета в командном окне

A =

1 2 3

1 2 1

3 2 0

At-транспонирование A:

At =

1 1 3

2 2 2

3 1 0

B =

4 1 2

0 4 3

1 1 1

Bt-транспонирование B:

Bt =

4 0 1

1 4 1

2 3 1

p,q,r-столбцы:

p =

0.1000

1.7000

-1.5000

q =

-1.6000

0.8000

1.1000

r =

-0.7000

1.3000

0.2000

матрица PQR=[p q r]:

PQR =

0.1000 -1.6000 -0.7000

1.7000 0.8000 1.3000

-1.5000 1.1000 0.2000

p,q,r-строки:

p =

0.1000 1.7000 -1.5000

q =

-1.6000 0.8000 1.1000

r =

-0.7000 1.3000 0.2000

>>

Пример 2. Вычислить для матриц А и В:

– определение обратных матриц,

– матричное и поэлементное произведение,

– матричное и поэлементное возведение в степень 4,

– матричное и поэлементное деление,

– сложение матрицы с числом,

- умножение матрицы на число,

где

; ;

Пример текста программы для М-файла

A=[1 2 3;1 2 1;3 2 3]

B=[4 1 2; 3 4 3;1 1 1]

A1=inv(A);disp('обратная матрица к матрице А: A1='),disp(A1)

B1=inv(B);disp('обратная матрица к матрице B: B1='),disp(B1)

disp('матричное произведение А*B='),disp(A*B)

disp('поэлементное произведение А.*B='),disp(A.*B)

disp('матричное возведение в степень А^4='),disp(A^4)

disp('поэлементное возведение в степень А.^4='),disp(A.^4)

disp('операция умножения обратной матрицы А на матрицу B: A\B='),disp(A\B)

disp('операция умножения А на обратную матрицу B: A/B='),disp(A/B)

disp('поэлементное деление А./B='),disp(A./B)

disp('поэлементное деление А.\B='),disp(A.\B)

disp('операция умножения А на число 2: 2*A='),disp(2*A)

disp('операция сложения матрицы А с числом 2: 2+A='),disp(2+A)

Результаты счета в командном окне

A =

1 2 3

1 2 1

3 2 3

B =

4 1 2

3 4 3

1 1 1

обратная матрица к матрице А: A1=

-0.5000 0.0000 0.5000

0 0.7500 -0.2500

0.5000 -0.5000 0

обратная матрица к матрице B: B1=

0.5000 0.5000 -2.5000

0 1.0000 -3.0000

-0.5000 -1.5000 6.5000

матричное произведение А*B=

13 12 11

11 10 9

21 14 15

поэлементное произведение А.*B=

4 2 6

3 8 3

3 2 3

матричное возведение в степень А^4=

412 464 544

232 264 308

544 616 724

поэлементное возведение в степень А.^4=

1 16 81

1 16 1

81 16 81

операция умножения обратной матрицы А на матрицу B: A\B=

-1.5000 0.0000 -0.5000

2.0000 2.7500 2.0000

0.5000 -1.5000 -0.5000

операция умножения А на обратную матрицу B: A/B=

-1.0000 -2.0000 11.0000

0 1.0000 -2.0000

0 -1.0000 6.0000

поэлементное деление А./B=

0.2500 2.0000 1.5000

0.3333 0.5000 0.3333

3.0000 2.0000 3.0000

поэлементное деление А.\B=

4.0000 0.5000 0.6667

3.0000 2.0000 3.0000

0.3333 0.5000 0.3333

операция умножения А на число 2: 2*A=

2 4 6

2 4 2

6 4 6

операция сложения матрицы А с числом 2: 2+A=

3 4 5

3 4 3

5 4 5

>>

Пример 3. Решить систему линейных алгебраических уравнений

Пример M-файла:

A=[2 -7 10; 7 1 4; 1 -1 1]

b=[-13; 11; 0]

x=A\b

Следует обратить внимание на то, что операция «деления» вектора b справа налево на матрицу А вызывает обращение матрицы А и умножение матрицы, обратной матрице А, на вектор b.

Получаемый результат:

A =

2 -7 10

7 1 4

1 -1 1

b =

-13

11

0

x =

2

1

-1

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