⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ykb.f90

📁 用雅可比方法求矩阵的特征值和特征向量的FORTRAN程序
💻 F90
字号:
!用雅可比方法求矩阵的特征值和特征向量的FORTRAN程序
program YaKeBi 
parameter(n=5) 
integer p,q,loop 
double precision a(n,n),b(n,n),u(n,n),s,t2s,ss,cs,temp1,temp2 
open(100,file='in.txt',status='old') 
read(100,*) ((a(i,j),j=1,n),i=1,n) 
close(100) 
loop=0 
open(200,file='process.txt',status='unknown') 
do  i=1,n 
	do  j=1,n 
		u(i,j)=0.0d0 
	end do 
end do 
do  i=1,n 
	u(i,i)=1.0d0 
end do 
4 loop=loop+1 
if(loop.gt.100) then 
	write(*,*) 'error' 
	goto 90 
endif 
p=1 
q=1 
do i=1,n 
	do j=1,n 
		b(i,j)=a(i,j) 
	end do 
end do 
do  i=1,n 
	do  j=1,n 
		if(dabs(a(i,j)).gt.dabs(a(p,q))) then 
			p=i 
			q=j 
		endif 
	end do 
end do 
if(b(p,q).lt.1.0d-10) then 
goto 46 
endif 
t2s=2.0d0*a(p,q)/(a(p,p)-a(q,q)) 
s=0.5d0*atan(t2s) 
cs=cos(s) 
ss=sin(s) 
a(p,q)=0.0d0 
a(q,p)=0.0d0 
do   j=1,n 
	if((j.ne.p).and.(j.ne.q)) then 
		a(p,j)=b(p,j)*cs+b(q,j)*ss 
		a(j,p)=a(p,j) 
		a(q,j)=-b(p,j)*ss+b(q,j)*cs 
		a(j,q)=a(q,j) 
	endif 
	temp1=u(j,p) 
    temp2=u(j,q) 
	u(j,p)=temp1*cs+temp2*ss 
	u(j,q)=temp1*ss+temp2*cs 
end do 
a(p,p)=b(p,p)*(ss**2)+2.0d0*b(p,q)*cs*ss+b(q,q)*(cs**2) 
a(q,q)=b(p,p)*(ss**2)-2.0d0*b(p,q)*cs*ss+b(q,q)*(cs**2) 
write(200,*) 'Monitor Loop:',loop 
write(200,*) 'a(n,n):' 
do  i=1,n 
	write(200,45) (a(i,j),j=1,n) 
END DO 
write(200,*) 'u(n,n):' 
do  i=1,n 
	write(200,45) (u(i,j),j=1,n) 
END DO 
45 format(100d30.14) 
46 write(200,*) '--------------------------------------------------' 
goto 4 
open(300,file='out.txt',status='unknown') 
write(300,45) (a(i,i),i=1,n) 
write(300,*) '--------------------归一化之前--------------------' 
do i=1,n 
	write(300,45) (u(i,j),j=1,n) 
END DO
do   j=1,n 
	temp1=0.0d0 
	do   i=1,n 
		temp1=temp1+u(i,j)**2 
	end do 
	temp1=sqrt(temp1) 
	do i=1,n 
		u(i,j)=u(i,j)/temp1 
	end do 
end do 
write(300,*) '--------------------归一化之后--------------------' 
do  i=1,n 
	write(300,45) (u(i,j),j=1,n) 
end do 
90 close(200) 
close(300) 
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -