Matrix Sevick算法的矩阵文件约简
我的代码不允许我为某些条目分配矩阵,也就是说,我的程序运行,但当我获取某些值时,它会导致分段错误。此程序删除方形矩阵的列,将其从5x5减少到5x1Matrix Sevick算法的矩阵文件约简,matrix,fortran90,Matrix,Fortran90,我的代码不允许我为某些条目分配矩阵,也就是说,我的程序运行,但当我获取某些值时,它会导致分段错误。此程序删除方形矩阵的列,将其从5x5减少到5x1 program mcluster real, dimension(:,:),pointer :: m,u real, dimension(5) :: s logical::logi integer:: n,n3 n = 5 allocate(m(n,n)) m(1,1) = 1.0 m(1,2) = 0.0 m(1,3) = 0.0 m(1
program mcluster
real, dimension(:,:),pointer :: m,u
real, dimension(5) :: s
logical::logi
integer:: n,n3
n = 5
allocate(m(n,n))
m(1,1) = 1.0
m(1,2) = 0.0
m(1,3) = 0.0
m(1,4) = 0.0
m(1,5) = 1.0
m(2,1) = 0.0
m(2,2) = 1.0
m(2,3) = 1.0
m(2,4) = 0.0
m(2,5) = 0.0
m(3,1) = 0.0
m(3,2) = 1.0
m(3,3) = 1.0
m(3,4) = 0.0
m(3,5) = 1.0
m(4,1) = 0.0
m(4,2) = 0.0
m(4,3) = 0.0
m(4,4) = 1.0
m(4,5) = 0.0
m(5,1) = 1.0
m(5,2) = 0.0
m(5,3) = 1.0
m(5,4) = 0.0
m(5,5) = 1.0
nbandera1 = 1
nbandera = 0
do i = 1,n
print*, m(i,1:n)
end do
n2 = n
jo = 6
k = 1
2 continue
do i = 1,n
if (nbandera1 .eq. 0) then
go to 5
end if
jo = jo - 1
5 continue
do j = 2,jo
if (m(i,k) .eq. 1 .and. m(i,j) .eq. 1) then
nbandera1=1
j1=j
do l = 1, n
n1 = n - 1
if (m(l,k) .eq. 0 .and. m(l,j1) .eq. 1) then
m(l,k) = m(l,j1)
end if
end do
print*,'jo', jo
do im = 1,n
print*, m(im,1:jo)
end do
n3 = jo - 1
print*,'n,n3', n,n3
allocate(u(n,n3))
do ii = 1,n
j2 = 0
do jj = 1,n
if (jj .ne. j1) then
j2 = j2 + 1
u(ii,j2) = m(ii,jj)
end if
end do
end do
do ii = 1,n
print*, u(ii,1:n3)
end do
deallocate(m)
allocate(m(n,n3))
14 continue
do iii = 1,n
!print*, 'shit'
do jjj = 1,n3
m(iii,jjj) = u(iii,jjj)
end do
end do
do ii = 1,n
print*, m(ii,1:n3)
end do
do ip = 1,n
suma = 0
do jp = 1,n3
suma = suma + m(ip,jp)
end do
s(ip) = suma
end do
k1 = 0
do ik = 1,n-1
if (s(ik) .ne. s(ik+1) .and. s(ik) .eq. 1.0) then
go to 10
end if
k1 = k1 +1
if (ki .eq. n-1) then
stop
end if
end do
10 continue
deallocate(u)
go to 2
else
nbandera1 = 0
if (j .eq. jo) then
nbandera = 1
go to 3
end if
end if
end do
3 continue
if (nbandera .eq. 1) then
go to 4
end if
go to 1
4 continue
end do
1 continue
go to 2
do i = 1,n
print*, m(i,1:n)
end do
end program mcluster
这是专栏,谢谢。我会说得更清楚。这个程序采用由0和1组成的矩阵。明确表示为5x5的矩阵。目标是将该矩阵减少为5x1矩阵之一。(减少列数),此过程用于对粒子簇进行计数。我的算法显然运行良好,直到将矩阵减少到5x2中的一个,但是在下一个过去,也就是说,它不允许我分配一个m(5,2)的矩阵,而不是创建这个矩阵的维数,例如,让我分配m(5,3)中的一个,而不是m(5,2)中的一个。我对此感到困惑。非常感谢。我无法入睡,我观察到我的程序,在一些“转到”方面没有问题,正如我所想的,问题是,它无法将相应的值分配给指针m(n,n),我不知道为什么会发生这种情况。