Matriz Diagonal MATLAB

Ammar Ali 30 janeiro 2023
  1. Faça a matriz diagonal usando a função diag() no MATLAB
  2. Faça a matriz diagonal usando a função spdiags() no MATLAB
Matriz Diagonal MATLAB

Neste tutorial, discutiremos como fazer um array diagonal usando as funções diag() e spdiags() no MATLAB.

Faça a matriz diagonal usando a função diag() no MATLAB

Para fazer um array diagonal ou obter as entradas diagonais de um array, você pode usar a função diag() no MATLAB. Por exemplo, vamos fazer um array diagonal de um determinado vetor. Veja o código abaixo.

vector = [1 2 3 4 5];
diagonal = diag(vector)

Resultado:

diagonal =

     1     0     0     0     0
     0     2     0     0     0
     0     0     3     0     0
     0     0     0     4     0
     0     0     0     0     5

No código acima, fizemos um array diagonal 5x5 com as entradas diagonais armazenadas na variável vetor. A função diag() cria um array quadrada dependendo do número de elementos presentes dentro do vetor dado. Se o número de elementos for 5, a matriz diagonal será 5x5. Você também pode alterar a posição da diagonal usando um segundo argumento dentro da função diag(). Se o segundo argumento for igual a 0, o vetor será colocado na diagonal principal. Se o segundo argumento for maior que 0, o vetor será colocado acima da diagonal principal. Se o segundo argumento for menor que 0, o vetor será colocado abaixo da diagonal principal. Por exemplo, vamos colocar o vetor acima da diagonal principal. Veja o código abaixo.

vector = [1 2 3 4 5];
diagonal = diag(vector,1)

Resultado:

diagonal =

     0     1     0     0     0     0
     0     0     2     0     0     0
     0     0     0     3     0     0
     0     0     0     0     4     0
     0     0     0     0     0     5
     0     0     0     0     0     0

No código acima, criamos um array diagonal com os elementos colocados acima da diagonal principal. Como você pode ver, o tamanho da diagonal é 6x6 agora porque o vetor é colocado acima da diagonal principal e, para garantir que todos os elementos sejam colocados dentro do array, o tamanho do array aumentou. Você também pode usar a função diag() para obter as entradas diagonais de um array. Por exemplo, vamos obter as principais entradas diagonais de uma determinada matriz. Veja o código abaixo.

vector = [1 2 3;4 5 6;7 8 9]
diagonal = diag(vector)

Resultado:

vector =

     1     2     3
     4     5     6
     7     8     9


diagonal =

     1
     5
     9

No código acima, usamos a função diag() para encontrar as entradas diagonais do array fornecida, e você pode ver que a função retornou as entradas diagonais do array fornecida. Você também pode obter as entradas da diagonal acima e abaixo da diagonal principal usando o segundo argumento dentro da função diag() como usamos acima para fazer a matriz diagonal com elementos acima da diagonal principal. Verifique este link para mais informações sobre a função diag().

Faça a matriz diagonal usando a função spdiags() no MATLAB

Para fazer um array diagonal com mais de uma diagonal ou para obter todas as entradas diagonais de um array, você pode usar a função spdiags() no MATLAB. O primeiro argumento passado dentro da função spdiags() são os valores, o segundo argumento são as casas diagonais e o terceiro e quarto argumentos são o tamanho do array diagonal. Por exemplo, vamos fazer um array tridiagonal de um determinado vetor. Veja o código abaixo.

v1 = [1 2 3 4 5].';
v2 = [2 2 2 2 2].';
v3 = [3 3 3 3 3].';
diagonal = spdiags([v2 v1 v3],-1:1,5,5);
matrix = full(diagonal)

Resultado:

matrix =

     1     3     0     0     0
     2     2     3     0     0
     0     2     3     3     0
     0     0     2     4     3
     0     0     0     2     5

No código acima, fizemos um array tridiagonal 5x5 com as entradas diagonais armazenadas dentro das três variáveis: v1, v2 e v3. Você pode criar a matriz diagonal com quantos valores desejar. Você também pode alterar os valores diagonais de uma determinada matriz usando a função springs(). Para fazer isso, passe os novos valores no primeiro argumento, o local dos valores como o segundo argumento e a matriz cujos valores você deseja alterar como o terceiro argumento. Por exemplo, vamos mudar as entradas diagonais principais do array tridiagonal acima. Veja o código abaixo.

v1 = [1 2 3 4 5].';
v2 = [2 2 2 2 2].';
v3 = [3 3 3 3 3].';
diagonal = spdiags([v2 v1 v3],-1:1,5,5);
matrix1 = full(diagonal)

v4 = [9 9 9 9 9].';
diagonal = spdiags(v4,0,diagonal);
matrix2 = full(diagonal)

Resultado:

matrix1 =

     1     3     0     0     0
     2     2     3     0     0
     0     2     3     3     0
     0     0     2     4     3
     0     0     0     2     5


matrix2 =

     9     3     0     0     0
     2     9     3     0     0
     0     2     9     3     0
     0     0     2     9     3
     0     0     0     2     9

No código acima, mudamos os valores da diagonal principal da array1. Os valores são alterados e a nova matriz é salva na variável array2. Você também pode extrair todas as entradas diagonais diferentes de zero de uma determinada matriz usando a função spdaigs(). Por exemplo, vamos extrair as entradas diferentes de zero do array acima. Veja o código abaixo.

v1 = [1 2 3 4 5].';
v2 = [2 2 2 2 2].';
v3 = [3 3 3 3 3].';
diagonal = spdiags([v2 v1 v3],-1:1,5,5);
matrix = full(diagonal)

diag_Values = spdiags(matrix)

Resultado:

matrix =

     1     3     0     0     0
     2     2     3     0     0
     0     2     3     3     0
     0     0     2     4     3
     0     0     0     2     5


diag_Values =

     2     1     0
     2     2     3
     2     3     3
     2     4     3
     0     5     3

Os valores diagonais do array dada são extraídos e armazenados dentro da variável diag_values. Os valores diagonais são armazenados nas colunas do array. As primeiras entradas diagonais são armazenadas na primeira coluna e assim por diante. Verifique este link para mais informações sobre a função diag().

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artigo relacionado - MATLAB Matrix