Я довольно новичок в 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')