Arranjos multidimensionais3838endnote: 38Consulte a Seção 5.3 fornecem uma estrutura adequada para a representação de matrizes em computador. Uma matriz , assim como um arranjo bidimensional, é uma coleção de valores organizados de forma retangular, por exemplo, a matriz tem a forma
(5.109) |
Seus elementos são organizados por eixos, o eixo das linhas (axis=0) e o eixo das colunas (axis=1).
O sistema linear
(5.110a) | |||
(5.110b) | |||
(5.110c) |
pode ser escrito na seguinte forma matricial
(5.111) |
onde é a matriz de coeficientes
(5.112) |
o vetor dos termos constantes é
(5.113) |
enquanto que o vetor das incógnitas é . No seguinte código, usamos numpy.array para alocamos a matriz dos coeficientes e o vetor dos termos constantes .
Embora úteis para a representação de matrizes, arranjos bidimensionais não são equivalentes a matrizes. Em arranjos, as operações aritméticas elementares (+, -, *, /, etc.) são operações elemento-a-elemento, para matrizes a multiplicação não é assim calculada e a divisão não é definida.
No NumPy, as funções numpy.dot, numpy.matmul ou o operador @ podem ser usados para computar a multiplicação matricial.
Consideramos o sistema linear introduzido no Exemplo 5.4.1. Vamos verificar que sua solução é , e . Equivalentemente, temos que
(5.117) |
com . Isto é, se é solução do sistema, então é nulo o resíduo , i.e.
(5.118) |
Ou equivalentemente, .
Por definição, a transposta de uma matriz é a matriz , i.e. a matriz obtida de pela permutação de suas linhas com suas colunas. No NumPy, a transposta de um arranjo bidimensional pode ser calculado com a função numpy.transpose, com o método numpy.ndarray.transpose ou com o atributo numpy.ndarray.T.
Uma matriz é dita ser simétrica, quando . Observamos que é simétrica a matriz
(5.119) |
Agora, não é simétrica a matriz
(5.120) |
Por definição, o determinante de uma matriz é o escalar
(5.125) | |||
(5.126) |
onde é o conjunto de todas as permutações de e é o sinal (ou assinatura) da permutação . Para matrizes , temos
(5.129) | |||
(5.130) |
Enquanto que no caso de matriz , temos
(5.134) | |||
(5.135) | |||
(5.136) | |||
(5.137) | |||
(5.138) | |||
(5.139) | |||
(5.140) |
A função numpy.linalg.det do NumPy pode ser usado para computar o determinante de um arranjo.
O determinante
(5.144) | |||
(5.145) |
O Método de Cramer3939endnote: 39Gabriel Cramer, 1704 - 1752, matemático suíço. Fonte: Wikipédia: Gabriel Cramer. usa de determinantes para o cálculo da solução de sistemas lineares. Dado um sistema linear
(5.146) |
denotamos a matriz dos coeficientes por
(5.147) |
onde denota a -ésima coluna de . Vamos denotar por a matriz obtida de substituindo pelo vetor dos termos constantes , i.e.
(5.148) |
O método consiste em computar a solução com
(5.149) |
para cada .
Vamos resolver o sistema linear dado no Exercício 5.4.1. Sua forma matricial é
(5.150) |
com matriz dos coeficientes
(5.151) |
e vetor dos termos constantes
(5.152) |
Para aplicação do Método de Cramer, calculamos
(5.156) | |||
(5.157) |
e das matrizes auxiliares
(5.161) | |||
(5.162) |
(5.166) | |||
(5.167) |
(5.171) | |||
(5.172) |
Com isso, obtemos a solução
(5.173) | |||
(5.174) | |||
(5.175) |
Complete as lacunas.
Usualmente, matrizes são computacionalmente modeladas como arrays multidimensionais.
A operação de multiplicação matricial entre dois arrays pode ser feita com o operador @ ou com o método numpy.matmul.
A transposta de um numpy.array bidimensional pode ser obtida com o atributo .T ou o método numpy.transpose.
O submódulo numpy.linalg contém o método det para a computação do determinante de um numpy.array.
a) arrays; b) @; c) .T; d) numpy.linalg
Aloque com numpy.array e imprima as seguintes matrizes:
(5.176) |
(5.177) |
(5.178) |
(5.179) |
Aloque as seguintes matrizes com numpy.array
(5.180) |
e
(5.181) |
Então, compute e imprima o resultado das seguintes operações matriciais
Aloque as seguintes matrizes numpy.array:
(5.182) |
e
(5.183) |
Então, compute e imprima o resultado das seguintes operações matriciais:
Escreva a forma matricial do seguinte sistema linear
(5.184a) | |||
(5.184b) | |||
(5.184c) |
Use numpy.array para alocar a matriz dos coeficientes e o vetor dos termos constantes . Então, verifique quais dos seguintes vetores é solução do sistema
Calcule e compute o determinante das seguintes matrizes
(5.185) |
(5.186) |
(5.187) |
Use o Método de Cramer para computar a solução do sistema dado no Exercício 5.4.5. Verifique sua solução com a computada pelo método numpy.linalg.solve.
Dica: .
Desenvolva sua própria função Python para a computação do determinante de uma matriz .
Dica: use a função intertools.permutations para obter um iterador sobre as permutações.
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.
Arranjos multidimensionais3838endnote: 38Consulte a Seção 5.3 fornecem uma estrutura adequada para a representação de matrizes em computador. Uma matriz , assim como um arranjo bidimensional, é uma coleção de valores organizados de forma retangular, por exemplo, a matriz tem a forma
(5.109) |
Seus elementos são organizados por eixos, o eixo das linhas (axis=0) e o eixo das colunas (axis=1).
O sistema linear
(5.110a) | |||
(5.110b) | |||
(5.110c) |
pode ser escrito na seguinte forma matricial
(5.111) |
onde é a matriz de coeficientes
(5.112) |
o vetor dos termos constantes é
(5.113) |
enquanto que o vetor das incógnitas é . No seguinte código, usamos numpy.array para alocamos a matriz dos coeficientes e o vetor dos termos constantes .
Embora úteis para a representação de matrizes, arranjos bidimensionais não são equivalentes a matrizes. Em arranjos, as operações aritméticas elementares (+, -, *, /, etc.) são operações elemento-a-elemento, para matrizes a multiplicação não é assim calculada e a divisão não é definida.
No NumPy, as funções numpy.dot, numpy.matmul ou o operador @ podem ser usados para computar a multiplicação matricial.
Consideramos o sistema linear introduzido no Exemplo 5.4.1. Vamos verificar que sua solução é , e . Equivalentemente, temos que
(5.117) |
com . Isto é, se é solução do sistema, então é nulo o resíduo , i.e.
(5.118) |
Ou equivalentemente, .
Por definição, a transposta de uma matriz é a matriz , i.e. a matriz obtida de pela permutação de suas linhas com suas colunas. No NumPy, a transposta de um arranjo bidimensional pode ser calculado com a função numpy.transpose, com o método numpy.ndarray.transpose ou com o atributo numpy.ndarray.T.
Uma matriz é dita ser simétrica, quando . Observamos que é simétrica a matriz
(5.119) |
Agora, não é simétrica a matriz
(5.120) |
Por definição, o determinante de uma matriz é o escalar
(5.125) | |||
(5.126) |
onde é o conjunto de todas as permutações de e é o sinal (ou assinatura) da permutação . Para matrizes , temos
(5.129) | |||
(5.130) |
Enquanto que no caso de matriz , temos
(5.134) | |||
(5.135) | |||
(5.136) | |||
(5.137) | |||
(5.138) | |||
(5.139) | |||
(5.140) |
A função numpy.linalg.det do NumPy pode ser usado para computar o determinante de um arranjo.
O determinante
(5.144) | |||
(5.145) |
O Método de Cramer3939endnote: 39Gabriel Cramer, 1704 - 1752, matemático suíço. Fonte: Wikipédia: Gabriel Cramer. usa de determinantes para o cálculo da solução de sistemas lineares. Dado um sistema linear
(5.146) |
denotamos a matriz dos coeficientes por
(5.147) |
onde denota a -ésima coluna de . Vamos denotar por a matriz obtida de substituindo pelo vetor dos termos constantes , i.e.
(5.148) |
O método consiste em computar a solução com
(5.149) |
para cada .
Vamos resolver o sistema linear dado no Exercício 5.4.1. Sua forma matricial é
(5.150) |
com matriz dos coeficientes
(5.151) |
e vetor dos termos constantes
(5.152) |
Para aplicação do Método de Cramer, calculamos
(5.156) | |||
(5.157) |
e das matrizes auxiliares
(5.161) | |||
(5.162) |
(5.166) | |||
(5.167) |
(5.171) | |||
(5.172) |
Com isso, obtemos a solução
(5.173) | |||
(5.174) | |||
(5.175) |
Complete as lacunas.
Usualmente, matrizes são computacionalmente modeladas como arrays multidimensionais.
A operação de multiplicação matricial entre dois arrays pode ser feita com o operador @ ou com o método numpy.matmul.
A transposta de um numpy.array bidimensional pode ser obtida com o atributo .T ou o método numpy.transpose.
O submódulo numpy.linalg contém o método det para a computação do determinante de um numpy.array.
a) arrays; b) @; c) .T; d) numpy.linalg
Aloque com numpy.array e imprima as seguintes matrizes:
(5.176) |
(5.177) |
(5.178) |
(5.179) |
Aloque as seguintes matrizes com numpy.array
(5.180) |
e
(5.181) |
Então, compute e imprima o resultado das seguintes operações matriciais
Aloque as seguintes matrizes numpy.array:
(5.182) |
e
(5.183) |
Então, compute e imprima o resultado das seguintes operações matriciais:
Escreva a forma matricial do seguinte sistema linear
(5.184a) | |||
(5.184b) | |||
(5.184c) |
Use numpy.array para alocar a matriz dos coeficientes e o vetor dos termos constantes . Então, verifique quais dos seguintes vetores é solução do sistema
Calcule e compute o determinante das seguintes matrizes
(5.185) |
(5.186) |
(5.187) |
Use o Método de Cramer para computar a solução do sistema dado no Exercício 5.4.5. Verifique sua solução com a computada pelo método numpy.linalg.solve.
Dica: .
Desenvolva sua própria função Python para a computação do determinante de uma matriz .
Dica: use a função intertools.permutations para obter um iterador sobre as permutações.
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.