Матрица с нуля: Матрицы в математике: определения и применение

Содержание

Матрица. Сложение и умножение матриц

1. Матрицы.

Сложение и умножение
матриц.
Матрица.
Прямоугольная таблица чисел называется
матрицей. Если в указанной таблице m
строк и n столбцов, то ее в общем виде
можно записать так:
a11
a21
A

a
m1
a12
a22

am 2
… a1n
… a2 n
… …
… amn
A aij mn .
или
Числа
aij i 1, m;
j 1, n
называются элементами матрицы
А.
Главная диагональ
Для квадратной матрицы
a
ij nn
совокупность чисел
a11, a22 ,….., ann
называется ее главной диагональю.
Равные матрицы.
Две матрицы считаются равными,
если они имеют одинаковые размеры и их
соответственные элементы равны между
собой:
A aij mn B bij kl m k; n 1;
aij bij , i 1, m;
j 1, n.
Сложение матриц.
Если две матрицы имеют одинаковые
размеры, то их можно сложить,
складывая соответственные элементы.

Так, если
a11
a21
A

a
m1
a12
a22

am 2
… a1n
… a2 n
… …
… amn
и
b11 b12
b21 b22
B
… ….
b
m1 bm 2
… b1n
… b2 n
,
… …
… bmn
a11 b11 a12 b12
a21 b21 a22 b22
A B


a b
m1 m1 am 2 bm 2
то
a1n b1n
… a2 n b2 n
,


… amn bmn

или
(aij ) mn (bij ) mn (aij bij ) mn .
Умножение матрицы на число
Всякую матрицу можно умножить на любое
число согласно следующему определению:
aij mn aij mn
Пример 1. Даны матрицы А и В
0 2 1
1 2 1
, B
A
3
7
5
3
0
1
Найти матрицу
2 A 3B
Решение
1 2 1
0 2 1
3
2
3 0 1
3 7 5
2 4 2 0 6 3
6 0 2 9 21 15
2 2 5
.
3 21 17
Свойства.
Легко видеть, что операции сложения и
умножения матрицы на число
удовлетворяют следующим свойствам:
1. свойство коммуникативности
A B B A
2. Свойство ассоциативности
A ( B C ) ( A B) C
3.
( A B) A B
4.
5.
( ) A A A
( A) ( ) A
Нулевая матрица
Матрица, все элементы которой равны нулю,
называется нулевой. Ее будем обозначать
буквой О.
0
0
O

0
0 … 0
0 … 0
… … …
0 … 0
Умножение матриц
Пусть у нас имеются две матрицы
A aij mk
B bij kn
Здесь число столбцов первой матрицы равно
числу строк второй. Тогда произведение
матрицы А на матрицу В определяется
следующим образом:
a11
a21

a
m1
a12
a22

am 2
… a1k
… a2 k
… …
… amk
b11 b12
b21 b22
… …
b
k1 bk 2
… b1n
… b2 n
… …
… bkn
c11 c12
c21 c22
… …
c
m1 cm 2
… c1n
… c2 n
… …
… cmn
где
cij ai1b1 j ai 2b2 j . .. aik bkj
Оператор суммирования
Если воспользоваться оператором
суммирования
n
a
i 1
i
a1 a2 … an ,
то
k
cij aisbsj
s 1
Произведение матриц
Произведение матриц А и В записывается так:
C AB
Пример 1
Умножить матрицу
1 1 2
A
3 0 1
на матрицу
1 4
B 2 3
0 1
Решение
1 4
1 1 2
2 3
A B
3 0 1 0 1
1 1 1 2 2 0 1 4 1 3 2 1
3 4 0 3 1 1
3 1 0 2 1 0
1 3
3 13
Транспонирование матриц
Пусть у нас имеется матрица
A aij m n
.
Если каждую строку этой матрицы
заменить ее столбцом с тем же номером,
то получим новую матрицу размера
, которая называется
n m
транспонированной к данной и
обозначается
T :
A
a11
a
12
T
A
….
a
1n
a21 …. am1
a22 …. am 2
…. …. ….
a2 n …. amn
Определители второго и третьего
порядков
По определенному правилу каждой
квадратной матрице А ставится
определенное число, которое называется
ее определителем и обозначается A
Рассмотрим определители порядков
1, 2, 3.
Если порядок матрицы А равен единице,
то
A a11
Для квадратной матрицы второго порядка
a11 a12
A
a
a
21
22
A
a11
a12
a21 a22
a11a22 a12a21
Опираясь на это определение определителя
второго порядка дадим определение
определителя третьего порядка.
Если
a11 a12
A a21 a22
a
31 a32
a13
a23
a33
, то
a11
a12
a13
A a21 a22
a31
a11
a32
a22 a23
a32 a33
a31
a23
a33
a21
a12
a13
a22
a23
a12
a13
a32 a33
a11
a12
a13
a21 a22
a23 a11a22a33 a21a32 a13
a31
a33
a32
a31a12a23 a11a32a23 a21a12a33
a31a22a13.
Для запоминания правила вычисления
определителя третьего порядка
используется правило треугольников или
правило Саррюса.
Оно состоит в изображении (явном или
мысленном) элементов матрицы точками.
Точки, соответствующие произведениям,
которые входят в определитель,
соединяются отрезками.
В результате получаются два отрезка
(соответствующие главной и побочной
диагоналям), а также четыре треугольника,
два из которых имеют стороны,
параллельные главной диагонали, и двапараллельные побочной диагонали.
Главной диагонали и тем двум
треугольникам, основания которых
параллельны главной диагонали,
соответствуют произведения со знаком
«+», а побочной диагонали соответствуют
произведения со знаком «-».
Пример 1. Вычислить определитель
2
1 3
1
5 2
1 4 2
Решение:
2 5 2 1 4 3
1 2 1 1 5 3
1 1 2 4 2 2 20 12 2
15 2 16 27
Обратная матрица
Пусть у нас имеется квадратная матрица
A aij n n.
Матрица
B bij n n
обратной к матрице
называется
А, если
BA AB E ij n n ,
где
1, при i j,
ij
0, при i j.
ij
называется символом Кронекера.
Квадратная матрица называется
невырожденной, если ее определитель
не равен нулю. В противном случае
матрица называется вырожденной.
Пример:
Найти матрицу, обратную к
матрице
1 0 1
A 2 3 2
1 1 2
Решение.
Сначала проверим, является ли
определитель матрицы А отличным от
нуля:
1
A 2
0 1
3
1 1
2 6 2 3 2 1 0.
2
Отсюда вытекает, что матрица А
невырожденная и у нее есть обратная:
A11
1
1
A A12
A13
A
A21
A22
A23
A31
A32
A33
В нашем случае:
A11 1
1 1
A12 1
1 2
3 2
1 2
2
2
1 2
4;
6
2
A13 1
1 3
A21 1
1 1
2 1
A22 1
1 3
3
0 1
1
2
1
1
1
2
5;
1;
1;
A23 1
1
2 3
0
1 1
1;
A31 1
0 1
A32 1
1 1
3 1
3 2
3
2
2
2
3;
4;
A33 1
3 3
1 0
2 3
3.

Отсюда
4 1 3
1
A 6 1 4 .
5 1 3
Ранг матрицы
Пусть у нас имеется матрица
содержащая
a11
a21

a
m1
A aij n n
m строк и n столбцов:
a12
a22

am 2
… a1n
… a2 n
… …
… amn
Выделим в этой матрице k строк k столбцов
k m,
k n
элементов, стоящих на
пересечении выделенных строк и столбцов,
составим определитель k-го порядка. Все
такие определители называются минорами
нашей матрицы. Элементы матрицы- это
миноры первого порядка.
Определение: Рангом матрицы
называется наивысший порядок отличных
от нуля миноров этой матрицы.
Пример. Найти ранг матрицы
3 2 1 2
A 2 0 1 1
0 4 5 1
У этой матрицы 12 миноров первого
порядка, 18 миноров второго порядка:
3 2 3 1 3 2 2 1
,
,
,
,
2 0 2 1 2 1 0 1
2 2 1 2 3 2 3 1
,
,
,
,
0 1 1 2 0 4 0 5
3 2 2 1 2 2 1 2
,
,
,
,
0 1 4 5 4 1 5 1
2 0 2 1 2 1 0 1
,
,
,
,
0 4 0 5 0 1 4 5
0 1 1 1
,
,
4 1 5 1
и наконец 4 минора третьего порядка:
3 2
1 3
1
2
2 0 1, 2 1 1 ,
0 4
5 0
5
1
3 2 2 2
1
2
2 0 1 , 0 1 1 .

0 4 1 4
5
1
Нетрудно проверить, что все миноры
третьего порядка матрицы А равны нулю,
а миноры второго порядка во всяком
случае не все равны нулю. Поэтому ранг
матрицы А равен 2
r A 2
При вычислении ранга матрицы
существенную роль играют элементарные
преобразования матрицы:
1) умножение элементов любой
строки (столбца) матрицы на число
0;
2) прибавление к строке (столбцу) другой
строки (столбца), умноженной на
некоторое число;
3) перестановка двух строк (столбцов)
матрицы.
При элементарных преобразованиях
ранг матрицы не изменяется. С помощью
элементарных преобразований любую
матрицу можно привести к виду
1 0 0 … 0 0 … 0
0 1 0 … 0 0 … 0
0 0 0 … 0 0 … 0
где на «главной диагонали» стоит r
единиц, а все остальные элементы матрицы
равны нулю. Ранг такой матрицы, а значит,
и исходной матрицы, равен r.
Если ранг матрицы А равен рангу
матрицы В, то матрицы А и В называются
эквивалентными. В этом случае пишут
A ~ B.
Системы линейных уравнений
Основные понятия и определения
Системой линейных алгебраических
уравнений с n переменными х1, х2, …, хn
называется система вида
a11 x1 a12 x2 … a1n xn b1
a x a x … a x b
21 1 22 2
2n n
2
……….
……….
……….
……….
….
am1 x1 am 2 x2 … amn xn bm .
Здесь числа
aij i 1, m;
j 1, n
называются коэффициентами системы,
а числа b1, b2, …,bm-ее свободными
членами.
Если b1= b2=…=bm=0, то система
называется однородной;
Если хотя бы одно из bi i 1, m
от нуля, то система называется
неоднородной
отлично
Решением системы называется всякая
упорядоченная совокупность n чисел
(с1, с2, …, сn), которая при подстановке
в каждое уравнение системы вместо
соответствующих переменных превращает
каждое уравнение в тождество.
Система называется совместной,
если у нее есть хотя бы одно решение, и
несовместной в противном случае.
Совместные системы делятся на
определенные и неопределенные.
Система, которая имеет только одно
решение, называется определенной.
Если система имеет больше одного
решения, то она называется
неопределенной.
Систему удобно записать в матричной
форме, для чего введем необходимые
понятия. Матрица
a11
a21
A

a
m1
a12
a22

am 2
… a1n
… a2 n
,
… …
… amn
элементы которой являются
коэффициентами системы, назовем
матрицей системы.
Введем еще две матрицы, каждая из
которых состоит из одного столбца
(матрицы-столбца):
x1
x2
X ,

x
n
b1
b2
B .

b
m
Это матрица-столбец переменных и
матрица-столбец свободных членов.
У матрицы А n столбцов, а у матрицы X n
строк, поэтому А можно умножить на X.
a11 x1 a12 x2 … a1n xn
a21 x1 a22 x2 . .. a2 n xn
AX
.
……………………………….
a x a x … a x
mn n
m1 1 m 2 2
Как показывают равенства, каждый
элемент матрицы столбца АХ есть
соответствующий элемент матрицы В.
Отсюда в соответствии с определением
равенства матриц, получаем матричную
запись системы:
AX B.
Введем в рассмотрение матрицы-столбцы
a11
a12
a1n
a21
a22
a2 n
P1 , P2
,…,
P
,
n



a
a
a
m1
m2
mn
тогда система уравнений может быть
записана так:
x1P1 x2 P2 … xn Pn B
Две системы линейных алгебраических
уравнений называются эквивалентными
(равносильными), если всякое решение
одной из них является решением второй,
и наоборот.
Элементарными преобразованиями
системы линейных уравнений называют
следующие действия:
1) умножение на число, отличное от нуля
одного из уравнений системы;
2)
прибавление к одному уравнению
системы другого ее уравнения,
умноженного на произвольное число,
при этом сохраняются остальные
уравнения системы в том числе и то,
которое прибавлялось;
3) перестановка местами двух уравнений
системы.
Формула Крамера
Пусть дана система n линейных
алгебраических уравнений с
n-переменными (неизвестными):
a11 x1 a12 x2 … aij x j … a1n xn b1
a x a x … a x … a x b
21 1 22 2
2j j
2n n
2
……….
……….
……….
……….
……….
……….
.
an1 x1 an 2 x2 … anj x j … ann xn bn .
Если определитель
системы
матрицы
A aij n n
отличен от нуля и система совместна,
то она и определенная.
Если система имеет решение, то оно
единственно и может быть найдено
по формулам, которые называются
формулами Крамера.
Пример. Решить систему линейных
уравнений
2 x1 x2 3 x3 x4 0
x2 2 x4 2
x
x
2
x
x
1
1
2
3
4
x1 2 x1 x3 3 x4 1
Решение. Вычислим определитель
системы следующим образом. Из первой
строки вычтем удвоенную третью строку,
из третьей-четвертую, тогда получим
2
1
3
1
0
1
0
2
1 1 2
1
1
3
2
1
2 2 1 2 3 4 1 2
0
1
0
2
1 1
1 2
2 1
1 3
1
2
1
3
0
3
1
1
0
1
0
2
0 3 3 2
1
2
1
3
a41 A41
3
1 1
5
1
1
0
2 1 0 2
3 3 2
3 6 18 2 7.
3 1
3 3
1
2
Определитель
0, следовательно,
правило Крамера применимо к системе.
Составим и вычислим определители
1 , 2 , 3 , 4 .
1
0
1
3
1
2
1
0
2
1 1 2
1
1
3
2
1
23,
2
3
2
0
3
1
0
2
0
2
1 1 2
1
1
1
1
3
2
1
0
1
0
1
2
2
1 1 1
1
1
3
2
1
2,
12,
4
2
1
3
0
0
1
0
2
1 1 2 1
1
2
1
8.
1
Отсюда искомое решение данной системы
1 23
x1
;
7
3 12
x3
;
7
2
2
x2
;
7
4
8
x4
.
7

Функция МОПРЕД

В этой статье описаны синтаксис формулы и использование MDETERM  в Microsoft Excel.

Описание

Возвращает определитель матрицы (матрица хранится в массиве).

Синтаксис

МОПРЕД(массив)

Аргументы функции МОПРЕД описаны ниже.

Замечания

  • Массив может быть задан как интервал ячеек, например A1:C3, как массив констант, например {1;2;3:4;5;6:7;8;9}, как имя для интервала или массива.

  • Функция МОПРЕД возвращает значение ошибки #ЗНАЧ! в случаях, указанных ниже.

    • Если какая-либо ячейка в массиве пуста или содержит текст.

    • Если количество строк в массиве не равно количеству столбцов.

  • Определитель матрицы — это число, вычисляемое на основе значений элементов массива. Для массива A1:C3, состоящего из трех строк и трех столбцов, определитель вычисляется следующим образом:

МОПРЕД(A1:C3)
равно A1*(B2*C3-B3*C2) + A2*(B3*C1-B1*C3) + A3*(B1*C2-B2*C1)

  • Определители матриц обычно используются при решении систем уравнений с несколькими неизвестными.

  • Функция МОПРЕД производит вычисления с точностью примерно 16 значащих цифр, что может в некоторых случаях приводить к незначительным ошибкам. Например, определитель сингулярной матрицы отличается от нуля на 1E-16.

Пример

Скопируйте образец данных из следующей таблицы и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — клавишу ВВОД. При необходимости измените ширину столбцов, чтобы видеть все данные.

Данные

Данные

Данные

Данные

1

3

8

5

1

3

6

1

1

1

1

0

7

3

10

2

Формула

Описание

Результат

=МОПРЕД(A2:D5)

Определитель приведенной выше матрицы.

88

=МОПРЕД({3;6;1:1;1;0:3;10;2})

Определитель матрицы, представленной в виде массива констант.

1

=МОПРЕД({3;6:1;1})

Определитель матрицы в массиве констант.

-3

=МОПРЕД({1;3;8;5:1;3;6;1})

Возвращает сообщение об ошибке, так как массив имеет разное количество строк и столбцов.

#ЗНАЧ!

Свойства определителя матрицы | Мозган калькулятор онлайн

Свойства определителя матрицы | Мозган калькулятор онлайн
  1. Определитель единичной матрицы равен единице: det(E) = 1. Единичная матрица — это квадратная матрица, элементы главной диагонали которой равны единице, а все остальные элементы равны 0.

  2. Определитель матрицы с двумя равными строками или столбцами равен нулю.

  3. Определитель матрицы с двумя пропорциональными строками или столбцами равен нулю.

  4. Определитель матрицы, содержащий нулевую строку или столбец, равен нулю.

  5. Определитель матрицы равен нулю, если две или несколько строк или столбцов матрицы линейно зависимы.

  6. При транспонировании значение определителя матрицы не меняется: det(A) = det(AT).

  7. Определитель обратной матрицы: det(A-1) = det(A)-1.
  8. Определитель матрицы не изменится, если к какой-то его строке или столбцу прибавить другую строку или столбец, умноженную на некоторое число.

  9. Определитель матрицы не изменится, если к какой-то его строке или столбцу прибавить линейную комбинации других строк или столбцов.
  10. Если поменять местами две строки или два столбца матрицы, то определитель матрицы поменяет знак.

  11. Общий множитель в строке или столбце можно выносить за знак определителя:
  12. Если квадратная матрица n-того порядка умножается на некоторое ненулевое число, то определитель полученной матрицы равен произведению определителя исходной матрицы на это число в n-той степени: B = k·A => det(B) = kn·det(A), где A матрица n×n, k – число.
  13. Если каждый элемент в какой-то строке определителя равен сумме двух слагаемых, то исходный определитель равен сумме двух определителей, в которых вместо этой строки стоят первые и вторые слагаемые соответственно, а остальные строки совпадают с исходным определителем:
  14. Определитель верхней или нижней треугольной матрицы равен произведению его диагональных элементов.

  15. Определитель произведения матриц равен произведению определителей этих матриц: det(A·B) = det(A)·det(B).

Другой материал по теме


Как создать матричный модуль с нуля | by Khuyen Tran

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

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

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

Фото Джошуа Сортино на Unsplash

Создание класса позволяет создавать новые экземпляры типа объекта. Каждый экземпляр класса может иметь разные атрибуты и методы. Таким образом, использование класса позволит нам создать экземпляр с атрибутами и несколькими функциями матрицы. Например, если A = [[2,1],[2,3]], B = [[0,1],[2,1]], A + B должны дать нам матрицу [[2,3] ,[4,4]].

__method__ — частный метод. Несмотря на то, что вы не можете вызвать закрытый метод напрямую, эти встроенные методы в классе в Python сообщат компилятору, к какому из них обращаться, когда вы выполняете определенную функцию или операцию. Вам просто нужно использовать правильный метод для вашей цели.

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

Создать и распечатать объект Matrix

Чего мы хотим достичь с помощью нашего класса ниже

 >>> A = Matrix(dims=(3,3), fill=1.0) 
>>> print(A )
------------- выход -------------
| 1.000, 1.000, 1.000|
| 1.000, 1.000, 1.000|
| 1.000, 1.000, 1.000|
----------------------------------

Итак, мы хотим создать объект Matrix с параметрами это размер и заполнить .

 class Matrix: 

def __init__(self, dims, fill):
self. rows = dims[0]
self.cols = dims[1]
self.A = [[fill] * self.cols for i in range(self.rows)]

Мы используем __init__ в качестве конструктора для инициализации атрибутов нашего класса (строки, столбцы и матрица A). Строки и столбцы назначаются первым и вторым измерениями матрицы. Матрица A создается с fill в качестве значений и self.cols и self.строки как форму матрицы.

Мы также должны создать метод __str__ , который позволит нам печатать в читаемом формате, как указано выше.

 def __str__(self): 

m = len(self.A) # Получить первое измерение

mtxStr = ''

mtxStr += '------------- output --- ----------\n'

для i в диапазоне (m):

mtxStr += ('|' + ', '.join( map(lambda x:'{0:8.3f} '.format(x), self.A[i])) + '|\n')

mtxStr += '----------------------- -----------' return mtxStr

Масштабирование и добавление матрицы

Цель:

Стандартное сложение матрицы-матрицы

 >>> A = Matrix(dims=(3,3), fill= 1. 0) 
>>> B = Matrix(dims=(3,3), fill=2.0)
>>> C = A + B
>>> print( C )
---------- --- вывод -------------
| 3.000, 3.000, 3.000|
| 3.000, 3.000, 3.000|
| 3.000, 3.000, 3.000|
----------------------------------

Масштабирующее сложение матрицы (точечное)

 >>>A = Matrix(dims=(3,3), fill=1.0) 
>>> C = A + 2.0
>>> print( C )
------------- вывод --- ----------
| 3.000, 3.000, 3.000|
| 3.000, 3.000, 3.000|
| 3.000, 3.000, 3.000|
----------------------------------

Мы используем метод __add__ для выполнения правильного сложения.

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

 def __radd__(self, other): 
return self.__add__(other)

Точечное умножение

Цель:

Матрично-матричное точечное умножение

 >>> A = Matrix(dims=(3,3), заполнить=1. 0) 
>>> B = Matrix(dims=(3,3), fill=2.0)
>>> C = A * B
>>> print( C )
---------- --- вывод -------------
| 2.000, 2.000, 2.000|
| 2.000, 2.000, 2.000|
| 2.000, 2.000, 2.000|
----------------------------------

Масштабирующая матрица Точечное умножение

 >>> A = Матрица (dims=(3,3), fill=1.0) 
>>> C = 2.0 * A
>>> C = A * 2.0
>>> print( C )
---------- --- вывод -------------
| 2.000, 2.000, 2.000|
| 2.000, 2.000, 2.000|
| 2.000, 2.000, 2.000|
----------------------------------

Используйте метод __mul__ и метод __rmul__ для выполнения слева

Стандартное матричное умножение

Цель:

 >>> A = Matrix(dims=(3,3), fill=1.0) 
>>> B = Matrix(dims=(3, 3), fill=2.0)
>>> C = A @ B
>>> print( C )
------------- вывод ----------- --
| 6.000, 6.000, 6.000|
| 6.000, 6.000, 6.000|
| 6.000, 6. 000, 6.000|
----------------------------------

Умножение матриц может быть выполнено специальным методом __matmul__ для умножения матриц.

Иметь доступ и устанавливать записи

Цель:

 >>> A = Matrix(dims=(3,3), fill=1.0) 
>>> A[i,j]
>>> A[i, j] = 1,0

Используйте метод __setitem__ , чтобы установить значение для индексов матрицы, и используйте метод __getitem__ , чтобы получить значение для индексов матрицы.

Собираем все вместе

После создания класса Matrix пришло время превратить его в модуль. Переименуйте текст, содержащий класс, в __init__.py . Создайте папку под названием Matrix . Поместите main.py и другой файл с именем linearAlgebra в эту папку. Поместите файл __init__.py в файл linearAlgebra .

Папка Matrix содержит main.py и linearAlgebraFolder linearAlgebra содержит __init__. py

Используйте main.py для импорта и использования нашего класса Matrix.

Отлично! Вы узнали, как создать матричный класс с нуля. В классе Python есть и другие методы, которые позволят вам добавить дополнительные функции для вашей матрицы. Поскольку у вас есть базовые знания о создании класса, вы можете создать свою собственную версию Matrix, которая соответствует вашим интересам. Не стесняйтесь экспериментировать с кодом для этой статьи в этом репозитории Github.

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

Пометьте этот репозиторий звездочкой, если хотите проверить коды всех статей, которые я написал. Следуйте за мной на Medium, чтобы быть в курсе моих последних статей по науке о данных, таких как:

Построение матрицы путаницы с нуля | Ашик Шаффи

Я работал над этим курсом под названием Сертификат разработчика TensorFlow в 2021 году: от нуля до мастерства, здесь мы должны построить матрицу путаницы, которая могла бы обрабатывать вероятности прогнозирования из сигмовидной функции активации.

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

Что такое матрица путаницы? Зачем нам это нужно?

Как часто вы путаетесь в вещах? И чтобы понять, что нас запутало, мы обычно успокаиваемся и думаем о том случае, когда мы запутались.

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

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

Курс ZTM TensorFlow, модуль 3

Хорошо, мы получили представление о том, зачем он нам нужен и как его использовать наилучшим образом. Пришло время разобрать приведенный выше код и понять, что они делают, это поможет нам создать его с нуля.

Прежде чем перейти к коду, на Scikit-learn существует функция, которая делает то же самое, но не может работать с сочетанием двоичных и непрерывных целей.

Ошибка, которую мы должны исправить

Выходные данные, полученные из выходного слоя ( сигмоид ), например, представлены в вероятностях, а не в двоичном формате ( 9.8526537e-01 ), они представлены в форме вероятности предсказания .

TensorFlow не предлагает нам plot_confusion_matrix , как у scikit-learn, но мы можем смешать функциональность scikit-learn и добавить собственную масалу, чтобы исправить ошибку выше и придумать функцию, которая может нам пригодиться. во время.

Давайте начнем с первого блока кода,

  • Во-первых, мы устанавливаем figsize по умолчанию .
  • Используя функцию матрицы путаницы из scikit-learn, мы сохраняем наши результаты в матричном формате.
 # Вывод массива Confusion Matrix([[99, 1], 
[ 1, 99]])

Наш вывод выглядит хорошо, но мы должны нормализовать их, чтобы сделать его более похожим на scikit-learn, взламывая код :

  • cm.astype(‘float’) → Преобразование целого числа в число с плавающей запятой.
  • см.сумма(ось = 1) → Возьмем сумму по заданной оси (столбец).
  • [: , np.newaxis] → расширяет массив, добавляя одно измерение.

Хорошо, давайте соберем их вместе,

Ниже приведен вывод приведенного выше блока кода,

 [100 100] 

Размер массива: 1,

***** Расширение размерности массива * *****
[[100]
[100]]

****** Нормализация матрицы путаницы ******

После нормализации или матрицы путаницы: [[0.99 0.01]
[0. 01 0.99]]

Следующий блок кода,

Здесь мы хотим начать визуализировать вещи, помните, что наша главная цель — воссоздать функциональность scikit-learn, которая могла бы решить наша ошибка.

  • plt.subplots() → возвращает кортеж (рисунок, объекты осей).
  • ax.matshow() → Строит двумерную матрицу, мы можем добавлять цвета внутри в качестве аргументов.
  • fig.colorbar() → Отображение цветной полосы.

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

Вывод приведенного выше блока кода

Теперь мы должны установить метки на нашем графике, получив количество классов, которые у нас есть сейчас. В нашем случае мы имеем дело с бинарной классификацией, так что это будет 2 класса (0, 1).

  • cm.shape[0] → возвращает 2
  • np.arange(cm.shape[0]) → генерирует список меток (0,1)
 Метки будут выглядеть следующим образом: [0 1] 

Я не буду объяснять маркировку части осей, так как есть очень основы matplotlib.

  # Метка осей  
ax.set(title = 'Матрица путаницы',
xlabel = 'Предсказанная метка',
ylabel = 'Истинная метка',
xticks = np.arange(n_classes),
yticks = n pyticks .arange(n_classes) ,
xticklabels = labels ,
yticklabels = labels)

В следующем блоке кода мы будем устанавливать размер текста заголовка, оси x и оси y, кроме того, есть существующий размер по умолчанию.

  • .set_size() → помогает установить размер
 50.0 

Если мы посмотрим на матрицу путаницы sklearn, у нас будут разные цветовые оттенки/цветовые пороги для разных результатов. Теперь мы делаем то же самое здесь, настройка графика зависит от оценки (tp,tn,fp, fn), она обеспечит цветовые оттенки.

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

Все, что нам нужно сделать сейчас, это найти способ ввести эти значения в матричный график. Здесь у нас есть 2 класса/бинарные задачи, наша матрица будет просто (2×2), когда метки увеличиваются, поэтому размер матрицы увеличивается.

  • itertools.product() → выполняет итерацию и получает возможные результаты нашего ввода

Выход будет декартовым произведением (или) возможными результатами цели.

 0 0 
0 1
1 0
1 1

Теперь с помощью itertools нанесите тексты в каждую ячейку матрицы. Приведенный ниже блок кода выполнит свою работу.

  • (horizontalalignment = ‘center’) → мы хотим, чтобы текст выравнивался по центру каждой ячейки.
  • цвет → И задаем цвет нашего текста в зависимости от порога цвета ячейки нашей матрицы.
  • Текст графика будет белым, если порог больше порога ( 99 ), тогда как если он меньше порога, цвет текста будет черным.
  • Наконец, мы устанавливаем размер текста 15.
  • plt. text() → Мы упомянули формат, в котором мы хотим, чтобы наш текст был.

Мы запускаем это в итерации для возможных результатов наших целей, это дает нам странно выглядящий график,

И мы сломали всю plot_confusion_matrix() функцию, и вызов функции выведет нам хороший Выглядит матрица путаницы, как показано ниже,

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

Этот сюжет хорошо работает и с мультиклассовой классификацией, он может включать больше классов и по-прежнему работает как драгоценный камень. Оставьте комментарий, если у вас есть какие-либо вопросы.

А пока хорошего дня!

Определитель матрицы с нуля с использованием Python

Несколько дней назад я изучал идеи реализации инверсии матриц с нуля с помощью Python. Существуют десятки алгоритмов обращения матриц, но тот, который я обычно использую, включает разложение исходной матрицы на две другие матрицы. И есть несколько алгоритмов разложения матриц; Алгоритм Краута — мой обычный выбор. См. https://jamesmccaffrey.wordpress.com/2021/12/24/matrix-decomposition-using-python/.

Одним из интересных побочных эффектов разложения матриц является то, что определитель матрицы можно получить, умножив элементы объединенной матрицы Нижнего и Верхнего разложения. Поэтому я решил написать детерминантную функцию.

определение мат_детерминант (м):
  п = длина (м)
  если п == 2:
    а = м[0][0]; б = м [0] [1]
    с = м [1] [0]; д = м [1] [1]
    возврат (а * г) - (б * с)

  если п == 3:
    а = м[0][0]; б = м[0][1]; с = м [0] [2]
    д = м [1] [0]; е = м[1][1]; е = м [1] [2]
    г = м [2] [0]; ч = м[2][1]; я = м [2] [2]
    вернуть (a * ((e*i)-(f*h))) - \
           (b * ((d*i)-(f*g))) + \
           (c * ((d*h)-(e*g)))

  (переключение, свет, пермь) = mat_decompose (м)
  print("\nОбъединенная матрица разложения LU: ")
  печать (люм)
  print("Переключатель декомпозиции: %d " % toggle)

  результат = переключатель # -1 или +1
  для я в диапазоне (n):
    результат *= люм[i][i]
  вернуть результат
 

Функция проверяет, имеет ли исходная матрица размер 2×2, поскольку для разложения требуется размер 3×3 или больше. Функция проверяет 3×3 в целях эффективности, потому что декомпозиция очень сложна.

Моя демонстрация сгенерировала матрицу 4×4 со случайными значениями от -10,0 до +10,0:

[[ -1,6596 4,4065 -9,9977 -3,9533]
 [-7,0649 -8,1532 -6,2748 -3,0888]
 [-2,0647 0,7763 -1,6161 3,7044]
 [-5,9110 7,5623 -9,4522 3,4094]]
 

Эмо вычислил определитель, используя мою функцию с нуля и библиотечную функцию numpy.linalg.det(), и обе они были одинаковыми: -1553.31819174. Моя функция отображала вычисленную матрицу разложения LU и переключала:

ЛУ =
[[ -7,0649 -8,1532 -6,2748 -3,0888]
 [0,8367 14,3839 -4,2023 5,9936]
 [ 0,2349 0,4395 -6,6768 -5,8620]
 [ 0,2922 0,2196 -0,1708 2,2893]]
переключить = -1
 

Определитель был найден путем умножения -1 * -7,0649 * 14,3839 * -6,6768 * 2,2893.

Хорошее развлечение и хорошее ежедневное упражнение по программированию на Python.



Два случайных изображения из интернета по запросу «детерминант». Фотография слева имеет смысл — видеоигра в разработке. А вот фото справа — флешмоб с воровством пальто в Сан-Франциско — к «детерминанте» вроде бы никакого отношения не имеет. Может быть, какая-то связь между расой и преступностью как детерминантами преступного поведения?


Демонстрационный код. Замените «lt» (меньше чем), «gt» и т. д. символами.

# matrix_det_scratch.py

импортировать numpy как np

def random_matrix (n, rnd, lo, hi):
  # nxn матричных случайных значений в [lo,hi)
  возврат (привет - ло) * рнд.random_sample((n,n)) + ло

определение мат_детерминант (м):
  п = длина (м)
  если п == 2:
    а = м[0][0]; б = м [0] [1]
    с = м [1] [0]; д = м [1] [1]
    возврат (а * г) - (б * с)

  если п == 3:
    а = м[0][0]; б = м[0][1]; с = м [0] [2]
    д = м [1] [0]; е = м[1][1]; е = м [1] [2]
    г = м [2] [0]; ч = м[2][1]; я = м [2] [2]
    вернуть (a * ((e*i)-(f*h))) - \
           (b * ((d*i)-(f*g))) + \
           (c * ((d*h)-(e*g)))

  (переключение, свет, пермь) = mat_decompose (м)
  print("\nОбъединенная матрица разложения LU: ")
  печать (люм)
  print("Переключатель декомпозиции: %d " % toggle)

  результат = переключатель # -1 или +1
  для я в диапазоне (n):
    результат *= люм[i][i]
  вернуть результат

определение mat_decompose (м):
  # LU-разложение Краута
  toggle = +1 # даже
  п = длина (м)
  люм = нп. копия(м)
  пермь = np.arange (n)

  для j в диапазоне (0,n-1): # по столбцу. примечание n-1
    max = np.abs(lum[j][j]) # или lum[i,j]
    пив = j

    для i в диапазоне (j+1,n):
      xij = np.abs(lum[i][j])
      если xij "gt" max:
        макс = xij; пив = я

    if piv != j: # поменять местами строки j, piv
      lum[[j,piv]] = lum[[piv,j]] # специальный синтаксис

      t = perm[piv] # предметы обмена
      допуск [piv] = допуск [j]
      пром[j] = т

      переключить = -переключить

    xjj = люм[j][j]
    если нп.abs(xjj) "gt" 1.0e-5: # если xjj != 0.0
      для i в диапазоне (j+1,n):
        xij = люм[i][j] / xjj
        люм[i][j] = xij
        для k в диапазоне (j+1,n):
          люм[i][k] -= xij * люм[j][k]

  возврат (переключение, люм, пермь)

деф основной():
  print("\nНачать определитель матрицы с нуля Python")
  np.set_printoptions(formatter={'float': '{: 8.4f}'.format})
  rnd = np.random.RandomState(1)

  m = random_matrix(4, круг, -10,0, +10,0)
  распечатать("\нм = ")
  печать (м)

  d1 = мат_детерминант (м)
  д2 = нп. linalg.det(m)
  print("\nОпределитель с нуля = %0.8f " % d1)
  print("Определитель из np.linalg = %0.8f " % d2)

  print("\nЗавершить демонстрацию")

если __name__ == "__main__":
  основной()
 

Нравится:

Нравится Загрузка…

Родственные

Произошла ошибка при настройке пользовательского файла cookie

Этот сайт использует файлы cookie для повышения производительности. Если ваш браузер не принимает файлы cookie, вы не можете просматривать этот сайт.


Настройка браузера на прием файлов cookie

Существует множество причин, по которым файл cookie не может быть установлен правильно. Ниже приведены наиболее распространенные причины:

  • В вашем браузере отключены файлы cookie. Вам необходимо сбросить настройки браузера, чтобы принять файлы cookie, или спросить вас, хотите ли вы принимать файлы cookie.
  • Ваш браузер спрашивает, хотите ли вы принимать файлы cookie, и вы отказались. Чтобы принять файлы cookie с этого сайта, нажмите кнопку «Назад» и примите файл cookie.
  • Ваш браузер не поддерживает файлы cookie. Попробуйте другой браузер, если вы подозреваете это.
  • Дата на вашем компьютере в прошлом. Если часы вашего компьютера показывают дату до 1 января 1970 г., браузер автоматически забудет файл cookie. Чтобы это исправить, установите правильное время и дату на своем компьютере.
  • Вы установили приложение, которое отслеживает или блокирует установку файлов cookie. Вы должны отключить приложение при входе в систему или проконсультироваться с системным администратором.

Почему этому сайту требуются файлы cookie?

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


Что сохраняется в файле cookie?

Этот сайт не хранит ничего, кроме автоматически сгенерированного идентификатора сеанса в файле cookie; никакая другая информация не фиксируется.

Как правило, в файле cookie может храниться только информация, которую вы предоставляете, или выбор, который вы делаете при посещении веб-сайта. Например, сайт не может определить ваше имя электронной почты, если вы не решите ввести его. Разрешение веб-сайту создавать файлы cookie не дает этому или любому другому сайту доступ к остальной части вашего компьютера, и только сайт, создавший файл cookie, может его прочитать.

Microsoft Web Matrix – Начните с нуля

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

Что дает мне право на бесплатный перевод?

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

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

Полные передачи cPanel — это количество включенных передач cPanel на cPanel.

Макс. Ручные переводы — это максимальное количество ручных переводов, включенных в вашу учетную запись.

Всего бесплатных переводов — это общее количество веб-сайтов, которые мы переместим для вас.

0 9 9 05 9
Тип счета Всего бесплатных переводов Полные переводы cPanel Макс.Ручные переводы
1 1 2 1 1
30 2 30
? VPS Неограниченные 1 Неограниченное количество 10 на VPS уровня
? Выделенные (Basic) Unlimited 1 Неограниченные 2 75
? Выделенные (стандартные, элитные, про ) Неограниченное количество 1 Неограниченное количество 2 100
100

1 , в то время как мы можем сделать безлимитный CPanel в CPanel Transfer для вас, в зависимости от вашей учетной записи, у вас будет ограниченное количество ручных передач .

2 Полный перенос cPanel включает все домены, дополнительные домены, субдомены и настройки cPanel. Это также будет включать ваши электронные письма и учетные записи электронной почты. Обратите внимание, что для этого требуется, чтобы генератор резервных копий cPanel вашего старого хоста был активен.

Несколько примеров: учетная запись реселлера алюминия включает до 30 бесплатных переводов. Из этих 30 у вас может быть 20 переносов с cPanel на cPanel и 10 переносов вручную, или любая комбинация этих двух, что в сумме дает 30 или менее веб-сайтов.Другой пример: выделенный сервер Pro включает неограниченную передачу cPanel на cPanel, это означает, что вы можете переместить 150 сайтов (или даже больше). Кроме того, поскольку существует неограниченное общее количество переводов, вы можете использовать до 100 ручных переводов.

Для получения дополнительной информации см. нашу Статью о поддержке переносов, свяжитесь с нашим отделом переводов по адресу [email protected] com или позвоните по телефону 866.96.GATOR

О чем следует помнить при создании моделей машинного обучения с нуля | Намрата Танвани | Analytics Vidhya

Многие новички в машинном обучении предпочитают начинать с библиотеки scikit-learn, и мой случай тоже не исключение.Но они склонны забывать о важности создания моделей с нуля. Начав с нуля, вы получите реальные ответы. Как умножить веса и характеристики? А как насчет предвзятости? В самом деле, что такое предвзятость? Как выполнить сигмовидную функцию? Как рассчитать убыток? Как найти оптимизированные значения весов? Если у вас были эти вопросы, значит, вы на правильном пути, приятель! И пора начинать с чистого листа!

Итак, одним из наиболее важных инструментов, которые вы будете иметь при себе, является библиотека NumPy.Это чрезвычайно мощная библиотека для быстрого вычисления сложных вычислений. Думайте об этом как о «математической» библиотеке, но для огромных матриц она намного мощнее и обширнее.

Здесь я буду обсуждать не основы NumPy, а методы решения проблем, которые оказались полезными для меня при создании моделей с нуля с помощью NumPy.

Массив Rank-1

При определении формы массива вы часто будете сталкиваться с чем-то похожим на “(5,)”.Это называется «массив ранга 1». Это не ведет себя ни как вектор-строка, ни как вектор-столбец. Таким образом, всегда полезно использовать функцию assert . Эта функция используется, чтобы убедиться, что условие, указанное внутри, верно. Если это не так, он вызовет AssertionError, , который нам не нужен. Рассмотрим следующий пример, чтобы лучше понять:

 import numpy as np 
a = np.array([12,3,4,55,6])

На первый взгляд форма вектора a выглядит так (5 ,1) или, может быть, (1,5) (Боже, я надеюсь, что это не окажется очередной дилеммой Ямми/Лорел или, что еще хуже, сине-черным платьем!).

, потому что двусмысленность в программировании? правильно?

Итак, мы используем функцию assert , чтобы убедиться, что это именно так:

 assert(a.shape==(5,1)) 

Приведенный выше код выдает ошибку AssertionError. Это потому, что форма вектора a не равна (5,1).

 print(a.shape)(5,) 

Решение:

 a = a.reshape((5,1)) 
print(a.shape)
assert(a.shape= =(5,1))(5, 1)

Вывод отображается без каких-либо ошибок.Всегда не стесняйтесь использовать метод reshape , даже если он может показаться излишним, так как он может творить чудеса!

Кроме того, вектор a в конечном итоге выглядит так, если вам интересно.

 print(a)[[12] 
[ 3]
[ 4]
[55]
[ 6]]

Итак, я думаю, это «Лорел». Ну, не смотри на это слишком много, это может стать «Ямми»!

Широковещание

Существует очень простая концепция, называемая широковещанием. Проще говоря, он рассказывает, как NumPy будет обрабатывать массивы разных форм.Итак, если вы столкнулись с ошибкой, которая гласит: «Операнды не могут быть переданы вместе с формами (4,2) (2,2)», думаю, вам повезло, что вы здесь. Эта ошибка возникает, когда я пытаюсь сделать следующее:

 mat1 = np.array([[1,2], 
[9,8],
[3,4],
[5,6]])
mat2 = np.array([[3,5],
[10,2]])
ans = mat1 + mat2

Если бы mat1 и mat2 не были массивами NumPy и были просто вложенными списками, mat2 был бы были объединены в mat1 , и это привело бы к чему-то вроде этого:

 [[1, 2], [9, 8], [3, 4], [5, 6], [3, 5], [10, 2]] 

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

 mat1 = np.array([[1,2], 
[9,8],
[3,4],
[5,6]])
mat2 = np.array ([[3,5]])
ans = mat1 + mat2
print(ans)[[ 4 7]
[12 13]
[ 6 9]
[ 8 11]]

Обратите внимание на порядок mat2 теперь это (1,2) . Мы получаем результат и без ошибок из-за трансляции.Проще говоря, mat2 повторяется до тех пор, пока его порядок не становится таким же, как mat1 , и добавляется к mat1 , давая приведенный выше результат. Итак, условием трансляции в матрицах является то, что одно из слагаемых должно быть вектором, представляющим собой одномерный массив (Нет, не полосу One Direction) или целым числом. Ниже приведена операция с целым числом:

 mat1 = np.array([[1,2], 
[9,8],
[3,4],
[5,6]])
b = 12
ans = mat1 + b
print(ans)[[13 14]
[21 20]
[15 16]
[17 18]]

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

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

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

 первый = np.array([[2,2],[5,6],[4,3],[3,1]]) 
второй = np.array([[3,7, 1],[5,5,2]])
print(first.shape, second.shape)(4, 2) (2, 3)
------

Обратите внимание, что между ними общего.

Угадайте порядок матрицы результата .Правильный! Это (4,3).

 import numpy 
result = np.dot(first,second)
print(result)[[16 24 6]
[45 65 17]
[27 43 10]
[14 26 5]]

We’ мы использовали np. dot() , так как это матричное умножение. Использование « *» от до может привести к ошибке широковещательной передачи, о которой мы говорили ранее.

При решении задачи вам может быть дана матрица входных признаков X порядка, скажем, (5,3) и матрица весов w порядка (1,3).Сразу может показаться, что их скалярное произведение невозможно, но что, если мы используем транспонирование w . Это изменило бы форму w на (3,1).

Приведу пример:

 X = np.array([[1,2,3], 
[6,5,4],
[7,8,9],
[12,11,10 ],
[13,14,15]])w = np.array([[2,6,4]])
w_tp = wT
вывод = np.dot(X,w_tp)
print(output)[[ 26]
[ 58]
[ 98]
[130]
[170]]

w_tp сохраняет транспонирование w , то есть:

 print(w_tp)[902] 600 [4]] 

Вы также можете использовать np. transpose(w) , чтобы найти транспонирование w.

Последнее , но не менее важное: создание вещей с нуля потребует времени. Но все это того стоит, когда вы видите, что ваша модель дает 60% точности (*тайно плачет от боли*).

Не начинать с нуля | Трики

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

Как это доказать? Очевидный подход состоит в том, чтобы сразу же погрузиться внутрь. Если наша обратимая матрица, то пусть она будет небольшой положительной константой (которая будет выбрана позже) и попытаемся доказать, что любая матрица, такая что для каждого и, также обратима. Но как найти обратную?

Мы только что поработали непосредственно с определениями «открытого множества» и «обратимого». Однако, если мы готовы использовать немного теории, задача значительно упрощается.Прежде всего, каковы основные факты об открытых множествах? Во-первых, они являются дополнениями к замкнутым множествам. Другой заключается в том, что прообраз открытого множества относительно непрерывной функции открыт. Если мы воспользуемся первым из них, мы превратим нашу задачу в задачу показать, что множество необратимых матриц замкнуто. Затем мы могли бы использовать определение последовательности замкнутых множеств и попытаться доказать, что предел необратимых матриц необратим. Но, похоже, не существует очевидного способа сделать это — по крайней мере, пока.Если мы подумаем о втором свойстве открытых множеств, то увидим, что один из способов доказать, что наше множество открыто, состоит в том, чтобы найти непрерывную функцию от множества всех матриц к некоторому другому пространству, такое что существует открытое подмножество с равными к множеству всех обратимых матриц.

Не сразу понятно, что это за функция, поэтому обратимся к слову «обратимая». Какие важные факты мы знаем об обратимых матрицах? Одно из них состоит в том, что матрица обратима тогда и только тогда, когда ее ранг равен .Во-вторых, оно обратимо тогда и только тогда, когда его определитель не равен нулю.

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

Таким образом, окончательное доказательство чрезвычайно просто: обратимые матрицы являются прообразом открытого множества относительно непрерывной функции «детерминант». Как мы нашли это доказательство? Не начав с нуля: вместо этого мы потратили короткое время на обдумывание общеизвестных фактов, связанных с понятиями, которые мы пытались связать.

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

.

Оставить комментарий

Ваш адрес email не будет опубликован.