# Núcleo (álgebra linear)

Em matemática, mais especificamente em álgebra linear e análise funcional, o núcleo (kernel, em inglês) ou espaço nulo de uma transformação linear L : V → W entre dois espaços vetoriais V e W, é o conjunto de todos os elementos v de V para os quais L(v) = 0, em que 0 denota o vetor nulo de W. Em outras palavras,
$\ker(L)=\left\{\mathbf {v} \in V\mid L(\mathbf {v} )=\mathbf {0} \right\}{\text{.}}$

## Propriedades

O núcleo de L é um subespaço vetorial do domínio V. Para uma transformação linear L : V → W, dois elementos de V têm a mesma imagem em W se, e somente se, a sua diferença reside no núcleo de L: $L(\mathbf {v} _{1})=L(\mathbf {v} _{2})\;\Leftrightarrow \;L(\mathbf {v} _{1}-\mathbf {v} _{2})=\mathbf {0} {\text{.}}$ Segue-se que a imagem de L é isomorfa ao quociente de V pelo núcleo: $\mathop {\mathrm {im} } (L)\cong V/\ker(L){\text{.}}$ Isto implica o teorema do posto e nulidade: $\dim(\ker L)+\dim(\mathop {\mathrm {im} } L)=\dim(V){\text{.}}$ onde, por posto entende-se a dimensão da imagem de L, e por nulidade, a dimensão do núcleo de L.
Quando V é um espaço com produto interno, o quociente V / ker(L) pode ser identificado com o complemento ortogonal de ker(L) em V. Esta é a generalização para operadores lineares do espaço linha, ou coimagem, de uma matriz.

## Aplicação aos módulos

A noção de núcleo aplica-se aos homomorfismos de módulos, sendo estes últimos uma generalização dos espaços vetoriais sobre um corpo para um anel. O domínio da função passa a ser um módulo, e o núcleo constitui um "submódulo". Aqui, os conceitos de posto e de nulidade, não se aplicam necessariamente.

## Na análise funcional

Se V e W são espaços vetoriais topológicos (e, W é de dimensão finita) então um operador linear L: V → W é contínuo se, e somente se, o núcleo de L é um subespaço fechado de V.

## Representação como a multiplicação de matrizes

Considere uma transformação linear representada como uma matriz A de ordem m × n com coeficientes em um corpo K (normalmente o corpo dos números reais ou dos números complexos) e atuando sobre vetores coluna x com n componentes sobre K. O núcleo desta transformação linear é o conjunto de soluções para a equação A x = 0, em que 0 é entendido como o vetor nulo. A dimensão do núcleo de A é chamada de nulidade de A. Em notação de conjuntos, $\operatorname {N} (A)=\operatorname {Null} (A)=\operatorname {ker} (A)=\left\{\mathbf {x} \in K^{n}|A\mathbf {x} =\mathbf {0} \right\}.$ A equação matricial é equivalente a um sistema de equações lineares homogêneas:
$A\mathbf {x} =\mathbf {0} \;\;\Leftrightarrow \;\;{\begin{alignedat}{7}a_{11}x_{1}&&\;+\;&&a_{12}x_{2}&&\;+\;\cdots \;+\;&&a_{1n}x_{n}&&\;=\;&&&0\\a_{21}x_{1}&&\;+\;&&a_{22}x_{2}&&\;+\;\cdots \;+\;&&a_{2n}x_{n}&&\;=\;&&&0\\\vdots \;\;\;&&&&\vdots \;\;\;&&&&\vdots \;\;\;&&&&&\;\vdots \\a_{m1}x_{1}&&\;+\;&&a_{m2}x_{2}&&\;+\;\cdots \;+\;&&a_{mn}x_{n}&&\;=\;&&&0{\text{.}}\\\end{alignedat}}$
Assim, o núcleo de A é o mesmo que o conjunto solução para o sistema homogêneo acima.

### Propriedades de subespaço

O núcleo de uma matriz A de ordem m × n sobre um corpo K é um subespaço vetorial de K$^n$. Isto é, o núcleo de A, o conjunto Ker(A), tem as seguintes três propriedades:
* Ker(A) sempre contém o vetor nulo, uma vez que A0 = 0.
* Se x ∈ Ker(A) e y ∈ Ker(A), então x + y ∈ Ker(A). Isso decorre da distributividade da multiplicação de matrizes sobre a adição.
* Se x ∈ Ker(A) e c ∈ K é um escalar, então cx ∈ Ker(A), uma vez que A(cx) = c(Ax) = c0 = 0.

### O espaço linha de uma matriz

O produto Ax pode ser escrito em termos do produto escalar de vetores da seguinte forma: $A\mathbf {x} ={\begin{bmatrix}\mathbf {a} _{1}\cdot \mathbf {x} \\\mathbf {a} _{2}\cdot \mathbf {x} \\\vdots \\\mathbf {a} _{m}\cdot \mathbf {x} \end{bmatrix}}.$ Aqui a$_1$, ... , a$_m$ indicam as linhas da matriz A. Segue-se que x está no núcleo de A se, e somente se, x é ortogonal (ou perpendicular) a cada um dos vetores linha de A (porque quando o produto escalar de dois vetores é igual a zero, eles são, por definição, ortogonais).
O espaço linha, ou coimagem, de uma matriz A é o espaço gerado pelos vetores linha de A. Pelo raciocínio acima, o núcleo de A é o complemento ortogonal para o espaço linha, ou seja, um vetor x está no núcleo de A se, e somente se, ele é perpendicular a cada vetor no espaço linha de A.
A dimensão do espaço linha de A é chamada de posto de A e a dimensão do núcleo de A é chamada de nulidade de A. Estas grandezas estão relacionadas pelo teorema do posto e da nulidade: $\operatorname {rank} (A)+\operatorname {nullity} (A)=n.$

### Espaço nulo à esquerda

O espaço nulo à esquerda, ou conúcleo, de uma matriz A consiste de todos os vetores x tais que x$^T$A = 0$^T$, em que T denota a transposição de um vetor coluna. O espaço nulo à esquerda de A é o mesmo que o núcleo de A$^T$. O espaço nulo à esquerda de A é o complemento ortogonal do espaço de coluna de A, e é dual do conúcleo da transformação linear associada. O núcleo, o espaço linha, o espaço coluna, e o espaço nulo à esquerda de A são os quatro subespaços fundamentais associados à matriz A.

### Sistemas de equações lineares não homogêneas

O núcleo também desempenha um papel na solução de um sistema linear não homogêneo:
$A\mathbf {x} =\mathbf {b} \;\;\;\;\;\;{\text{or}}\;\;\;\;\;\;{\begin{alignedat}{7}a_{11}x_{1}&&\;+\;&&a_{12}x_{2}&&\;+\;\cdots \;+\;&&a_{1n}x_{n}&&\;=\;&&&b_{1}\\a_{21}x_{1}&&\;+\;&&a_{22}x_{2}&&\;+\;\cdots \;+\;&&a_{2n}x_{n}&&\;=\;&&&b_{2}\\\vdots \;\;\;&&&&\vdots \;\;\;&&&&\vdots \;\;\;&&&&&\;\vdots \\a_{m1}x_{1}&&\;+\;&&a_{m2}x_{2}&&\;+\;\cdots \;+\;&&a_{mn}x_{n}&&\;=\;&&&b_{m}\\\end{alignedat}}$
Se u e v são duas soluções possíveis da equação acima, então,
$A(\mathbf {u} -\mathbf {v} )=A\mathbf {u} -A\mathbf {v} =\mathbf {b} -\mathbf {b} =\mathbf {0}$
Assim, a diferença entre duas soluções da equação Ax = b pertence ao núcleo de A.
Disto resulta que qualquer solução da equação Ax = b pode ser expressa como a soma de uma soluço fixa v e um elemento arbitrário do núcleo, isto é, o conjunto solução para a equação Ax = b é
$\left\{\mathbf {v} +\mathbf {x} \mid A\mathbf {v} =\mathbf {b} \land \mathbf {x} \in \operatorname {Null} (A)\right\},$
Geometricamente, isto diz que o conjunto solução de Ax = b é a translação do núcleo de A pelo vetor v. Ver também a alternativa de Fredholm e flat (geometria).

## Ilustração

Nesta seção, é exemplificado o processo para determinar o núcleo de uma matriz (ver a seção sobre o Cálculo por eliminação gaussiana abaixo para métodos mais adequados para cálculos mais complexos). Também é mencionado o espaço linha e a sua relação com o núcleo.
Considere a matriz $A={\begin{bmatrix}\,\,\,2&3&5\\-4&2&3\end{bmatrix}}.$ O núcleo desta matriz consiste de todos os vetores (x, y, z) ∈ R$^3$ para os quais
${\begin{bmatrix}\,\,\,2&3&5\\-4&2&3\end{bmatrix}}{\begin{bmatrix}x\\y\\z\end{bmatrix}}={\begin{bmatrix}0\\0\end{bmatrix}},$
o que pode ser expresso como um sistema de equações lineares homogêneas envolvendo x, y, e z:
${\begin{alignedat}{7}2x&&\;+\;&&3y&&\;+\;&&5z&&\;=\;&&0,\\-4x&&\;+\;&&2y&&\;+\;&&3z&&\;=\;&&0,\\\end{alignedat}}$
o que pode ser escrito em forma de matriz, como: $\left[{\begin{array}{ccc|c}2&3&5&0\\-4&2&3&0\end{array}}\right].$
A eliminação de Gauss–Jordan reduz esta matriz a: $\left[{\begin{array}{ccc|c}1&0&1/16&0\\0&1&13/8&0\end{array}}\right].$
Reescrevendo, obtém-se: ${\begin{alignedat}{7}x=\;&&-{\frac {1}{16}}z\,\,\,\\y=\;&&-{\frac {13}{8}}z.\end{alignedat}}$
Agora podemos expressar um elemento do núcleo: ${\begin{bmatrix}x\\y\\z\end{bmatrix}}=c{\begin{bmatrix}-1/16\\-13/8\\1\end{bmatrix}}.$ em que c é um escalar.
Como c é uma variável livre, a solução também pode ser expressa como ${\begin{bmatrix}x\\y\\z\end{bmatrix}}=c{\begin{bmatrix}-1\\-26\\16\end{bmatrix}}.$
O núcleo de A é, precisamente, o conjunto de soluções para estas equações (neste caso, uma reta que passa pela origem em R$^3$); o vetor (-1,-26,16)$^T$ constitui uma base do núcleo de A. Assim, a nulidade de A é igual a 1.
Note também que os seguintes produtos escalares são nulos:
$\left[{\begin{array}{ccc}2&3&5\end{array}}\right]\cdot {\begin{bmatrix}-1\\-26\\16\end{bmatrix}}=0\quad \mathrm {and} \quad \left[{\begin{array}{ccc}-4&2&3\end{array}}\right]\cdot {\begin{bmatrix}-1\\-26\\16\end{bmatrix}}=0\mathrm {,}$
o que ilustra que os vetores no núcleo de A são ortogonais a cada um dos vetores linha de A.
Esses dois vetores linha (linearmente independentes) geram o espaço linha de A, um plano ortogonal ao vetor (-1,-26,16)$^T$.
Com o posto de A sendo 2, a nulidade de A sendo 1, e a dimensão de A sendo 3, tem-se a ilustração do teorema do posto e da nulidade.

## Exemplos

* Se L: R$^m$ → R$^n$, então o núcleo de L é o conjunto solução de um sistema de equações lineares homogêneas. Como na ilustração acima, se L é o operador:
$L(x_{1},x_{2},x_{3})=(2x_{1}+3x_{2}+5x_{3},\;-4x_{1}+2x_{2}+3x_{3})$
    então o núcleo de L é o conjunto de soluções das equações
${\begin{alignedat}{7}2x_{1}&\;+\;&3x_{2}&\;+\;&5x_{3}&\;=\;&0\\-4x_{1}&\;+\;&2x_{2}&\;+\;&3x_{3}&\;=\;&0\end{alignedat}}$
* Seja C[0,1] o espaço vetorial de todas as funções contínuas do intervalo [0,1] a valores reais, e defina L: C[0,1] → R pela regra
$L(f)=f(0.3){\text{.}}$
    Então o núcleo de L consiste de todas as funções f ∈ C[0,1] para as quais f(0.3) = 0.
* Deixe C$^∞$(R) o espaço vetorial de todas as funções R → R infinitamente diferenciáveis, e seja D: C$^∞$(R) → C$^∞$(R) o operador diferencial:
$D(f)={\frac {df}{dx}}{\text{.}}$
    Então o núcleo de D consiste de todas as funções em C$^∞$(R) cujas derivadas são nulas, ou seja, o conjunto de todas funções constantes.
* Seja R$^∞$ o produto direto de um número infinito de cópias de R, e seja s: R$^∞$ → R$^∞$ o operador shift
$s(x_{1},x_{2},x_{3},x_{4},\ldots )=(x_{2},x_{3},x_{4},\ldots ){\text{.}}$
    Então o núcleo de s é o subespaço unidimensional que consiste de todos os vetores (x$_1$, 0, 0, ...).
* Se V é um espaço com produto interno e W é um subespaço, o núcleo da projeção ortogonal de V → W é o complemento ortogonal de W em V.

## Cálculo por eliminação gaussiana

Uma base do núcleo de uma matriz pode ser calculada por meio da eliminação de Gauss.
Para este efeito, dada uma matriz A de ordem m × n, pode-se construir a matriz aumentada por linhas $\left[{\begin{array}{c}A\\\hline I\end{array}}\right],$ em que I é a matriz identidade de ordem n × n.
Calculando-se sua forma escalonada reduzida por colunas através da eliminação de Gauss (ou qualquer outro método apropriado), obtém-se uma matriz $\left[{\begin{array}{c}B\\\hline C\end{array}}\right].$ Uma base do núcleo de A consiste nas colunas não-nulas de C tais que a coluna correspondente de B é uma coluna nula.
Na verdade, o cálculo também pode ser interrompido assim que a matriz superior estiver na forma escalonada por colunas: o restante do cálculo consiste em alterar a base do espaço vetorial gerado pelas colunas cuja parte superior é zero.
Por exemplo, suponha que $A=\left[{\begin{array}{cccccc}1&0&-3&0&2&-8\\0&1&5&0&-1&4\\0&0&0&1&7&-9\\0&0&0&0&0&0\end{array}}\,\right].$ Então $\left[{\begin{array}{c}A\\\hline I\end{array}}\right]=\left[{\begin{array}{cccccc}1&0&-3&0&2&-8\\0&1&5&0&-1&4\\0&0&0&1&7&-9\\0&0&0&0&0&0\\\hline 1&0&0&0&0&0\\0&1&0&0&0&0\\0&0&1&0&0&0\\0&0&0&1&0&0\\0&0&0&0&1&0\\0&0&0&0&0&1\end{array}}\right].$ Colocando-se a parte superior na forma escalonada por colunas por meio de operações sobre as colunas de toda a matriz resulta que $\left[{\begin{array}{c}B\\\hline C\end{array}}\right]=\left[{\begin{array}{cccccc}1&0&0&0&0&0\\0&1&0&0&0&0\\0&0&1&0&0&0\\0&0&0&0&0&0\\\hline 1&0&0&3&-2&8\\0&1&0&-5&1&-4\\0&0&0&1&0&0\\0&0&1&0&-7&9\\0&0&0&0&1&0\\0&0&0&0&0&1\end{array}}\right].$
As três últimas colunas de B são nulas. Portanto, os três últimos vetores de C,
$\left[\!\!{\begin{array}{r}3\\-5\\1\\0\\0\\0\end{array}}\right],\;\left[\!\!{\begin{array}{r}-2\\1\\0\\-7\\1\\0\end{array}}\right],\;\left[\!\!{\begin{array}{r}8\\-4\\0\\9\\0\\1\end{array}}\right]$
formam uma base do núcleo de A.
A demonstração de que o método fornece o núcleo é a seguinte: Como as operações sobre as colunas correspondem a multiplicação à direita por matrizes invertíveis, o fato de que $\left[{\begin{array}{c}A\\\hline I\end{array}}\right]$ se reduz a $\left[{\begin{array}{c}B\\\hline C\end{array}}\right]$ significa que existe uma matriz invertível $P$ tal que $\left[{\begin{array}{c}A\\\hline I\end{array}}\right]P=\left[{\begin{array}{c}B\\\hline C\end{array}}\right],$ com $B$ na forma escalonada por colunas. Assim, $AP=B,$ $IP=C,$ e consequentemente $AC=B.$ Um vetor coluna $v$ pertence ao núcleo de $A$ (ou seja, $Av=0$) se, e somente se, $Bw=0,$ onde $w=P^{-1}v=C^{-1}v.$ Como $B$ está na forma escalonada por colunas, $Bw=0,$ se, e somente se, as entradas de $w$diferentes de zero correspondem às colunas nulas de $B.$ Multiplicando por $C$pode-se deduzir que este é o caso se, e somente se, $v=Cw$ é uma combinação linear das colunas correspondentes de $C.$

## Cálculo numérico

O problema de calcular o núcleo em um computador depende da natureza dos coeficientes.

### Coeficientes exatos

Se os coeficientes da matriz são números exatos, a forma escalonada reduzida por colunas da matriz pode ser calculada pelo algoritmo de Bareiss mais eficientemente do que com a eliminação de Gauss. É ainda mais eficiente usar a aritmética modular e o teorema chinês do resto, que reduz o problema a vários similares sobre corpos finitos (isso evita a sobrecarga induzida pela não-linearidade da complexidade computacional da multiplicação de inteiros). $^[$
Para coeficientes em um corpo finito, a eliminação de Gauss funciona bem, mas para as matrizes grandes que ocorrem em criptografia e no cálculo de bases de Gröbner, são conhecidos algoritmos melhores, que têm aproximadamente a mesma complexidade computacional, mas são mais rápidos e comportar-se melhor no hardware de computadores modernos. $^[$

### Cálculo em ponto flutuante

Para matrizes cujas entradas são números de ponto flutuante, o problema de calcular o núcleo só faz sentido para matrizes em que o número de linhas é igual ao seu posto: devido aos erros de arredondamento, uma matriz de ponto flutuante quase sempre tem um posto cheio, mesmo quando é uma aproximação de uma matriz com um posto muito menor. Mesmo para uma matriz de posto cheio, só é possível calcular o seu núcleo se ela for bem condicionada, ou seja, se tem um número de condicionamento baixo.
Mesmo para uma matriz de posto completo bem condicionada, a eliminação gaussiana não se comporta corretamente: ela introduz erros de arredondamento que são grandes demais para a obtenção de um resultado significativo. Como o cálculo do núcleo de uma matriz é um caso especial da solução de um sistema homogêneo de equações lineares, o núcleo pode ser calculado por qualquer um dos vários algoritmos projetados para resolver sistemas homogêneos. Um software do estado da arte para esta finalidade é a biblioteca Lapack. $^[$