Как минимизировать время вычислений для сценария построения диагональной матрицы в Matlab? - PullRequest
0 голосов
/ 19 мая 2019

Я довольно новичок в Matlab и надеялся на некоторую помощь в ускорении вычислений и построении собственных значений.У меня есть «пятиугольная» матрица 40x40, с символическими k записями.

Я хочу вычислить все собственные значения и построить их как функцию от k.Поэтому я вызываю eig (H), затем устанавливаю цикл, который заменяет символические k записей числовым значением.Затем я просто строю этот массив, который я назвал «список».

Эта процедура требует много времени для оценки, и мне нужны все собственные значения, а не только наибольшее n.Кто-нибудь есть какие-либо советы относительно того, как я могу ускорить этот расчет?

Что я пробовал: 1) Предварительное выделение моего массива.Похоже, это не сильно ускорило его.Я полагаю, что на данном этапе код по-прежнему содержит собственные значения в виде объектов Root [# 1 ^ 2 + cos (1.0 * 3) ...], а список относительно небольшой.

2) Изменение масштаба аргументовтригональных функций cos ((sqrt (3) / 2) * k) -> cos (k).Это также, кажется, не ускоряет это огромное количество.

Буду очень признателен за любые дальнейшие советы.

a=0.5;
b=0.5;
dq=0.01;
d=0.5;
syms k 
H= [(-2)*a - b*d*sin(sqrt(3)*k), 2*a*cos((sqrt(3)/2)*k), b*d*sin((sqrt(3)/2)*k), 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; 2*a*cos((sqrt(3)/2)*k), -1, ...]


list = [];
for s=0:dq:3
    list=[list,subs(energies,k,s)];
end
q=0:dq:3;
plot(q,transpose(list),'red')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...