es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener los eigenvectores numéricos de una matriz simbólica, siempre y cuando se conozcan los rangos de los elementos de la matriz, utilizando Python?

Tengo una matriz simbólica de 2 por 2 M = Matrix([[a, b],[c, d]]) donde se conocen los rangos numéricos de sus elementos {a, b, c, d}. ¿Hay métodos numéricos conocidos en Python que devuelvan los rangos de los valores propios y vectores propios de M?

Soy nuevo en Python, así que intenté usar el método sympy.diagonalize() P, D = M.diagonalize() pero parece que sólo funciona si los elementos están fijos (no en rangos).
Aquí hay un código de ejemplo:

from sympy import *
a, b, c, d = symbols('a b c d')
M = Matrix([[a, b],[c, d]])
#Rangos de los elementos
a_min = 1
a_max = 4     

b_min = 0.5
b_max = 7

c_min = -1
c_max = 1

d_min = -1
d_max = 1

for a in linspace(a_min,a_max,5):
    for b in linspace(b_min,b_max,5):
        for c in linspace(c_min,c_max,5):
            for d in linspace(d_min,d_max,5):
                P, D = M.diagonalize() 
print(P)
print(D)

¿Existe alguna forma de obtener P y D con rangos numéricos para cada elemento?

Muchas gracias.

Saludos cordiales.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, el método sympy.diagonalize() solo funciona para valores fijos de los elementos de la matriz y no puede manejar rangos de valores.

    Sin embargo, existen métodos numéricos disponibles en Python que pueden devolver los rangos de autovalores y autovectores para una matriz dada con rangos dados de los elementos. Uno de esos métodos es el método de Aritmética de Intervalos, que se puede implementar utilizando la biblioteca Interval en Python.

    Aquí tienes un ejemplo de código que utiliza la biblioteca Interval para obtener los rangos de autovalores y autovectores para una matriz 2×2 con rangos de valores dados:

    from interval import interval, inf
    
    # rango de los elementos de la matriz
    a_range = interval[1, 4]
    b_range = interval[0.5, 7]
    c_range = interval[-1, 1]
    d_range = interval[-1, 1]
    
    # crear matriz de intervalos
    M = [[interval[a_range], interval[b_range]],
         [interval[c_range], interval[d_range]]]
    
    # encontrar autovalores y autovectores
    eigvals = []
    eigvecs = []
    for i in range(len(M)):
        # calcular autovalores y autovectores para cada fila
        eig = M[i].eigen()
        eigvals.append(eig[0])
        eigvecs.append(eig[1][0])  # el primer autovector es el único no trivial para una matriz 2x2
    
    # imprimir resultados
    print("Rangos de los Autovalores: ", eigvals)
    print("Rangos de los Autovectores: ", eigvecs)
    

    Ten en cuenta que el código anterior utiliza el método eigen() de la biblioteca Interval para calcular los autovalores y autovectores para cada fila de la matriz, y luego devuelve los rangos de estos valores.

    Espero que esto te ayude a obtener los resultados deseados. Hazme saber si tienes alguna pregunta adicional.

Comments are closed.