24小时热门版块排行榜    

查看: 470  |  回复: 1

田山东

捐助贵宾 (著名写手)

[求助] H*pinv(H)为什么在非对角元出现非零值?

如题,代码如下。多谢各位同学啊!!
clc;
clear;
N=8;
M=5;

A1=zeros(N,N);
A2=zeros(N,N);
B1=zeros(N,N);
B2=zeros(N,N);
C1=zeros(N,N);
C2=zeros(N,N);

H=zeros(M*N,M*N);
Gr=zeros(M*N,M*N);

t=2.8;

%设定zigzag边界系统哈密顿矩阵
for j=1:N-1
if(mod(j,2)==0)
    A1(j,j+1)=-t;
    A1(j+1,j)=-t;
end

if(mod(j,2)==1)
A2(j,j+1)=-t;
A2(j+1,j)=-t;
end
end

for j=1:N
    B1(j,j)=-t;
    B2(j,j)=-t;
end

C2=B1';
C1=B2';

%系统整体哈密顿矩阵
for j=1:M
    if(mod(j,2)==1)
    H((j-1)*N+1:j*N, (j-1)*N+1:j*N)=A1;   
    else
    H((j-1)*N+1:j*N, (j-1)*N+1:j*N)=A2;     
    end
end
        
for  j=1:M
    if(mod(j,2)==1)
        if j==1
    H((j-1)*N+1:j*N,j*N+1: (j+1)*N)=B1;
        else if j<M
    H((j-1)*N+1:j*N,j*N+1: (j+1)*N)=B1;
    H((j-1)*N+1:j*N, (j-2)*N+1: (j-1)*N)=C1;
            else
    H((j-1)*N+1:j*N, (j-2)*N+1: (j-1)*N)=C1;            
            end
        end
    else
    H((j-1)*N+1:j*N,j*N+1: (j+1)*N)=B2;
    H((j-1)*N+1:j*N, (j-2)*N+1: (j-1)*N)=C2;      
    end
end

Gr=pinv(H);
HH=Gr*H;

这里应该得到单位矩阵,但是在HH非对角元得到非零值。很奇怪 啊!!求高人解答!!

[ Last edited by 田山东 on 2013-8-22 at 16:05 ]
回复此楼

» 猜你喜欢

everythinghasitsseason.enjoyyourlife.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

alorsmail

铁杆木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
xzhdty: 金币+1, 感谢参与 2013-08-22 20:02:01
田山东: 金币+5, ★★★很有帮助, 多谢回复,一会摸索下 2013-08-22 20:10:03
这里应该是误差,
如果你对原 HH 做以下变换的话,就会得到单位矩阵
threshold = 0.5;
HH1 = double(HH>=threshold);

当然,如果你取 threshold =0.1; 的话,你会得到另外两个非零 对角
研究一下为什么 threshold 会影响你的结果,
2楼2013-08-22 17:04:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 田山东 的主题更新
信息提示
请填处理意见