程序内容:   公式见附件
有三个大矩阵,h,hx,hy,他们的大小都是(4*m*n,4*m*n);其中,hx=h+1.0,hy=h-1.0,对矩阵整体操作。首先求矩阵h的特征值与特征向量。我已经求出h矩阵了,得到的结果与matlab得到的结果相同;得到的h的特征值与matlab得到的相同,但是得到的h的特征向量与matlab得到的不同。我取m=4,n=4,得到的特征向量应该是1行64列的吧?就是到下面这个语句运行不下去了:

  4*m*n是矩阵特征值的个数。主要目的是看下特征值中,Effec这个值在哪两个特征值之间,找到这个位置i,每个特征值对应自己的特征向量。
do i=1,4*m*n     总的特征值个数
      if(eigenvalue(i))>=Effec.and. eigenvalue(i+1)<=Effec) then  找满足条件的特征值
        do temp=1,i     小于Effec那些特征值的代号
                do j=i+1,4*m*n   大于Effec那些特征值的代号
          conduc=conduc+(matmul(matmul(transpose(eigenvector(:,temp)),hx),eigenvector(:,j))*matmul(matmul(transpose(eigenvector(:,j)),hy),eigenvector(:,temp)))/(eigenvalue(i)-eigenvalue(temp))**2
               end do
      end do
         end if  
   end do
matmul(),矩阵乘积函数,transpose用来求转置矩阵。
Vx,Vy就用hx,hy矩阵代替;|a> 代表小于Effec的那些特征值 对应的特征向量,大小为(4*m*n,1),那么<a| 就是它的转置矩阵吧?|b> 代表大于Effec的那些特征值 对应的特征向量,大小也为(4*m*n,1);然后对它们求和,用condc表示,三个矩阵:(1,4*m*n),(4*m*n,4*m*n),(4*m*n1,)相乘得到的结果 肯定是个常数。可能是复数吧。