Given two matrix A[][] and B[][] of same order m*n. The task is to find the intersection of both matrix as C, where:
- Cij = Aij if Aij = Bij
- C = “*”, otherwise.
Examples:
Input : A[N][N] = {{2, 4, 6, 8}, {1, 3, 5, 7}, {8, 6, 4, 2}, {7, 5, 3, 1}}; B[N][N] = {{0, 4, 3, 8}, {1, 3, 5, 7}, {8, 3, 6, 2}, {4, 5, 3, 4}}; Output : * 4 * 8 1 3 5 7 8 * * 2 * 5 3 *
As intersection of two set is a set which includes common elements to both set, similarly intersection of two matrix will include only corresponding common element and place “*” at the position of rest unmatching elements.
For finding the intersection of both matrix simply iterate over their size and print * if element at particular position in both matrix are not equal else print the element.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
#define N 4
#define M 4
using
namespace
std;
void
printIntersection(
int
A[][N],
int
B[][N])
{
for
(
int
i = 0; i < M; i++) {
for
(
int
j = 0; j < N; j++) {
if
(A[i][j] == B[i][j])
cout << A[i][j] <<
" "
;
else
cout <<
"* "
;
}
cout <<
"n"
;
}
}
int
main()
{
int
A[M][N] = { { 2, 4, 6, 8 },
{ 1, 3, 5, 7 },
{ 8, 6, 4, 2 },
{ 7, 5, 3, 1 } };
int
B[M][N] = { { 2, 3, 6, 8 },
{ 1, 3, 5, 2 },
{ 8, 1, 4, 2 },
{ 3, 5, 4, 1 } };
printIntersection(A, B);
return
0;
}
Java
import
java.io.*;
class
GFG {
static
int
N =
4
;
static
int
M =
4
;
static
void
printIntersection(
int
A[][],
int
B[][])
{
for
(
int
i =
0
; i < M; i++) {
for
(
int
j =
0
; j < N; j++) {
if
(A[i][j] == B[i][j])
System.out.print(A[i][j] +
" "
);
else
System.out.print(
"* "
);
}
System.out.println(
" "
);
}
}
public
static
void
main (String[] args) {
int
A[][] = { {
2
,
4
,
6
,
8
},
{
1
,
3
,
5
,
7
},
{
8
,
6
,
4
,
2
},
{
7
,
5
,
3
,
1
} };
int
B[][] = { {
2
,
3
,
6
,
8
},
{
1
,
3
,
5
,
2
},
{
8
,
1
,
4
,
2
},
{
3
,
5
,
4
,
1
} };
printIntersection(A, B);
}
}
Python3
N, M
=
4
,
4
def
printIntersection(A, B) :
for
i
in
range
(M) :
for
j
in
range
(N) :
if
(A[i][j]
=
=
B[i][j]) :
print
(A[i][j], end
=
" "
)
else
:
print
(
"* "
, end
=
" "
)
print
()
if
__name__
=
=
"__main__"
:
A
=
[ [
2
,
4
,
6
,
8
],
[
1
,
3
,
5
,
7
],
[
8
,
6
,
4
,
2
],
[
7
,
5
,
3
,
1
] ]
B
=
[ [
2
,
3
,
6
,
8
],
[
1
,
3
,
5
,
2
],
[
8
,
1
,
4
,
2
],
[
3
,
5
,
4
,
1
] ]
printIntersection(A, B)
C#
using
System;
class
GFG {
static
int
N = 4;
static
int
M = 4;
static
void
printIntersection(
int
[,]A,
int
[,]B)
{
for
(
int
i = 0; i < M; i++) {
for
(
int
j = 0; j < N; j++) {
if
(A[i,j] == B[i,j])
Console.Write(A[i,j] +
" "
);
else
Console.Write(
"* "
);
}
Console.WriteLine(
" "
);
}
}
public
static
void
Main () {
int
[,]A = { { 2, 4, 6, 8 },
{ 1, 3, 5, 7 },
{ 8, 6, 4, 2 },
{ 7, 5, 3, 1 } };
int
[,]B = { { 2, 3, 6, 8 },
{ 1, 3, 5, 2 },
{ 8, 1, 4, 2 },
{ 3, 5, 4, 1 } };
printIntersection(A, B);
}
}
PHP
<?php
function
printIntersection(
$A
,
$B
)
{
$N
= 4;
$M
= 4;
for
(
$i
= 0;
$i
<
$M
;
$i
++)
{
for
(
$j
= 0;
$j
<
$N
;
$j
++)
{
if
(
$A
[
$i
][
$j
] ==
$B
[
$i
][
$j
])
echo
$A
[
$i
][
$j
] .
" "
;
else
echo
"* "
;
}
echo
"n"
;
}
}
$A
=
array
(
array
(2, 4, 6, 8 ),
array
(1, 3, 5, 7 ),
array
(8, 6, 4, 2 ),
array
(7, 5, 3, 1 ) );
$B
=
array
(
array
(2, 3, 6, 8 ),
array
(1, 3, 5, 2 ),
array
(8, 1, 4, 2 ),
array
(3, 5, 4, 1 ) );
printIntersection(
$A
,
$B
);
?>
Javascript
<script>
var
N = 4
var
M = 4
function
printIntersection( A, B)
{
for
(
var
i = 0; i < M; i++) {
for
(
var
j = 0; j < N; j++) {
if
(A[i][j] == B[i][j])
document.write( A[i][j] +
" "
);
else
document.write(
"* "
);
}
document.write(
"<br>"
);
}
}
var
A = [ [ 2, 4, 6, 8 ],
[ 1, 3, 5, 7 ],
[ 8, 6, 4, 2 ],
[ 7, 5, 3, 1 ] ];
var
B = [ [ 2, 3, 6, 8 ],
[ 1, 3, 5, 2 ],
[ 8, 1, 4, 2 ],
[ 3, 5, 4, 1 ] ];
printIntersection(A, B);
</script>
Output
2 * 6 8 1 3 5 * 8 * 4 2 * 5 * 1
Complexity Analysis:
- Time Complexity: O(M * N)
- Auxiliary Space: O(1)
Last Updated :
09 Sep, 2022
Like Article
Save Article
Нахождение дополнения, суммы и пересечения подпространств
Нахождение алгебраического дополнения подпространства
Для заданного подпространства требуется найти алгебраическое дополнение подпространства , т.е. такое подпространство , что .
В зависимости от способа описания подпространства , используем одно из следующих двух утверждений.
1. Если подпространство задано как линейная оболочка столбцов матрицы , то множество решений однородной системы является его алгебраическим дополнением , т.е.
(8.16)
2. Если подпространство задано как множество решений однородной системы уравнений с неизвестными, то линейная оболочка столбцов транспонированной матрицы является его алгебраическим дополнением , т.е.
(8.17)
где — i-й столбец матрицы .
Разумеется, в (8.16) и (8.17) указано одно из возможных алгебраических дополнений подпространства (см. свойство 3 алгебраических дополнений подпространств).
Докажем сначала справедливость (8.16) в одномерном случае , а потом в общем. Пусть — одномерное подпространство , — ненулевой столбец. Найдем алгебраическое дополнение подпространства . Рассмотрим уравнение в координатной форме: . Множество решений однородной системы, состоящей из одного уравнения, образует подпространство размерности . Найдем пересечение . Подставляя элемент линейной оболочки в уравнение , получаем , что возможно только при , так как . Следовательно, элемент из принадлежит подпространству только тогда, когда — нулевой столбец, т.е. . Учитывая, что , заключаем, что — алгебраическое дополнение подпространства в .Таким образом,
(8.18)
Учитывая (8.18), докажем (8.16) в общем случае . Представим в виде суммы , где . Из (8.15) следует, что . Согласно (8.18), множество решений однородной системы, состоящей из одного уравнения, дополняет до всего пространства . Пересечение множеств решений отдельных уравнений дает, разумеется, множество решений системы этих уравнений. Поэтому , что и требовалось доказать. Утверждение (8.17) доказывается аналогично, используя (8.18).
Пример 8.10. Найти алгебраическое дополнение подпространства в пространстве многочленов не более, чем 3-й степени.
Решение. Сначала нужно переформулировать задачу для арифметического пространства (см. следствие теоремы 8.3 об изоморфизме конечномерных пространств). Для этого возьмем в стандартный базис . Пространство изоморфно . Найдем координаты многочленов и в стандартном базисе. Раскладывая по базису, получаем:
т.е. многочлену соответствует координатный столбец — элемент пространства . Аналогично получаем координатный столбец для многочлена .
Таким образом, исходная задача сводится к следующей: требуется найти алгебраическое дополнение подпространства в пространстве . Используя правило (8.16), получаем, что — это множество решений системы , где , т.е. системы
Решаем ее методом Гаусса. Приводим матрицу системы к упрощенному виду, прибавляя ко второй строке первую, умноженную на (-1), поделив вторую строку на 5, а затем прибавив ее, умноженную на 2, к первой:
Базисные переменные , свободные — . Выражаем базисные переменные через свободные: . Находим фундаментальную систему решений. Подставляя стандартные наборы свободных переменных ( и ), получаем решения: , которые образуют фундаментальную систему решений и являются базисом алгебраического дополнения Полученный результат переносим в пространство многочленов. По координатному столбцу находим многочлен
Аналогично получаем . Искомое алгебраическое дополнение имеет вид
Проверим равенство . Для этого приравняем между собой линейные комбинации многочленов и
Преобразовывая, получаем
Чтобы это равенство выполнялось тождественно, все его коэффициенты должны быть равны нулю:
Ранг матрицы этой системы равен 4 (находится, например, методом Гаусса). Поэтому однородная система имеет только нулевое решение . Таким образом, равенство выполняется.
Нахождение алгебраической суммы подпространств
Для заданных подпространств и пространства требуется найти размерность и базис их алгебраической суммы . Рассмотрим методику решения этой задачи для двух случаев описания подпространств.
Пусть подпространства заданы линейными оболочками своих образующих (внутреннее описание): и . Тогда, приписывая к образующим одного подпространства образующие другого подпространства, получаем образующие суммы подпространств и
(8.19)
поскольку любой вектор имеет вид . Базис суммы можно найти как максимальную подсистему линейно независимых столбцов.
Пусть подпространства заданы как множества решений однородных систем уравнений (внешнее описание): и . Тогда, переходя к внутреннему описанию, сводим задачу к предыдущему случаю, а именно нужно выполнить следующие действия:
1) для каждой однородной системы и найти фундаментальные системы решений и соответственно. При этом получим и , где ;
2) по правилу (8.19) найти сумму .
Пример 8.11. Найти размерность и базис алгебраической суммы подпространств , если подпространство задано системой уравнений
подпространство — линейной оболочкой своих образующих:
Решение. Образующие подпространства были найдены в примере 8.9: , где . По правилу (8.19) получаем . Найдем базис этого подпространства как максимальную линейно независимую подсистему столбцов. Составляем из этих столбцов матрицу и приводим ее методом Гаусса к ступенчатому виду:
Первый, второй и четвертый столбцы полученной матрицы линейно независимы. Значит, соответствующие столбцы исходной матрицы так же линейно независимы (так как выполнялись элементарные преобразования только над строками). Поэтому они являются базисом и .
Нахождение пересечения подпространств
Для заданных подпространств и пространства требуется найти размерность и базис их пересечения . Рассмотрим методику решения этой задачи для двух случаев описания подпространств.
Пусть подпространства заданы как множества решений однородных систем уравнений (внешнее описание): и . Тогда, приписывая к системе , задающей одно подпространство, систему , задающую другое подпространство, получаем систему определяющую пересечение подпространств:
(8.20)
Базисом пересечения служит ее фундаментальная система решений.
Пусть подпространства и пространства заданы линейными оболочками своих образующих (внутреннее описание): и . Переходя от внутреннего описания подпространств к внешнему, можно свести задачу к предыдущему случаю. Однако удобнее сделать иначе. Пересечению принадлежат только такие , которые можно представить как равные между собой линейные комбинации столбцов и столбцов соответственно:
(8.21)
Представим второе равенство в (8.21) в матричном виде , где — матрицы, составленные из данных столбцов, — столбцы коэффициентов линейных комбинаций. Равенство можно рассматривать как одно родную систему уравнений с неизвестными и . Каждому решению этой системы соответствует вектор , при надлежащий пересечению . Однако, на практике удобнее вместо системы рассматривать однородную систему , решения которой обладают теми же свойствами (тогда вектор при надлежит пересечению .
Поэтому для нахождения пересечения подпространств и и базиса пересечения нужно выполнить следующие действия.
1. Составить блочную матрицу коэффициентов однородной системы уравнений , где матрицы образованы из заданных столбцов.
2. Для однородной системы с матрицей найти фундаментальную матрицу . Матрица имеет размеры , где .
3. Из первых строк матрицы составить матрицу . Столбцы матрицы содержат искомые коэффициенты линейных комбинаций (8.21).
4. Записать пересечение как линейную оболочку столбцов матрицы .
5. Найти базис пересечения как максимальную линейно независимую подсистему образующих .
Пример 8.12. Найти размерности и базисы суммы и пересечения подпространств , если они заданы линейными оболочками своих образующих: , где
Решение. Найдем базис и размерность суммы . Составим из данных столбцов блочную матрицу
Элементарными преобразованиями над строками приведем ее к ступенчатому виду:
По ступенчатому виду определяем, что первый, второй и четвертый столбцы линейно независимы. Следовательно, из 6 образующих подпространства максимальную линейно независимую подсистему составляют столбцы (в этих столбцах расположен базисный минор матрицы). Следовательно, эти столбцы служат базисом суммы: и . По ступенчатому виду матрицы можно также определить размерности подпространств. В блоке две ненулевых строки, следовательно, . Ненулевые строки блока В’ линейно независимы, следовательно, .
Найдем базис и размерность пересечения .
1. Первый пункт алгоритма выполнен выше: матрица однородной системы приведена к ступенчатому виду .
2. Находим фундаментальную систему решений (используя алгоритм, описанный в разд. 5.5). Приводим матрицу системы к упрощенному виду:
Базисные переменные: ; остальные переменные — свободные. Выражаем базисные переменные через свободные: . Придавая свободным переменным наборы значений
получаем линейно независимые решения
т.е. фундаментальная матрица имеет вид
3. Из первых трех строк матрицы составляем матрицу .
4. Вычисляем произведение
Столбцы этой матрицы являются образующими пересечения , где — нулевой столбец, .
5. Найдем базис пересечения . Для этого матрицу приводим к ступенчатому виду
По ступенчатому виду определяем, что последние два столбца матрицы линейно независимы. Следовательно, два столбца являются базисом пересечения и .
Проверим размерность пересечения подпространств, которую вычислим, используя формулу (8.13):
что совпадает с найденной ранее размерностью.
Пример 8.13. Найти размерности и базисы пересечения и суммы подпространств , если они заданы однородными системами уравнений:
Решение. Обозначим матрицы данных систем через и соответственно. По правилу (8.20) пересечение описывается однородной системой Найдем базис пересечения — фундаментальную систему решений этой однородной системы уравнений. Составляем матрицу системы и приводим ее к ступенчатому виду, а затем к упрощенному виду:
Базисные переменные: , свободная переменная — . Выражаем базисные переменные через свободную: . Фундаментальная система содержит одно решение , которое получаем, задавая . Следовательно, и .
Найдем теперь сумму . Фундаментальная система решений однородной системы была найдена в примере 8.9. Следовательно,
, где .
Найдем фундаментальную систему решений однородной системы . Для этого приводим матрицу системы к ступенчатому виду, а затем к упрощенному:
Базисные переменные: , свободные переменные: . Выражаем базисные переменные через свободные: . Фундаментальная система состоит из двух решений , которые находим, придавая свободным переменным стандартные наборы значений ( и ). Следователь но, и .
По правилу (8.19) находим сумму . Чтобы определить базис, составим из столбцов матрицу и приведем ее к ступенчатому виду:
Первые три столбца линейно независимы. Следовательно, и .
Проверим размерность суммы подпространств. По формуле (8.13) получаем
что совпадает с найденной ранее размерностью.
Нахождение относительных алгебраических дополнений подпространств
Пусть дана цепочка подпространств . Требуется найти относительное дополнение подпространства до подпространства .
Рассмотрим случай внешнего описания подпространств — как множеств решений однородных систем уравнений: и . Согласно (8.17) базис пространства образуют линейно независимые столбцы транспонированной матрицы . Тогда относительное дополнение составляют такие векторы , которые удовлетворяют системе . Если обозначить через фундаментальную матрицу системы , то линейно независимые столбцы матрицы являются максимальной системой векторов подпространства , линейно независимой над , т.е. базисом относительного дополнения.
На практике нахождение базиса удобнее производить, используя ступенчатые виды матриц и , согласно следующей методике.
1. Привести матрицы и при помощи элементарных преобразований строк к ступенчатому виду и удалить нулевые строки. В результате по лучим матрицы и модифицированного ступенчатого вида (строки каждой из этих матриц линейно независимые).
2. Найти фундаментальную матрицу однородной системы уравнений .
3. Вычислить матрицу . Ее столбцы образуют искомый базис .
Рассмотрим случай внутреннего описания подпространства как линейной оболочки своих образующих: . Согласно (8.16) множество решений системы уравнений (матрица составлена из образующих) является алгебраическим дополнением . Тогда множество решений системы является относительным дополнением , а ее фундаментальная система решений — базисом относительного дополнения.
Замечание 8.10. Способы описания подпространств комплексного линейного пространства, а также методы решения типовых задач аналогичны рассмотренным. В отличие от вещественного арифметического пространства вместо операции транспонирования матрицы в комплексном арифметическом пространстве нужно использовать операцию сопряжения матрицы.
Математический форум (помощь с решением задач, обсуждение вопросов по математике).
Если заметили ошибку, опечатку или есть предложения, напишите в комментариях.
Даны две матрицы A [] [] и B [] [] одного порядка m * n . Задача состоит в том, чтобы найти пересечение обеих матриц как C, где:
- C ij = A ij, если A ij = B ij
- C = «*», в противном случае.
Примеры:
Input : A[N][N] = {{2, 4, 6, 8}, {1, 3, 5, 7}, {8, 6, 4, 2}, {7, 5, 3, 1}}; B[N][N] = {{0, 4, 3, 8}, {1, 3, 5, 7}, {8, 3, 6, 2}, {4, 5, 3, 4}}; Output : * 4 * 8 1 3 5 7 8 * * 2 * 5 3 *
Поскольку пересечение двух наборов является набором, который включает в себя общие элементы для обоих наборов, аналогично пересечение двух матриц будет включать в себя только соответствующий общий элемент и помещать «*» в положение остальных несогласованных элементов.
Чтобы найти пересечение обеих матриц, просто выполните итерации по их размеру и выведите *, если элемент в определенной позиции в обеих матрицах не равен, иначе выведите элемент.
Ниже приведена реализация вышеуказанного подхода:
C ++
#include <bits/stdc++.h>
#define N 4
#define M 4
using
namespace
std;
void
printIntersection(
int
A[][N],
int
B[][N])
{
for
(
int
i = 0; i < M; i++) {
for
(
int
j = 0; j < N; j++) {
if
(A[i][j] == B[i][j])
cout << A[i][j] <<
" "
;
else
cout <<
"* "
;
}
cout <<
"n"
;
}
}
int
main()
{
int
A[M][N] = { { 2, 4, 6, 8 },
{ 1, 3, 5, 7 },
{ 8, 6, 4, 2 },
{ 7, 5, 3, 1 } };
int
B[M][N] = { { 2, 3, 6, 8 },
{ 1, 3, 5, 2 },
{ 8, 1, 4, 2 },
{ 3, 5, 4, 1 } };
printIntersection(A, B);
return
0;
}
Джава
import
java.io.*;
class
GFG {
static
int
N =
4
;
static
int
M =
4
;
static
void
printIntersection(
int
A[][],
int
B[][])
{
for
(
int
i =
0
; i < M; i++) {
for
(
int
j =
0
; j < N; j++) {
if
(A[i][j] == B[i][j])
System.out.print(A[i][j] +
" "
);
else
System.out.print(
"* "
);
}
System.out.println(
" "
);
}
}
public
static
void
main (String[] args) {
int
A[][] = { {
2
,
4
,
6
,
8
},
{
1
,
3
,
5
,
7
},
{
8
,
6
,
4
,
2
},
{
7
,
5
,
3
,
1
} };
int
B[][] = { {
2
,
3
,
6
,
8
},
{
1
,
3
,
5
,
2
},
{
8
,
1
,
4
,
2
},
{
3
,
5
,
4
,
1
} };
printIntersection(A, B);
}
}
python3
N, M
=
4
,
4
def
printIntersection(A, B) :
for
i
in
range
(M) :
for
j
in
range
(N) :
if
(A[i][j]
=
=
B[i][j]) :
print
(A[i][j], end
=
" "
)
else
:
print
(
"* "
, end
=
" "
)
print
()
if
__name__
=
=
"__main__"
:
A
=
[ [
2
,
4
,
6
,
8
],
[
1
,
3
,
5
,
7
],
[
8
,
6
,
4
,
2
],
[
7
,
5
,
3
,
1
] ]
B
=
[ [
2
,
3
,
6
,
8
],
[
1
,
3
,
5
,
2
],
[
8
,
1
,
4
,
2
],
[
3
,
5
,
4
,
1
] ]
printIntersection(A, B)
C #
using
System;
class
GFG {
static
int
N = 4;
static
int
M = 4;
static
void
printIntersection(
int
[,]A,
int
[,]B)
{
for
(
int
i = 0; i < M; i++) {
for
(
int
j = 0; j < N; j++) {
if
(A[i,j] == B[i,j])
Console.Write(A[i,j] +
" "
);
else
Console.Write(
"* "
);
}
Console.WriteLine(
" "
);
}
}
public
static
void
Main () {
int
[,]A = { { 2, 4, 6, 8 },
{ 1, 3, 5, 7 },
{ 8, 6, 4, 2 },
{ 7, 5, 3, 1 } };
int
[,]B = { { 2, 3, 6, 8 },
{ 1, 3, 5, 2 },
{ 8, 1, 4, 2 },
{ 3, 5, 4, 1 } };
printIntersection(A, B);
}
}
PHP
<?php
function
printIntersection(
$A
,
$B
)
{
$N
= 4;
$M
= 4;
for
(
$i
= 0;
$i
<
$M
;
$i
++)
{
for
(
$j
= 0;
$j
<
$N
;
$j
++)
{
if
(
$A
[
$i
][
$j
] ==
$B
[
$i
][
$j
])
echo
$A
[
$i
][
$j
] .
" "
;
else
echo
"* "
;
}
echo
"n"
;
}
}
$A
=
array
(
array
(2, 4, 6, 8 ),
array
(1, 3, 5, 7 ),
array
(8, 6, 4, 2 ),
array
(7, 5, 3, 1 ) );
$B
=
array
(
array
(2, 3, 6, 8 ),
array
(1, 3, 5, 2 ),
array
(8, 1, 4, 2 ),
array
(3, 5, 4, 1 ) );
printIntersection(
$A
,
$B
);
?>
Выход:
2 * 6 8 1 3 5 * 8 * 4 2 * 5 * 1
Рекомендуемые посты:
- Различные операции над матрицами
- XOR XOR всех подматриц
- Кронекер Произведение двух матриц
- Подсчитать подматрицы, имеющие сумму, кратную сумме k
- Программа для умножения двух матриц
- Программа Python для добавления двух матриц
- Программа для вычитания матриц
- Программа для сложения двух матриц
- Программа для проверки идентичности двух заданных матриц
- Программа Python для умножения двух матриц
- Подсчитать пары из двух отсортированных матриц с заданной суммой
- Количество матриц (разных порядков) с заданным количеством элементов
- Запросы на количество двоичных подматриц заданного размера
- Минимальные элементы, которые нужно добавить, чтобы умножить две матрицы
- Умножение двух матриц в одной строке с использованием Numpy в Python
Найти пересечение двух матриц
0.00 (0%) 0 votes
Все курсы > Линейная алгебра > Занятие 6 (часть 1)
Сегодня мы еще раз рассмотрим полученные ранее знания о векторных пространствах, линейных преобразованиях, системе линейных уравнений и определителе матрицы в контексте новых понятий ранга и четырех фундаментальных подпространств матрицы, а именно пространства столбцов, пространства строк, ядра и коядра матрицы.
Продолжим работать в том же ноутбуке⧉
Ранг матрицы
При нулевом определителе в трехмерном пространстве матрица может «схлопнуть» пространство до плоскости, линии или точки (во всех трех случаях определитель равен нулю).
Ранее мы сказали, что для того чтобы в системе уравнений, например, трехмерная матрица $A$ при нулевом определителе все же имела решение, вектор $mathbf b$, на который матрица $A$ переводит вектор $mathbf x$, должен лежать на плоскости или линии, в которые «схлопывается» трехмерное пространство.
Размерность пространства после трансформации принято описывать рангом матрицы (rank).
Если преобразование трехмерной матрицы «сворачивает» размерность до линии, то ранг такого преобразования равен единице, до плоскости — двум и т.д. В случае матрицы $2 times 2$ самый высокий ранг матрицы — два. Это значит, что при преобразовании размерность сохранилась (и соответственно определитель не равен нулю).
Пространство столбцов
Пространством столбцов (column space, а также образом, image) называют множество всех возможных линейных комбинаций вектор-столбцов.
С точки зрения линейных преобразований, пространством столбцов называют векторы, которые определяют пространство после трансформации.
В случае линейно зависимых векторов таких векторов будет меньше, чем в исходной матрице. Приведем пример линейно зависимых векторов и рассчитаем ранг матрицы.
M = np.array([[1, 0, 1], [2, 3, 4], [–1, –3, –3]]) np.linalg.matrix_rank(M) |
Приведем матрицу к упрощенному ступенчатому виду (reduced row-echelon form) с помощью Питона. Для этого воспользуемся методом .rref() библиотеки sympy.
from sympy import * M = Matrix([[1, 0, 1], [2, 3, 4], [–1, –3, –3]]) M_rref = M.rref() M_rref[0] |
Как мы видим, с одной стороны, пространство сократилось до двух измерений (поэтому ранг матрицы равен двум), с другой, двумерное пространство можно описать первыми двумя столбцами (их еще называют разрещающими, ведущими или базисными, pivot columns), где все элементы кроме одного равны нулю.
Разрешающие столбцы и образуют пространство столбцов. Найдем пространство столбцов с помощью Питона.
# вторым элементом метод .rref() выводит индексы # разрешающих столбцов (pivot columns) # используем их для нахождения пространства столбцов M.col(M.rref()[1]) |
# то же самое можно найти с помощью метода # sympy.columnspace() M_columnspace = M.columnspace() M_columnspace[0] |
Откуда такое название? Столбцы матрицы говорят куда «приземлятся» координаты базисных векторов. В этом смысле, оболочка вектор-столбцов то же самое, что и пространство столбцов.
В матрице $2 times 2$ первый столбец показывает, где окажется вектор $mathbf i$, второй — вектор $mathbf j$. И оболочка этих столбцов определит пространство столбцов. Если, например, в матрице $2 times 2$ столбцы линейно независимы и преобразование не приводит к снижению размерности, то пространство столбцов задается этими двумя векторами.
Замечу, что столбцы, не являющиеся разрешающими, называются свободными (free).
Ядро матрицы
Если преобразование уменьшает размерность (например, преобразовывает плоскость в линию), то несколько векторов оказываются в начале координат (становятся нулевыми векторами). Видео ниже прекрасно иллюстрирует эту трансформацию.
Множество таких «исчезающих» векторов называется ядром матрицы или ее нуль-пространством (null space, kernel).
Видео про обратные матрицы, ранг и ядро⧉.
Система уравнений
$Ax = b$
Рассмотрим пространство столбцов и ядро с точки зрения системы линейных уравнений. В первую очередь представим пространство столбцов, как решение системы $ A mathbf x = mathbf b $, т.е. линейную комбинацию вектор-столбцов $A$, умноженных на компоненты $mathbf x$.
$$ x_1 begin{bmatrix} vdots \ mathbf a_1 \ vdots end{bmatrix} + x_2 begin{bmatrix} vdots \ mathbf a_2 \ vdots end{bmatrix} + x_3 begin{bmatrix} vdots \ mathbf a_3 \ vdots end{bmatrix} = begin{bmatrix} vdots \ mathbf b \ vdots end{bmatrix} $$
Всегда ли $A mathbf x = mathbf b$ будет иметь решение? Нет. Возьмем некоторую матрицу $A$ и соответствующие ей векторы $mathbf x$ и $mathbf b$.
$$ begin{bmatrix} 1 & 1 & 2 \ 2 & 1 & 3 \ 3 & 1 & 4 \ 4 & 1 & 5 end{bmatrix} begin{bmatrix} x_1 \ x_2 \ x_3 end{bmatrix} = begin{bmatrix} b_1 \ b_2 \ b_3 \ b_4 end{bmatrix} $$
В такой системе будет много векторов $mathbf b$, которые не будут являться линейной комбинацией трех столбцов матрицы A.
В каком случае такое решение все-таки будет существовать? Если $mathbf b$ будет являться линейной комбинацией векторов $A$, т.е. будет находиться в пространстве столбцов $A$, $mathbf b in col(A) $.
Например, если $mathbf b$ будет равен одному из столбцов $A$.
$$ begin{bmatrix} 1 & 1 & 2 \ 2 & 1 & 3 \ 3 & 1 & 4 \ 4 & 1 & 5 end{bmatrix} begin{bmatrix} x_1 \ x_2 \ x_3 end{bmatrix} = begin{bmatrix} 1 \ 2 \ 3 \ 4 end{bmatrix} $$
Тогда решением может быть
$$ mathbf x = begin{bmatrix} 1 \ 0 \ 0 end{bmatrix} $$
Что интересно, все возможные решения $mathbf x$ именно такой системы $A mathbf x = mathbf b$, где $mathbf b in col(A) $ сами по себе не образуют векторное пространство (хотя бы потому что нулевой вектор не включен в эти решения).
Дополнительно замечу, что так как в матрице A только два линейно независимых вектора (третий вектор является суммой первых двух), то в данном случае мы имеем двумерное подпространство $R^4$.
$Ax = 0$
В системе линейных уравнений $A mathbf x = mathbf b$, если $mathbf b$ — нулевой вектор, т.е. $A mathbf x = mathbf 0$, то ядро дает все возможные решения этой системы (все возможные $mathbf x$). Можно также сказать, что ядро $mathbf x $ представляет собой комбинацию вектор-столбцов $A$, обращающихся в ноль.
$$ x_1 begin{bmatrix} vdots \ mathbf a_1 \ vdots end{bmatrix} + x_2 begin{bmatrix} vdots \ mathbf a_2 \ vdots end{bmatrix} + x_3 begin{bmatrix} vdots \ mathbf a_3 \ vdots end{bmatrix} = begin{bmatrix} vdots \ mathbf 0 \ vdots end{bmatrix} $$
В примере выше обратите внимание, что $col(A) in R^4$, в то время как $null(A) in R^3$. Решением же этой системы при нулевом векторе $mathbf b$, $A mathbf x = mathbf 0$ будет
$$ null(A) = k begin{bmatrix} 1 \ 1 \ -1 end{bmatrix} $$
где $k in mathbb{R} $. Другими словами, $null(A)$ представляет собой линию в $R^3$.
Убедимся, что для матрицы M выше мы правильно нашли ядро (а также решение $M mathbf x = 0$).
M = np.array([[1, 0, 1], [2, 3, 4], [–1, –3, –3]]) Null = np.array([–1, –2/3, 1]) M @ Null |
Общее и частное решение
Приведем общее решение (complete solution) следующей системы, состоящее из частного решения (particular solution) системы $A mathbf x = mathbf b$ и ядра, то есть решения $A mathbf x = mathbf 0$.
$$ begin{bmatrix} 1 & 1 & 2 \ 2 & 1 & 3 \ 3 & 1 & 4 \ 4 & 1 & 5 end{bmatrix} begin{bmatrix} x_1 \ x_2 \ x_3 end{bmatrix} = begin{bmatrix} 1 \ 2 \ 3 \ 4 end{bmatrix} $$
$$ mathbf x = begin{bmatrix} 1 \ 0 \ 0 end{bmatrix} + k begin{bmatrix} 1 \ 1 \ -1 end{bmatrix} $$
Независимость векторов, базис и размерность
В свете новых знаний еще раз рассмотрим линейную независимость векторов и базис векторного пространства. Возьмем некоторую матрицу $A$.
Независимые вектор-столбцы
Можно сказать, что вектор-столбцы, образующие матрицу $A$ независимы, если ядро матрицы состоит только из нулевого вектора, $null(A) = { mathbf 0 }$ (решением $A mathbf x = mathbf 0$ будет только нулевой вектор $mathbf x$). Одновременно все столбцы такой матрицы являются разрешающими, и матрица имеет полный ранг, равный количеству столбцов $n$, $rank(A) = n$.
Если матрица А квадратная и ее столбцы линейно независимы, то можно сказать, что
- Вектор-столбцы матрицы образуют базис $R^n$
- Такая матрица будет обратима (!)
Приведем примеры обратимых матриц, столбцы которых формируют базис.
$$ begin{bmatrix} 1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 end{bmatrix}, begin{bmatrix} 1 & 2 & 3 \ 1 & 2 & 1 \ 2 & 5 & 8 end{bmatrix} $$
A = np.array([[1, 2, 3], [1, 2, 1], [2, 5, 8]]) np.linalg.matrix_rank(A) |
array([[ 5.5, -0.5, -2. ], [-3. , 1. , 1. ], [ 0.5, -0.5, 0. ]]) |
Зависимые вектор-столбцы
Если же столбцы зависимы, то ядро матрицы содержит также ненулевые векторы и решением $A mathbf x = mathbf 0$ будет или будут некоторые ненулевые векторы $mathbf x$. Столбцы матрицы будут как разрешающими, так и свободными. Ранг матрицы будет равен количеству разрещающих столбцов.
Базис пространства будет определяться именно линейно независимыми векторами, входящими в пространство столбцов. Размерностью (dimension) векторного пространства будет как раз количество векторов базиса.
Например, возьмем следующую матрицу $A$.
$$ A = begin{bmatrix} 1 & 2 & 3 & 1 \ 1 & 1 & 2 & 1 \ 1 & 2 & 3 & 1 end{bmatrix} $$
В данном случае у матрицы два линейно независимых столбца. В частности, это
$$ col(A) = left{ begin{bmatrix} 1 \ 1 \ 1 end{bmatrix}, begin{bmatrix} 2 \ 1 \ 2 end{bmatrix} right} $$
Как следствие,
$$ dim(col(A)) = rank(A) = dim(basis) = text{# of pivots} = 2 $$
Одновременно, нулевое пространство задано векторами
$$ null(A) = left{ begin{bmatrix} -1 \ -1 \ 1 \ 0 end{bmatrix}, begin{bmatrix} -1 \ 0 \ 0 \ 1 end{bmatrix} right} $$
Как следствие,
$$ dim(null(A)) = text{# of free columns} = 2 $$
Код на Питоне для нахождения пространства столбцов и ядра приведен в ноутбуке.
В качестве дополнения, замечу, что размерность векторного пространства характеризуется следом (trace) единичной матрицы этого пространства или суммой элементов главной диагонали. Например, размерность $R^3$ можно охарактеризовать через
$$ dim(col(A)) = tr left( begin{bmatrix} 1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 end{bmatrix} right) = 3 $$
Пространство строк и коядро
Пространством строк (row space) называют множество всех возможных линейных комбинаций вектор-строк.
Если матрицу транспонировать, то можно сказать, что
$$ row(A) = col(A^T) $$
Коядром или левым нуль-пространством (left null-space, cokernel) матрицы $A$ будет ядро матрицы $A^T$.
$$ leftnull(A) = null(A^T) $$
Продемонстрируем, почему это пространством называется именно левым нуль-пространством. По определению ядра, как решения $A mathbf x = mathbf 0$, можно сказать, что коядро будет решением $A^T mathbf y = mathbf 0$.
$$ A^T mathbf y = mathbf 0 $$
$$ mathbf y^T(A^T)^T = mathbf 0^T $$
$$ mathbf y^T A = mathbf 0^T $$
Схематично это можно представить следующим образом.
Можно также сказать, что коядро y в системе $ A^T mathbf y = mathbf 0 $ дает все возможные комбинации столбцов $A^T$, дающие нулевой вектор (что то же самое, что линейные комбинации строк $mathbf x^T A = 0$). Приведем пример. Найдем коядро матрицы $A$.
A = Matrix([[1, 2, 3, 1], [1, 1, 2, 1], [1, 2, 3, 1]]) A.T.nullspace()[0] |
Другими словами, нам нужно взять $-1R_1 + 0R_2 + 1R_3$, чтобы получить нулевой вектор. Проверим полученный результат.
A = np.array([[1, 2, 3, 1], [1, 1, 2, 1], [1, 2, 3, 1]]) Leftnull = np.array([–1, 0, 1]) Leftnull.T @ A |
Фундаментальные подпространства матрицы
Обобщим изложенную выше информацию. Возьмем матрицу A размерностью $m times n$. Тогда
- $ null(A) in R^n$ (так как должно быть решением $A mathbf x = mathbf 0$)
- $ col(A) in R^m $ (количество строк A)
- $ row(A) = col(A^T) in R^n $ (количество столбцов A)
- $ leftnull(A) = null(A^T) in R^m $ (так как должно быть решением $A^T mathbf y = mathbf 0$)
Тогда схематично эти подпространства можно представить следующим образом.
Несколько пояснений и дополнений:
- $r$ означает ранг (rank) матрицы
- $r+(n-r) = n$, т.е. столбцы матрицы $A$
- $r+(m-r) = m$, т.е. строки матрицы $A$ или столбцы $A^T$
Про пересечение подпространств. Может ли вектор $mathbf v = begin{bmatrix} 1 \ 2 end{bmatrix}$ быть одновременно в нуль-пространстве и являться частью пространства строк A (или в целом строкой в A)? Нет.
$$ begin{bmatrix} 1 & 2 \ dots & dots end{bmatrix} begin{bmatrix} 1 \ 2 end{bmatrix} not= begin{bmatrix} 0 \ 0 end{bmatrix} $$
Пересечением пространства строк и нуль-пространства будет только нулевой вектор.
$$ row(A) cap null(A) = { mathbf 0 } $$
Ортогональность подпространств матрицы
Более того, ядро ортогонально пространству строк $row(A) perp null(A)$, так как их скалярное произведение равно нулю. Это следует из определения ядра $A mathbf x = mathbf 0$ (произведение $mathbf x$ на каждую вектор-строку $mathbf a$ равно нулю).
$$ begin{bmatrix} dots & mathbf a_1 & dots \ dots & mathbf a_2 & dots \ dots & mathbf a_3 & dots \ dots & mathbf a_4 & dots end{bmatrix} begin{bmatrix} vdots \ mathbf x \ vdots end{bmatrix} = begin{bmatrix} 0 \ 0 \ 0 \ 0 end{bmatrix} $$
Более того, так как $null(A)$ содержит все векторы, ортогональные $row(A)$, то ядро можно считать ортогональным дополнением (orthogonal complement) пространства строк в $R^n$: $null(A) = row(A)^{perp} $.
То же самое справедливо для пространства столбцов и коядра.
$$ col(A) perp leftnull(A) perp null(A^T) text{ в } R^m $$
$$ leftnull(A), null(A^T) = col(A)^{perp} $$
Количество решений системы уравнений
Систематизируем наши знания о пространствах матрицы с точки зрения возможного количества решений систетемы уравнений.
Система не имеет решений
В случае если система не имеет решений, существует некоторый вектор $mathbf b $, при котором $A mathbf x = mathbf b $ не будет иметь решения.
$$ exists mathbf b implies A mathbf x not= mathbf b $$
С точки зрения матрицы $underset{m times n}{A}$, можно говорить о том, что некоторые строки линейно зависимы и после преобразования метода Гаусса обратятся в нули. Как следствие, ранг матрицы меньше количества строк, $r < m$.
Система имеет единственное решение
Если мы знаем, что система имеет единственное решение, то это означает, что нуль-пространство матрицы $A$ содержит только нулевой вектор, $null(A) = { mathbf 0 }$ и все столбцы линейно независимы, $ r = n $.
Система имеет множество решений
В этом случае решение состоит из частного решения и решения системы $A mathbf x not= mathbf 0 $. Другими словами, это означает, что нуль-пространство содержит не только нулевой вектор, а значит столбцы матрицы линейно зависимы и $ r < n $.
Теперь рассмотрим пример, иллюстрирующий применение матрицы для моделирования физического процесса и использование знаний о фундаментальных подпространствах матрицы.
Есть две двухстолбцовые матрицы А и В. Первые столбцы у них имеют одинаковые элементы. Задача: нужно выбрать все строки из второй матрицы В, элементы первого столбца которой совпадают с соотв. элементами первой матрицы А.
Т.е. нужно найти “пересечение” двух матриц по первым столбцам.
Например, если:
А’ = [1 2 4; 34 74 76] (матрицы для наглядности транспонированы)
B’ = [1 2 3 4 5; 16 23 75 46 45],
то нужно получить матрицу С, у которой первый столбец будет сформирован из элементов, общих в первых столбцах А и B (их пересечения), а второй — из элементов В.
Т.е. должно получиться
C’ = [1 2 4; 16 23 46]
Нет ли какой-нибудь функции в матлабе на эту тему?
P.S.
В маткаде такая функция есть — lookup.
lookup(z, A, B) Looks in a vector or matrix, A, for a given value, z, and returns the value(s) in the same position(s) (that is, with the same row and column numbers) in another matrix, B. When multiple values are returned, they appear in a vector in row-wise order, starting with the top left corner of B and sweeping to the right.