gpt4 book ai didi

visual-studio - QR分解Fortran错误

转载 作者:行者123 更新时间:2023-12-04 05:45:01 25 4
gpt4 key购买 nike

我对 QR 分解方法有疑问。我使用 dgeqrf 子例程进行分解,但编译器中没有错误,但之后出现问题。我还没发现哪里错了。另一个问题是,A=Q*R=>如果A矩阵为零,分解是否可以为零或失去秩。

program decomposition

!CONTAINS
!subroutine Qrdecomposition(A_mat, R)
real,dimension(2,2) :: A_mat !real,dimension(2,2),intent(inout)
:: A_mat
real,dimension(2,2) :: R !real,dimension(2,2),intent(out)
:: R
real,dimension(2,2) :: A
integer :: M,N,LDA,LWORK,INFO
real,allocatable, dimension(:,:) :: TAU
real,allocatable, dimension(:,:) :: WORK
external dgeqrf
M=2
N=2
LDA=2
LWORK=2
INFO=0
A_mat(1,1)=4
A_mat(1,2)=1
A_mat(2,1)=3
A_mat(2,2)=1
A=A_mat

call dgeqrf(M,N,A,TAU,WORK,LWORK,INFO)
R=A
print *,R,WORK,LWORK

!end subroutine Qrdecomposition
end program decomposition

最佳答案

我在您的代码中发现三个错误:

1) 您忘记了 dgeqrfLDA 参数,

2) TAUWORK 必须显式分配,

3) 所有数组都应以 double 声明,以与dgeqrf接口(interface)一致:

program decomposition

!CONTAINS
!subroutine Qrdecomposition(A_mat, R)
! Note: using '8' for the kind parameter is not the best style but I'm doing it here for brevity.
real(8),dimension(2,2) :: A_mat !real,dimension(2,2),intent(inout)
real(8),dimension(2,2) :: R !real,dimension(2,2),intent(out)
real(8),dimension(2,2) :: A
integer :: M,N,LDA,LWORK,INFO
real(8),allocatable, dimension(:,:) :: TAU
real(8),allocatable, dimension(:,:) :: WORK
external dgeqrf
M=2
N=2
LDA=2
LWORK=2
INFO=0
A_mat(1,1)=4
A_mat(1,2)=1
A_mat(2,1)=3
A_mat(2,2)=1
A=A_mat

allocate(tau(M,N), work(M,N))
call dgeqrf(M,N,A,LDA,TAU,WORK,LWORK,INFO)
R=A
print *,R,WORK,LWORK

!end subroutine Qrdecomposition
end program decomposition

在某些情况下,Fortran 确实会执行数组的自动分配,但通常不应指望它,这里的情况并非如此。

编辑第3点由roygvib指出,见下文。

关于visual-studio - QR分解Fortran错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50474395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com