如何在Matlab中最小化矩阵对角化绘图脚本的计算时间?

时间:2019-05-19 12:01:43

标签: matlab

我对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')

0 个答案:

没有答案