| 查看: 529 | 回复: 0 | ||
[求助]
关于Jacobi法矩阵对角化
|
|
想用fortran语言通过Jacobi方法对角化一个对称矩阵,但是求出来的结果和matlab内置的对角化程序员结果不一样。请问我的对角化程序是哪里出问题了。 subroutine SOLVE(A,N,tezheng,tol) !jacobi法对角化 implicit real*8(a-z) integer::N real*8::A(N,N),tezheng(N) real*8::A1(N,N),R(N,N),RT(N,N),U(N,N),thi(N,N) integer::i,j,k,m,c,b,z,t integer::p,q,x,y real*8 sum do i=1,N do j=1,N A1(i,j)=A(i,j) end do end do k=0 p=0 m=1 do while(m==1) m=0 do i=1,N-1 do j=i+1,N R=0 do q=1,N R(q,q)=1 end do if(abs(A1(i,j))>tol) then m=1 ! 判断非对角矩阵元是否大于给出的阈值,如果是则建立旋转矩阵R来归零矩阵元 if(A1(i,i)==A1(j,j))then R(i,i)=1/1.41421356 R(j,j)=1/1.41421356 R(i,j)=1/1.41421356 R(j,i)=-1/1.41421356 else thi(i,j)=0.5*atan(2*A1(i,j)/(A1(i,i)-A1(j,j))) R(i,i)=cos(thi(i,j)) R(j,j)=cos(thi(i,j)) R(i,j)=-sin(thi(i,j)) R(j,i)=sin(thi(i,j)) end if do x=1,N do y=1,N RT(x,y)=R(y,x) end do end do U=matmul(RT,A1) A1=matmul(U,R) end if end do end do p=p+1 print *,p if (p==100) exit end do do i=1,N tezheng(i)=A1(i,i) end do end subroutine SOLVE |
» 猜你喜欢
津理工大学晶体材料全国重点实验室刘红军教授课题组招收博士生一名
已经有0人回复
【原创讨论】从电子约束到物质编辑:一套可迭代的环形磁场科技树
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有229人回复
【方案分享】单环磁场+轴心控制+偏转导出电子束约束系统(可行性实验)
已经有6人回复
【修正版】单环用磁约束低速电子实验方案(简化版)
已经有0人回复
桂林理工大学物理学专业招收调剂,还有三个名额!!!
已经有22人回复
考博自荐
已经有4人回复
山东大学第二批博士研究生招生
已经有0人回复
中国科学院东莞材料科学与技术研究所-2026年博士招生-吴昊研究员-磁学与自旋电子学
已经有0人回复
《电磁学》教材推荐
已经有1人回复
【急招】合肥工大核聚变材料计算方向2026级工程博士生
已经有4人回复












回复此楼