Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran Lapack,DGEEV没有给我正确的特征值_Fortran_Lapack - Fatal编程技术网

Fortran Lapack,DGEEV没有给我正确的特征值

Fortran Lapack,DGEEV没有给我正确的特征值,fortran,lapack,Fortran,Lapack,当我试图用函数计算矩阵的特征值时,我注意到它们是非共轭的,因此是错误的 我试着用简单的(01;-10)矩阵(它有特征值I和-I)进行测试,但它没有给出正确的解决方案 有人能指出我代码中的错误吗 program myProgram real(kind=dp), dimension(2) :: ew_real, ew_imag, ev real(kind=dp), dimension(4*5,4*5) :: work integer info real(kind=d

当我试图用函数计算矩阵的特征值时,我注意到它们是非共轭的,因此是错误的

我试着用简单的(01;-10)矩阵(它有特征值I和-I)进行测试,但它没有给出正确的解决方案

有人能指出我代码中的错误吗

program myProgram
    real(kind=dp), dimension(2) :: ew_real, ew_imag, ev
    real(kind=dp), dimension(4*5,4*5) :: work 
    integer info
    real(kind=dp), DIMENSION(2, 2) :: array
    array = reshape((/ 0.0, -1.0, 1.0, 0.0/), shape(array))      

    call DGEEV('N','V',2,array,2,ew_real,ew_imag,ev,2,ev,2,work,size(work,1),info)
end program
我的程序的输出: (0.00000,0.00000)和(0.00000,-0.40824)

错误
  • ev
    数组只有
    维度(2)
    ,而它应该是
    维度(2,2)
  • work
    应该是长度为
    4n=4*2
    的一维数组
  • 请注意,第一个事实上会破坏你的记忆,因此,你会得到错误的特征值

    改进 此外,您应该使用
    lapack95
    模块,该模块提供了更易于调用的通用接口

    下面的示例显示了这两个调用

    主程序
    仅使用iso_fortran_env:dp=>real64
    使用lapack95
    整数::信息
    真实(种类=dp),维度(2)::ew_真实,ew_图像
    实际(种类=dp),尺寸(4*2)::工作
    实数(种类=dp),维数(2,2)::数组,左ev_,右ev_
    数组=重塑([0,-1,1,0],形状(数组))
    ! 拉帕克
    调用dgeev('N','V',2,数组,2,ew_real,ew_imag,ev_left,2,ev_right,2,工作,大小(工作),信息)
    打印*,'eval1',cmplx(ew_real(1),y=ew_imag(1))
    打印*,'eval2',cmplx(ew_real(2),y=ew_imag(2))
    ! lapack95呼叫
    呼叫geev(阵列、ew_real、ew_imag、vr=ev_right)
    打印*,'eval1',cmplx(ew_real(1),y=ew_imag(1))
    打印*,'eval2',cmplx(ew_real(2),y=ew_imag(2))
    结束程序
    
    输出是

    $。/main
    eval1(0.0000000000000000,1.0000000000000000)
    eval2(0.0000000000000000,-1.0000000000000000)
    eval1(0.0000000000000000,1.0000000000000000)
    eval2(0.0000000000000000,-1.0000000000000000)
    
    错误
  • ev
    数组只有
    维度(2)
    ,而它应该是
    维度(2,2)
  • work
    应该是长度为
    4n=4*2
    的一维数组
  • 请注意,第一个事实上会破坏你的记忆,因此,你会得到错误的特征值

    改进 此外,您应该使用
    lapack95
    模块,该模块提供了更易于调用的通用接口

    下面的示例显示了这两个调用

    主程序
    仅使用iso_fortran_env:dp=>real64
    使用lapack95
    整数::信息
    真实(种类=dp),维度(2)::ew_真实,ew_图像
    实际(种类=dp),尺寸(4*2)::工作
    实数(种类=dp),维数(2,2)::数组,左ev_,右ev_
    数组=重塑([0,-1,1,0],形状(数组))
    ! 拉帕克
    调用dgeev('N','V',2,数组,2,ew_real,ew_imag,ev_left,2,ev_right,2,工作,大小(工作),信息)
    打印*,'eval1',cmplx(ew_real(1),y=ew_imag(1))
    打印*,'eval2',cmplx(ew_real(2),y=ew_imag(2))
    ! lapack95呼叫
    呼叫geev(阵列、ew_real、ew_imag、vr=ev_right)
    打印*,'eval1',cmplx(ew_real(1),y=ew_imag(1))
    打印*,'eval2',cmplx(ew_real(2),y=ew_imag(2))
    结束程序
    
    输出是

    $。/main
    eval1(0.0000000000000000,1.0000000000000000)
    eval2(0.0000000000000000,-1.0000000000000000)
    eval1(0.0000000000000000,1.0000000000000000)
    eval2(0.0000000000000000,-1.0000000000000000)
    
    欢迎来到stackoverflow<代码>工作应该是1D数组,而不是2D数组。DGEV()通常被调用两次:一次执行工作区查询,然后将
    工作分配到最佳大小,然后执行第二次调用DGEV()以计算特征值和特征向量。参见PAR实例。您能打印
    ìnfo
    的返回值吗?它提供了关于调用DGEEV()失败原因的见解。欢迎使用stackoverflow<代码>工作
    应该是1D数组,而不是2D数组。DGEV()通常被调用两次:一次执行工作区查询,然后将
    工作分配到最佳大小,然后执行第二次调用DGEV()以计算特征值和特征向量。参见PAR实例。您能打印
    ìnfo
    的返回值吗?它提供了一个关于调用DGEEV()失败原因的见解。次要评论:我仍然倾向于使用较旧的界面,因为lapack95模块在我看到的地方都不可用,我生活中的首要目标是尽量减少用户的电子邮件数量——这是几年前的事了,希望此后情况有所改变。次要评论:我仍然倾向于使用旧的界面,因为lapack95模块并不适用于我所看到的任何地方,我生活中的首要目标是尽量减少用户的电子邮件数量——这是几年前的事了,希望此后情况有所改变。