主题:矩阵特征向量操作
程序内容: 公式见附件
有三个大矩阵,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,)相乘得到的结果 肯定是个常数。可能是复数吧。
有三个大矩阵,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,)相乘得到的结果 肯定是个常数。可能是复数吧。