我正在研究一个相当复杂的问题而且出现了一些错误,我已经缩小了错误,我发现的内容对我来说没有意义。
我有一个维D = 6的矩阵H0,它依赖于一个参数,在循环中我计算它的特征值并绘制它们,这是我正确解决的问题的一部分。
我还需要计算另一个与H0非常相似的矩阵,我们称之为Hren。这个Hren依赖于H0和一些参数alpha,而对于alpha = 0,我们有Hren = H0。在尝试alpha的任何值之前我测试alpha = 0因为它应该给我与H0相同的结果而且它不会。
我已经非常容易地缩小了循环这一部分的错误:
Hren = zeros(D);
for i = 1:D
for j = i+1:D
Hren(i,j) = H0(i,j);%*renormfunction(H0(i,j),0.5*alpha*(f(i)-f(j))^2,freqcutoff);
Hren(j,i) = H0(j,i);%Hren(i,j);
Hren(i,i) = H0(i,i);
end
end
在评论中,我提供了代码,我希望它如何工作,并简化和显示我的问题我已经做了一个简单的Hren = H0但元素到元素,仍然是我的参数的一些值(x轴在情节)我没有得到Hren = H0。这怎么可能?
如果在循环结束时我写Hren=H0
我没有得到这个错误,事实上两个矩阵都是相同的,应该是这样。
我现在将向您展示上面的相同情节,但对于Hren而不是H0,如果两个矩阵相等,它应匹配。
我的完整代码,脚本和辅助功能:
功能:
function result = Hrabi(w,W,g,dim)
a = ladder(dim);
Z = [1,0;0,-1];
X = [0,1;1,0];
result = w*kron(a'*a,eye(2)) + 0.5*W*kron(eye(dim),Z) + g*kron(a'+a,X);
end
maint脚本:
dim = 50;
freqTLS = 1;
freqCAVITY = 1;
freqcutoff = 100;
D = 6;
glist = linspace(1E-6,2.5,200);
alphalist = 0;
X = kron(eye(dim),[0,1;1,0]);
gaps = zeros(length(glist),D-1);
debug = [];
gindex = 0;
alphaindex = 0;
for g = glist
gindex = gindex + 1;
for alpha = alphalist
alphaindex = alphaindex + 1;
HS = Hrabi(freqTLS,freqCAVITY,g,dim);
[vecsHS,valsHS] = eigs(HS,D,'sa');
FenbaseHS = zeros(D);
for i = 1:D
for j = 1:D
FenbaseHS(i,j) = vecsHS(:,i)'*X*vecsHS(:,j);
end
end
[vecsF,valsF] = eig(FenbaseHS);
H0 = vecsF'*valsHS*vecsF;
f = diag(vecsF'*FenbaseHS*vecsF);
Hren = zeros(D);
for i = 1:D
for j = i+1:D
Hren(i,j) = H0(i,j);
Hren(j,i) = H0(j,i);
Hren(i,i) = H0(i,i);
end
end
%Hren = H0;
energies = eig(Hren);
energies = sort(energies-0*min(energies));
energies = energies(2:length(energies));
gaps(gindex,:) = energies;
end
端
figure();
plot(glist,gaps,'.b')