24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3138  |  回复: 2

bdx1989

新虫 (初入文坛)

[求助] matlab编程中关于for语句中[V,D]=eig(A)的用法已有1人参与

我在编程中有一段语句如下
for J=0:Jmax
    hsym=zeros(2*J+1);  %%规定零矩阵大小,其大小随每次循环的J改变而改变
    for Kp=-J:J
        m=m+1;
        n=0;
        for K=-J:J
            n=n+1;
            if Kp==K
                hsym(n,m)=F*(J*(J+1)-K^2)+G*K^2;
            elseif Kp==K+2
                hsym(n,m)=H*(0.25*(J*(J+1)-K*(K+1))*(J*(J+1)-(K+1)*(K+2)))^(0.5);
            elseif Kp==K-2
                hsym(n,m)=H*(0.25*(J*(J+1)-K*(K-1))*(J*(J+1)-(K-1)*(K-2)))^(0.5);
            end
        end
    end  %%以上是给矩阵hsym的某些矩阵元赋值。没有问题
    [evrp,evlp]=eig(hsym);  %%我需要矩阵的本证矢量,所以需要用到[V,D]=eig(A)的形式。
    for e=12*J+1)
        evl(J^2+e,J^2+e)=0.5*(A+C)*J*(J+1)+0.5*(A-C)*evlp(e,e);
        for ee=12*J+1)
            evr(J^2+e,ee)=evrp(e,ee);
        end
    end  %%以上是将hsym所得的本征值和本证矢量转移到新矩阵中
end
但是这里运行的时候一直有问题,如果把最前面第一个for去掉的话只计算一个矩阵的本征值和本证矢量,这段程序是没有问题的。但是加上第一个for语句就出问题了。第一个for我的用意是将循环里的所有矩阵的本征值和本证矢量求出,最后分别整合到两个大矩阵中,一个矩阵装本征值,一个矩阵装本证矢量。如果将第一个for语句去掉单独算一个矩阵,没有问题,而且本征值和本证矢量都可以原封不动的转移到大矩阵中,位置也是我想要的位置没有问题。但是加上第一个for语句就不行了。
我觉得应该是  [evrp,evlp]=eig(hsym) 这里有问题,但是我不知道如何解决。菜鸟请大神们帮忙解决一下。含泪感谢。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Mokeer

新虫 (初入文坛)

【答案】应助回帖

感谢参与,应助指数 +1
obviously your new evl and evr matrices are changing their sizes. so you can not stack them in sized-changed matrices
2楼2014-04-24 08:56:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bdx1989

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by Mokeer at 2014-04-24 08:56:38
obviously your new evl and evr matrices are changing their sizes. so you can not stack them in sized-changed matrices

我只要把循环里所有的值都覆进去就好了,所以evr和e v l的大小是固定的,我已在最前定义了这里没有显示出来不好意思
3楼2014-04-24 10:41:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 bdx1989 的主题更新
信息提示
请填处理意见