HouseHolder Трансформация-QR-разложение - PullRequest
0 голосов
/ 03 июня 2018

Я работаю над факторизацией QR, здесь работает код, но моя проблема, например, в том, что существует массив dimension(6,4), но я хочу разложить dimension(6,2).Я использую подпрограмму (dgeqrf), поэтому я должен использовать другую или нет?Эта подпрограмма берет всю матрицу, но я хочу дать другой размер столбца, потому что я могу разложить матрицу (6,2).Я поделился текущим результатом для этой программы, но я хочу, чтобы (6,2) размерное разложение не (6,4) размерное

!Current result:          but I want:
! x x x x                  x x x x
! 0 x x x                  0 x x x
! 0 0 x x                  0 0 x x
! 0 0 0 x                  0 0 x x
! 0 0 0 0                  0 0 x x
! 0 0 0 0                  0 0 x x

 program decomposition

 !CONTAINS
 !subroutine Qrdecomposition(A_mat, R)

 real(8),dimension(6,4)   :: A_mat    
 !real,dimension(2,2),intent(inout)
 real(8),dimension(6,4)   :: R        
 !real,dimension(2,2),intent(out)
 real(8),dimension(6,4)                  :: A
 integer                              :: M,N,LDA,LWORK,INFO,i,j
 real(8),allocatable, dimension(:,:)     :: TAU
 real(8),allocatable, dimension(:,:)     :: WORK
 external   dgeqrf
 M=6
 N=4
 LDA=6
 LWORK=4
 INFO=0
 A_mat(1,:)=[2,1,2,6 ]
 A_mat(2,:)=[10,4,3,2]
 A_mat(3,:)=[1,3,2,9]
 A_mat(4,:)=[8,9,2,7]
 A_mat(5,:)=[9,5,9,4]
 A_mat(6,:)=[9,10,6,6]

A=A_mat

allocate(tau(M,N), work(M,N))
call dgeqrf(M,N,A,LDA,TAU,WORK,LWORK,INFO)
R=A
R(:,:)=0
do i=1,6
do j=i,4
    R(i,j)=A(i,j)
end do
end do

print *,R

!end subroutine Qrdecomposition
end program decomposition 
!Input
!A =
! 2     1     2     6
!10     4     3     2
! 1     3     2     9
! 8     9     2     7
! 9     5     9     4
! 9    10     6     6
 !The result should be like that
 !  -18.193      -13.851      -10.278      -10.278
 !       0        6.336     0.099656       6.5706
 !       0            0      0.64881       5.2419
 !       0            0       -3.887      -3.5114
 !       0            0       4.0589      -1.1447
 !       0            0      -0.5819      -5.6624
...