Questão 3: Usando numPy, escreva um programa que leia uma matriz quadrada elemento a elemento do teclado e classifique-a segundo uma das 5 categorias abaixo:
  1. Definida positiva: todos os auto-valores são positivos.
  2. Semidefinida positiva: todos os auto-valores são não-negativos (isto é, podem ser zero).
  3. Definida negativa: todos os auto-valores são negativos.
  4. Semidefinida negativa: todos os auto-valores são não-positivos (isto é, podem ser zero)…
  5. Indefinida: existe ao menos um auto-valor positivo e ao menos um auto-valor negativo.
Nesse exercício, considere que um auto-valor cujo módulo seja inferior a 1.0 times 10^-6 na realidade vale zero.

Passo 1

A gente tem que ler uma matriz quadrada de tamanho n digitando cada elemento, calcular os autovalores com o NumPy e depois classificar a matriz conforme o sinal desses autovalores, lembrando que valores com módulo menor que 1.0×10⁻⁶ são considerados zero.

Passo 2

Primeiro, importamos o NumPy e pedimos ao usuário o tamanho n da matriz. Em seguida, inicializamos uma matriz n×n com zeros e usamos dois loops for para preencher cada elemento via input.

Passo 3

Depois de montar a matriz, usamos a função np.linalg.eigvals para obter o vetor de autovalores. Aplicamos o critério de tolerância: qualquer autovalor cuja
valor absoluto for menor que 1.0×10⁻⁶ vira exatamente zero.

Passo 4

Com os autovalores ajustados, verificamos quantos são positivos, quantos são negativos e quantos são zeros usando np.all e operadores lógicos. A partir daí, aplicamos as definições: se todos >0 → definida positiva; se todos ≥0 → semidef. positiva; se todos <0 → definida negativa; se todos ≤0 → semidef. negativa; caso contrário, indefinida.

Passo 5

Por fim, imprimimos a categoria apropriada. Isso resolve o problema pedindo e classificando a matriz automaticamente. O programa cobre todos os casos e usa a regra de tolerância para tratar autovalores quase nulos.

Resposta

import numpy as np
def main():
# lê o tamanho da matriz
n = int(input("Digite o tamanho n da matriz quadrada: "))
# inicializa a matriz n×n
M = np.zeros((n, n), dtype=float)
# lê os elementos da matriz
for i in range(n):
    for j in range(n):
        M[i, j] = float(input(f"M[{i+1},{j+1}] = "))

# calcula os autovalores
eigvals = np.linalg.eigvals(M)

# aplica tolerância: valores próximos de zero viram zero
tol = 1.0e-6
eigvals[np.abs(eigvals) < tol] = 0.0

# verifica sinais dos autovalores
all_pos = np.all(eigvals > 0)
all_nonneg = np.all(eigvals >= 0)
all_neg = np.all(eigvals < 0)
all_nonpos = np.all(eigvals <= 0)

# classifica a matriz
if all_pos:
    print("Definida positiva")
elif all_nonneg:
    print("Semidefinida positiva")
elif all_neg:
    print("Definida negativa")
elif all_nonpos:
    print("Semidefinida negativa")
else:
    print("Indefinida")
if name == “main”:
main()

Exercícios relacionados