Файл: Лабораторная работа 1 Программа для умножения матриц. Оценка числа операций.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 29.11.2023
Просмотров: 41
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа №1
Программа для умножения матриц. Оценка числа операций.
Действия над матрицами
Умножение матрицы на число
Сложение матриц
Умножение матриц
Действия над матрицами
Умножение матрицы на число
При умножении матрицы на число, все элементы матрицы умножаются на это число:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2 3; 4 5 6')
>>> C = 3 * A
>>> print(C)
[[ 3 6 9]
[12 15 18]]
Рассмотрим свойства операции умножения матрицы на число.
Свойство 1. Произведение единицы и любой заданной матрицы равно заданной матрице:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> L = 1 * A
>>> R = A
>>> print(L)
[[1 2]
[3 4]]
>>> print(R)
[[1 2]
[3 4]]
Свойство 2. Произведение нуля и любой матрицы равно нулевой матрице, размерность которой равна исходной матрицы:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> Z = np.matrix('0 0; 0 0')
>>> L = 0 * A
>>> R = Z
>>> print(L)
[[0 0]
[0 0]]
>>> print(R)
[[0 0]
[0 0]]
Свойство 3. Произведение матрицы на сумму чисел равно сумме произведений матрицы на каждое из этих чисел:
➣ Численный пример
1 2
1 2
1 2
2 3 2
3 3
4 3
4 3
4 2
4 3
6 2
10
;
6 8
9 12 15 20 1
2 5
10 5
3 4
15 20
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> p = 2
>>> q = 3
>>> L = (p + q) * A
>>> R = p * A + q * A
>>> print(L)
[[ 5 10]
[15 20]]
>>> print(R)
[[ 5 10]
[15 20]]
Свойство 4. Произведение матрицы на произведение двух чисел равно произведению второго числа и заданной матрицы, умноженному на первое число:
➣ Численный пример
➤
Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> p = 2
>>> q = 3
>>> L = (p * q) * A
>>> R = p * (q * A)
>>> print(L)
[[ 6 12]
[18 24]]
>>> print(R)
[[ 6 12]
[18 24]]
Свойство 5. Произведение суммы матриц на число равно сумме произведений этих матриц на заданное число:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> B = np.matrix('5 6; 7 8')
>>> k = 3
>>> L = k * (A + B)
>>> R = k * A + k * B
>>> print(L)
[[18 24]
[30 36]]
>>> print(R)
[[18 24]
[30 36]]
Сложение матриц
Складывать можно только матрицы одинаковой размерности — то есть матрицы, у которых совпадает количество столбцов и строк.
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 6 3; 8 2 7')
>>> B = np.matrix('8 1 5; 6 9 12')
>>> C = A + B
>>> print(C)
[[ 9 7 8]
[14 11 19]]
Рассмотрим свойства сложения матриц.
Свойство 1. Коммутативность сложения. От перестановки матриц их сумма не изменяется:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> B = np.matrix('5 6; 7 8')
>>> L = A + B
>>> R = B + A
>>> print(L)
[[ 6 8]
[10 12]]
>>> print(R)
[[ 6 8]
[10 12]]
Свойство 2. Ассоциативность сложения. Результат сложения трех и более матриц не зависит от порядка, в котором эта операция будет выполняться:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> B = np.matrix('5 6; 7 8')
>>> C = np.matrix('1 7; 9 3')
>>> L = A + (B + C)
>>> R = (A + B) + C
>>> print(L)
[[ 7 15]
[19 15]]
>>> print(R)
[[ 7 15]
[19 15]]
Свойство 3. Для любой матрицы существует противоположная ей , такая, что их сумма является нулевой матрицей :
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> Z = np.matrix('0 0; 0 0')
>>> L = A + (-1)*A
>>> print(L)
[[0 0]
[0 0]]
>>> print(Z)
[[0 0]
[0 0]]
Умножение матриц
Умножение матриц это уже более сложная операция, по сравнению с рассмотренными выше. Умножать можно только матрицы, отвечающие следующему требованию: количество столбцов первой матрицы должно быть равно числу строк
второй матрицы.
Для простоты запоминания этого правила можно использовать диаграмму умножения, представленную на рисунке 1.
Рисунок 1 — Диаграмма матричного умножения
Рассмотрим умножение матриц на примере.
➣ Численный пример
Каждый элемент c
ij
новой матрицы является суммой произведений элементов i-ой строки первой матрицы и j-го столбца второй матрицы. Математически это записывается так:
➤
Пример на Python
Решим задачу умножения матриц на языке Python. Для этого будем использовать функцию dot() из библиотеки Numpy:
>>> A = np.matrix('1 2 3; 4 5 6')
>>> B = np.matrix('7 8; 9 1; 2 3')
>>> C = A.dot(B)
>>> print(C)
[[31 19]
[85 55]]
Ниже представлены свойства произведения матриц. Примеры свойств будут показаны для квадратной матрицы.
Свойство 1. Ассоциативность умножения. Результат умножения матриц не зависит от порядка, в котором будет выполняться эта операция:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> B = np.matrix('5 6; 7 8')
>>> C = np.matrix('2 4; 7 8')
>>> L = A.dot(B.dot(C))
>>> R = (A.dot(B)).dot(C)
>>> print(L)
[[192 252]
[436 572]]
>>> print(R)
[[192 252]
[436 572]]
Свойство 2. Дистрибутивность умножения. Произведение матрицы на сумму матриц равно сумме произведений матриц:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> B = np.matrix('5 6; 7 8')
>>> C = np.matrix('2 4; 7 8')
>>> L = A.dot(B + C)
>>> R = A.dot(B) + A.dot(C)
>>> print(L)
[[35 42]
[77 94]]
>>> print(R)
[[35 42]
[77 94]]
Свойство 3. Умножение матриц в общем виде не коммутативно. Это означает, что для матриц не выполняется правило независимости произведения от перестановки множителей:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> B = np.matrix('5 6; 7 8')
>>> L = A.dot(B)
>>> R = B.dot(A)
>>> print(L)
[[19 22]
[43 50]]
>>> print(R)
[[23 34]
[31 46]]
Свойство 4. Произведение заданной матрицы на единичную равно исходной матрице:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> E = np.matrix('1 0; 0 1')
>>> L = E.dot(A)
>>> R = A.dot(E)
>>> print(L)
[[1 2]
[3 4]]
>>> print(R)
[[1 2]
[3 4]]
>>> print(A)
[[1 2]
[3 4]]
Свойство 5. Произведение заданной матрицы на нулевую матрицу равно нулевой матрице:
➣ Численный пример
➤ Пример на Python
>>> A = np.matrix('1 2; 3 4')
>>> Z = np.matrix('0 0; 0 0')
>>> L = Z.dot(A)
>>> R = A.dot(Z)
>>> print(L)
[[0 0]
[0 0]]
>>> print(R)
[[0 0]
[0 0]]
>>> print(Z)
[[0 0]
[0 0]]
Выполнить действия над матрицами.
(3
)(2
)
A B
A B
где
1 2
1 2
1 3
0 2
3 ,
1 0 1 1
1 2
1 3 1
A
B
2 4
2 2
1 3
2 0
4 6
1 0 1 2
2 4
1 3 1 0
3 5
1 4
7 3
5 3
A B
1 2
1 2
1 3
3 3 0 2
3 1
0 1 1
1 2
1 3 1 3
6 3
2 1
3 5
7 0
0 6
9 1
0 1 1
6 8
3 3
6 1 3 1 2
0 7
A
B
(3
)(2
)
5 7
0 0
3 5
7 43 74 1
6 8
1 4
7 30 67 71 2
0 7
3 5
3 21 29 11
A B
A B
1.
(2
)(2
)
A B
B
A
где
2 3
1 1
0 5
4 5
2 ,
0 1
3 1 0 7
2 2
4
A
B
16.
2
(
)(
),
AB
A B A B
где
4 2
0 0
2 6
1 1
2 ,
2 4
3 7
2 0
0 3
4
A
B
2.
3
(
2 )
A
A
B B
где
4 5
2 2
1 1
3 1
0 ,
0 1
3 4
2 7
5 7
3
A
B
17.
2 3 (
2 ),
A
B AB
A
где
1 1
0 5
3 1
2 0
1 ,
1 2 0
1 1
1 3 0 0
A
B
3.
2 2(
)(
),
A B A
B
где
5 1
7 2
4 1
10 2
1 ,
3 1
0 0
1 2
7 2
1
A
B
18
(
)(
) 2
,
A B A B
AB
где
3 4
5 0
1 2
1 0
2 ,
1 1
2 2
1 0 3
1 0
A
B
4.
2 2
(
)(
),
A
B
A B
где
7 2
0 0
2 3
7 2
1 ,
1 0
2 1
1 1
3 1
1
A
B
19.
2
(
)
,
A AB B
A
B
где
3 2
1 0
3 1
0 1
2 ,
2 1
2 5
7 1
3 1
4
A
B
5.
2
(
)(2
),
A B
A B
где
5 2
0 3
6 1
10 4
1 ,
1 2
0 7
3 2
2 1
3
A
B
20 2
(
)(
3 ),
A
A B A
B
где
4 5
6 0
1 2
1 0 3 ,
1 0
2 1 2 1
3 1
2
A
B
6.
(
)
2 ,
A B A
B
где
5 1
3 3
7 2
0 2
1 ,
1 1
2 2
1 0
0 1
3
A
B
21
(
2 ) 3
,
B A
B
AB
где
7 3 0 4
2 1 1
1 0 ,
1 0 1 2
0 3
3 2 1
A
B
7.
2(
0. )
,
A
B
AB
где
5 3
1 1
4 16 2
0 4 ,
3 2
0 3
5 1
5 7
2
A
B
22.
3(
) (
) ,
A B
A B A
где
1 2
3 4
2 1
0 2 3 ,
1 2 0
1 3
1 2
3 1
A
B
8.
(
)
3 ,
A B A
B
где
3 2
5 1
2 4
4 2
0 ,
0 3
2 1
1 2
1 3
4
A
B
23
(
) 2 (
),
A A B
B A B
где
1 2
2 0
3 5 1
1 2 ,
4 1 0
1 1
1 1 1 2
A
B
9.
2 2
(
) ,
A
A
B B
где
1 4
2 4
6 2
2 1
2 ,
4 10 1
0 1
1 2
4 5
A
B
24
(2
)
0.5 ,
A B B
A
где
1 1
2 1 0 2
3 0
2 ,
2 1
1 2
1 1
2 0
1
A
B
10.
2 2
3(
) 2
,
A
B
AB
где
4 2
1 2
0 2
3 2
0 ,
5 7
2 0
1 2 1
0 1
A
B
25 2(
) ,
AB
A B A
где
2 1
1 2
1 0
1 0
1 ,
0 2
1 3
1 2
1 3
1
A
B
11.
(2
)(3
) 2
,
A B
A B
AB
где
5 2
0 3
6 1
10 4
1 ,
1 2
0 7
3 2
2 1
3
A
B
26
(
2 )(3
),
A
B
A B
где
1 2
3 2
3 1
4 2
1 ,
2 0
1 0
1 1
1 0
1
A
B
12.
2
(
) 2(
) ,
A A
B
B
A B
где
2 3
1 2
7 13 1 2 4 ,
1 0
5 5
3 0
5 13 21
A
B
27 2
(
),
AB
A B
A
где
1 2
1 1
2 1
2 3
0 ,
2 1
0 0
2 1
1 2
1
A
B
13.
(
)
(2 3 ),
A B A B
A
B
где
1 2
3 4 11 3
2 3
5 ,
1 6
1 1
4 1
2 2
16
A
B
28
(3 0.5 )(2
),
A
B
B
A
где
1 2
3 1
0 2
1 0 2 ,
2 3
1 1
2 1
3 1
0
A
B
14.
(2
)
(
),
A A B
B A B
где
2 3
1 9
8 7
4 1 0 ,
2 7
3 0
1 2
4 3
5
A
B
29 2 (
) 3
,
A A B
AB
где
2 3
4 2
0 2
1 2
0 ,
1 1
0 0
1 2
1 1
1
A
B
15.
3(
)(
2 ),
A B AB
A
где
3 2
1 0
3 1
0 1
2 ,
2 1
2 5
7 1
3 1
4
A
B
30 3
(
)(
2 ),
A
A B A
B
где
2 5
1 1
2 0
0 2
1 ,
1 0
2 1
0 1
0 0
3
A
B
Лабораторная работа №2
Методы приближенного интегрирования. Выбор шага
для обеспечения необходимой точности.