Diferenças entre edições de "Matrizes"
(→Exercícios) |
(→Exercícios) |
||
Linha 356: | Linha 356: | ||
\end{bmatrix} | \end{bmatrix} | ||
</math>. | </math>. | ||
− | # Prove que o produto de matrizes é associativo (AB)C = A(BC) | + | # Prove que o produto de matrizes é associativo (AB)C = A(BC). <syntaxhighlight enclose="none">(A*B)*C == A*(B*C)</syntaxhighlight> ou <syntaxhighlight enclose="none">all(all((A*B)*C == A*(B*C)))</syntaxhighlight> |
− | # Prove que o produto de matrizes é distributivo em relação à soma A(B + C) = AB + AC | + | # Prove que o produto de matrizes é distributivo em relação à soma A(B + C) = AB + AC. <syntaxhighlight enclose="none">A*(B+C) == A*B+A*C</syntaxhighlight>. |
− | # Prove que a matriz identidade é o elemento neutro para o produto AI = A e IA = A. Use <syntaxhighlight enclose="none">I = eye(2)</syntaxhighlight> para gerar a matriz I. | + | # Prove que a matriz identidade é o elemento neutro para o produto AI = A e IA = A. Use <syntaxhighlight enclose="none">I = eye(2)</syntaxhighlight> para gerar a matriz I. Use <syntaxhighlight enclose="none">A*I == A, I*A == A</syntaxhighlight>. |
# Prove que a matriz nula é o elemento absorvente para o produto: OA == AO == O. Use <syntaxhighlight enclose="none">O = zeros(2)</syntaxhighlight> para gerar a matriz nula O. ''Neste exercício, use a letra ó maiúscula (O) para representar a matriz nula, e não o número zero (0). Se usar o número zero, em vez do ó maiúsculo (O), está a multiplicar o escalar zero por uma matriz, e não a matriz nula.'' | # Prove que a matriz nula é o elemento absorvente para o produto: OA == AO == O. Use <syntaxhighlight enclose="none">O = zeros(2)</syntaxhighlight> para gerar a matriz nula O. ''Neste exercício, use a letra ó maiúscula (O) para representar a matriz nula, e não o número zero (0). Se usar o número zero, em vez do ó maiúsculo (O), está a multiplicar o escalar zero por uma matriz, e não a matriz nula.'' | ||
# Prove que <math>\alpha</math>(AB) = (<math>\alpha</math>A)B = A(<math>\alpha</math>B). Use um valor real qualquer como <math>\alpha</math>, à sua escolha. | # Prove que <math>\alpha</math>(AB) = (<math>\alpha</math>A)B = A(<math>\alpha</math>B). Use um valor real qualquer como <math>\alpha</math>, à sua escolha. |
Revisão das 15h32min de 17 de outubro de 2017
Índice
Notação matemática
A notação utilizada em matemática para matrizes introduz a noção de elemento, designado por , a matriz geralmente designada por uma letra maiúscula, , por exemplo, e a geometria da matriz , se esta tiver linhas por colunas. Seja então a seguinte matriz:
Notação do Octave
A matriz representa-se em Octave como:
octave:3> A = [ 1, 2, 3, 4; 5, 4, 6, 8; 9, 10 , 12, 12] A = 1 2 3 4 5 4 6 8 9 10 12 12
O elemento da matriz na linha 2 e coluna 3 pode ser obtido utilizando a seguinte sintaxe:
octave:4> A(2,3) ans = 6
Pode-se também obter toda uma linha, ou toda uma coluna. Toda a segunda linha obtém-se com:
octave:5> A(2,:) ans = 5 4 6 8
Toda a 4 coluna obtém-se com:
octave:6> A(:,4) ans = 4 8 12
A geometria da matriz, o número de linhas e de colunas, obtem-se com o operador size.
size(A) ans = 3 4
Exercícios
- Represente a matriz em Octave.
octave:1> B = [0 1/2 2^2; 1 sqrt(3) sqrt(3)/3] B = 0.00000 0.50000 4.00000 1.00000 1.73205 0.57735
-
Calcule o número de linhas da matriz. (Só o número de linhas, e não o número de linhas e colunas).
octave:7> size(B)(1) ans = 2
-
Apresente a matriz com mais casas decimais.
octave:9> format long octave:10> B B = 0.000000000000000 0.500000000000000 4.000000000000000 1.000000000000000 1.732050807568877 0.577350269189626
-
Crie uma nova matriz C com as colunas 1 e 3 de B.
octave:11> C = B(:,[1 3]) C = 0.000000000000000 4.000000000000000 1.000000000000000 0.577350269189626
Matrizes especiais
O comando diag pode criar uma matriz diagonal, se o argumento for o vetor que constitui a diagonal. Exemplo:
octave:22> diag([7 8 9]) ans = Diagonal Matrix 7 0 0 0 8 0 0 0 9
Repare que o argumento de diag é um vetor, no exemplo apresentado, e o resultado é uma matriz.
Alternativamente, o comando diag devolve o vetor da diagonal de uma matriz, se o argumento for uma matriz.
octave:18> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 octave:19> diag(A) ans = 1 5 9
Matriz identidade
A matriz identidade é gerada com o comando eye(n).
octave:34> eye(3) ans = Diagonal Matrix 1 0 0 0 1 0 0 0 1
Matriz nula
A matriz nula (com todos os elementos a zero) é gerada com o comando zeros.
>> zeros(2) ans = 0 0 0 0 >> zeros(2,4) ans = 0 0 0 0 0 0 0 0 >>
Matrizes com 1
De forma semelhante, pode-se gerar uma matriz só com 1 (com todos os elementos a 1) com o comando ones.
>> ones(3) ans = 1 1 1 1 1 1 1 1 1 >> ones(2,5) ans = 1 1 1 1 1 1 1 1 1 1 >>
Obviamente que, com base nas matrizes geradas por zeros e ones se podem gerar outras matrizes com uma dada constante, como, por exemplo:
>> zeros(2,5)+7 ans = 7 7 7 7 7 7 7 7 7 7 >> ones(3)/4 ans = 0.25000 0.25000 0.25000 0.25000 0.25000 0.25000 0.25000 0.25000 0.25000 >>
Exercícios
Considere a matriz
Verifique o resultado das seguintes expressões:
- Calcule diag(3:3:10)
octave:28> diag(3:3:10) ans = Diagonal Matrix 3 0 0 0 6 0 0 0 9
-
Calcule diag(diag(A)).
octave:30> A = [1 2 3 4; 5 6 7 8; 9 10 11 12] A = 1 2 3 4 5 6 7 8 9 10 11 12 octave:31> diag(diag(A)) ans = Diagonal Matrix 1 0 0 0 6 0 0 0 11
-
Calcule sum(diag(eye(10))).
octave:32> sum(diag(eye(10))) ans = 10
Operações sobre matrizes
Considere a matriz , a matriz e a matriz .
Exercícios
- Calcule A + B. .
- Calcule A + A. .
- Calcule o produto escalar 2 * B. .
- Comprove que o número de colunas de A é igual ao número de linhas de B. size(A)(2) == size(B)(1)
- Calcule o produto A*B. .
- Calcule o produto A*B*C. .
- Prove que o produto de matrizes é associativo (AB)C = A(BC). (A*B)*C == A*(B*C) ou all(all((A*B)*C == A*(B*C)))
- Prove que o produto de matrizes é distributivo em relação à soma A(B + C) = AB + AC. A*(B+C) == A*B+A*C.
- Prove que a matriz identidade é o elemento neutro para o produto AI = A e IA = A. Use I = eye(2) para gerar a matriz I. Use A*I == A, I*A == A.
- Prove que a matriz nula é o elemento absorvente para o produto: OA == AO == O. Use O = zeros(2) para gerar a matriz nula O. Neste exercício, use a letra ó maiúscula (O) para representar a matriz nula, e não o número zero (0). Se usar o número zero, em vez do ó maiúsculo (O), está a multiplicar o escalar zero por uma matriz, e não a matriz nula.
- Prove que (AB) = (A)B = A(B). Use um valor real qualquer como , à sua escolha.
Mais operações
Transposta
A matriz transposta de A representa-se matematicamente como . Por definição .
Se a matriz diz-se simétrica.
Em Octave, a matriz transposta representa-se por A'
Exercícios
- Prove que
- Prove que
- Prove que
- Prove que
Matrizes mágicas
Uma matriz de n por n contendo os números de 1 até n² diz-se uma matriz mágica, se cada uma das colunas, cada uma das linhas e as duas diagonais principais tiverem a mesma soma.
Considere a matriz M e a matriz N.
A soma das linhas de M, das colunas e de cada uma das duas diagonais dá sempre 15. Da mesma forma, a soma das linhas de N, das colunas e das diagonais dá sempre 34. Ambas são matrizes mágicas.
Verifica-se o também a seguinte propriedade: a soma de cada linha, coluna ou diagonal é igual à soma de todos os elementos da matriz a dividir pela dimensão da mesma. Ou seja, na matriz M todas as linhas, colunas e diagonais somam 15 que é igual a 45 (soma de todos os elementos da matriz) a dividir por 3 (a dimensão da matriz). De igual modo, todos os elementos da matriz N somam 136, que dividindo por 4, dá 34, que é a soma das linhas, colunas e diagonais.
Verificar as propriedades das matrizes mágicas
- a soma das colunas são todas iguais
range(sum(N)) == 0
ou
length(unique(sum(N))) == 1
- a soma das colunas e a soma das linhas dão o mesmo valor
O predicado anterior tem que dar 1 (verdadeiro) aplicado a qualquer uma das matrizes anteriores M ou N.
Aplicado a uma matriz , tem que dar 0 (falso).
range([sum(N) sum(N')]) == 0
ou
length(unique([sum(N) sum(N')])) == 1
O jogo sudoku
O Sudoku é um quebra-cabeças popular, que consiste na preenchimento dos números em falta num tabuleiro de 9 matrizes de 3x3, colocadas de forma a formarem um grande tabuleiro de 9x9.
Apenas algumas casas começam por estar preenchidas, como ilustrado na seguinte figura.
|
|
| |||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||
|
|
|
As regras de preenchimento são simples:
- cada coluna tem que ter cada um dos algarismos de 1 a 9;
- cada linha tem que ter cada um dos algarismos de 1 a 9;
- cada algarismo só pode ocorrer 1 vez em cada linha e em cada coluna
- cada matriz de 3x3 tem que ser preenchida com os algarismos de 1 a 9
O tabuleiro seguinte está preenchido de acordo com estas regras.
|
|
| |||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||
|
|
|
Propriedades do tabuleiro de sudoku
No Octave vamos representar o tabuleiro por uma matriz de 9x9, em que as casas por preencher ficam com o algarismo 0. As casas preenchidas têm um algarismo entre 1 e 9.
facil = [ 0 7 2 0 0 1 8 0 5; 0 5 1 0 3 7 0 9 0; 4 0 0 2 0 8 1 0 7; 0 4 7 5 2 0 3 0 0; 0 2 6 7 0 0 5 0 1; 5 0 0 1 0 6 0 2 9; 2 9 0 3 7 0 0 1 0; 7 0 0 0 6 2 0 5 3; 3 0 8 0 1 0 2 7 0 ];
Dada a matriz anterior, podemos:
- calcular o número de casas por preencher
>> length(facil(facil == 0)) ans = 36
- isolar uma dada submatriz, por exemplo, a submatriz do canto superior direito
>> facil(1:3, 7:9) ans = 8 0 5 0 9 0 1 0 7
Como apresentar um tabuleiro de sudoku neste wiki
Exercício adicional
Gerar matrizes a partir de funções f(i,j)
Leitura adicional
Reveja os conceitos apresentados sobre matrizes e outros um pouco mais avançados em Vectors and matrices, Octave Programming Tutorial.