Я пытаюсь диагонализировать матрицу 5x5 с помощью Sympy для решения физической задачи. Использование числовых значений кажется достаточно быстрым, но поскольку мне нужно провести диагонализацию большого количества символов в матрице, это занимает очень много времени. Какова временная сложность (и название) алгоритма, используемого в Sympy? Как много времени это займет? Может ли этому действительно понадобиться миллион лет?
H в следующем коде — это матрица
import sympy as sp
from sympy.physics.quantum.constants import hbar
# define symbols
w = sp.Symbol('omega')
e = sp.Symbol('e')
r = sp.Symbol('r')
E_e = sp.Symbol('E_e')
E_t = sp.Symbol('E_t')
E_x = sp.Symbol('E_x')
E_y = sp.Symbol('E_y')
n_1 = sp.Symbol('n_1')
n_2 = sp.Symbol('n_2')
n_3 = sp.Symbol('n_3')
# construct matrices
t2_x_e = sp.Matrix([[0, (5/(16*sp.pi))**sp.Rational(1,2)*n_3*((8*sp.pi)/15)-n_1*(3**(-sp.Rational(1,2)))*sp.sqrt(2)*(15/(4*sp.pi))**sp.Rational(1,2)*((4*sp.pi)/15)], [0, (3**(-sp.Rational(1,2)))*sp.sqrt(2)*(15/(16*sp.pi))**sp.Rational(1,2)*n_3*((8*sp.pi)/15)+n_2*(3**-sp.Rational(1,2))*(15/(16*sp.pi))**sp.Rational(1,2)*((8*sp.pi)/15)], [(3**(-sp.Rational(1,2)))*sp.sqrt(2)*(15/(4*sp.pi))**sp.Rational(1,2)*n_3*((4*sp.pi)/15)-n_2*(3**-sp.Rational(1,2))*(15/(4*sp.pi))**sp.Rational(1,2)*((4*sp.pi)/15),0]])
t2_y_e = sp.Matrix([[((5/(16*sp.pi))**sp.Rational(1,2))*(n_3)*((8*sp.pi)/15)-(n_1)*(3*sp.Rational(-1,2))*(sp.sqrt(2))*(15/(4*sp.pi))**sp.Rational(1,2)*((4*sp.pi)/15),0],[(-3**sp.Rational(-1,2))*(sp.sqrt(2))*((15/(16*sp.pi))**sp.Rational(1,2))*n_3*((8*sp.pi)/15)-n_2*(3**sp.Rational(-1,2))*((15/(4*sp.pi))**sp.Rational(1,2))*((4*sp.pi)/15),0],[0,(3**sp.Rational(-1,2))*(sp.sqrt(2))*((15/(4*sp.pi))**sp.Rational(1,2))*n_3*((4*sp.pi)/15)-n_2*(3**sp.Rational(-1,2))*((15/(16*sp.pi))**sp.Rational(1,2))*((8*sp.pi)/15)]])
H = sp.BlockMatrix([
[(E_t + hbar*w) * sp.eye(3), e*E_x*r*t2_x_e + e*E_y*r*t2_y_e ],
[(e*E_x*r*t2_x_e + e*E_y*r*t2_y_e).T, E_e * sp.eye(2)],
]).as_explicit()
Подробнее здесь: https://stackoverflow.com/questions/684 ... with-sympy
Время, необходимое для диагонализации матрицы с помощью Sympy ⇐ Python
Программы на Python
-
Anonymous
1736185156
Anonymous
Я пытаюсь диагонализировать матрицу 5x5 с помощью Sympy для решения физической задачи. Использование числовых значений кажется достаточно быстрым, но поскольку мне нужно провести диагонализацию большого количества символов в матрице, это занимает очень много времени. Какова временная сложность (и название) алгоритма, используемого в Sympy? Как много времени это займет? Может ли этому действительно понадобиться миллион лет?
H в следующем коде — это матрица
import sympy as sp
from sympy.physics.quantum.constants import hbar
# define symbols
w = sp.Symbol('omega')
e = sp.Symbol('e')
r = sp.Symbol('r')
E_e = sp.Symbol('E_e')
E_t = sp.Symbol('E_t')
E_x = sp.Symbol('E_x')
E_y = sp.Symbol('E_y')
n_1 = sp.Symbol('n_1')
n_2 = sp.Symbol('n_2')
n_3 = sp.Symbol('n_3')
# construct matrices
t2_x_e = sp.Matrix([[0, (5/(16*sp.pi))**sp.Rational(1,2)*n_3*((8*sp.pi)/15)-n_1*(3**(-sp.Rational(1,2)))*sp.sqrt(2)*(15/(4*sp.pi))**sp.Rational(1,2)*((4*sp.pi)/15)], [0, (3**(-sp.Rational(1,2)))*sp.sqrt(2)*(15/(16*sp.pi))**sp.Rational(1,2)*n_3*((8*sp.pi)/15)+n_2*(3**-sp.Rational(1,2))*(15/(16*sp.pi))**sp.Rational(1,2)*((8*sp.pi)/15)], [(3**(-sp.Rational(1,2)))*sp.sqrt(2)*(15/(4*sp.pi))**sp.Rational(1,2)*n_3*((4*sp.pi)/15)-n_2*(3**-sp.Rational(1,2))*(15/(4*sp.pi))**sp.Rational(1,2)*((4*sp.pi)/15),0]])
t2_y_e = sp.Matrix([[((5/(16*sp.pi))**sp.Rational(1,2))*(n_3)*((8*sp.pi)/15)-(n_1)*(3*sp.Rational(-1,2))*(sp.sqrt(2))*(15/(4*sp.pi))**sp.Rational(1,2)*((4*sp.pi)/15),0],[(-3**sp.Rational(-1,2))*(sp.sqrt(2))*((15/(16*sp.pi))**sp.Rational(1,2))*n_3*((8*sp.pi)/15)-n_2*(3**sp.Rational(-1,2))*((15/(4*sp.pi))**sp.Rational(1,2))*((4*sp.pi)/15),0],[0,(3**sp.Rational(-1,2))*(sp.sqrt(2))*((15/(4*sp.pi))**sp.Rational(1,2))*n_3*((4*sp.pi)/15)-n_2*(3**sp.Rational(-1,2))*((15/(16*sp.pi))**sp.Rational(1,2))*((8*sp.pi)/15)]])
H = sp.BlockMatrix([
[(E_t + hbar*w) * sp.eye(3), e*E_x*r*t2_x_e + e*E_y*r*t2_y_e ],
[(e*E_x*r*t2_x_e + e*E_y*r*t2_y_e).T, E_e * sp.eye(2)],
]).as_explicit()
Подробнее здесь: [url]https://stackoverflow.com/questions/68457738/time-needed-to-diagonalise-matrix-with-sympy[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия