中的吧 关注:213贴子:813
  • 6回复贴,共1

玩转fortran中的复数变量

只看楼主收藏回复

fortran中的复数计算虽然支持得很好,但是对实部和虚部分别操作并不清晰(不像pascal 它是个结构,可以分别赋值): 1. 它只能通过函数来提取实部或者虚部, 2. 但它赋予了类似函数的方法 Z(x,y)
如果要操作Z的实部,比如+x1(其中x1为实变量), 可以如此: Z=Z(real(Z)+x1, aimag(Z))
要操作虚部, 则类似的有 Z=Z(real(Z), Aimag(Z)+x1)
实现是没问题,但是其中调用了两次函数,也许内部处理也就是个结构,算不上计算吧,释怀!


IP属地:荷兰1楼2019-04-05 21:52回复
    希望这个帖子可以被搜到


    IP属地:荷兰2楼2019-04-05 21:56
    回复
      在网上搜了好久也没个明确的指示,结果实际只能是笨的办法


      IP属地:荷兰3楼2019-04-05 22:00
      回复
        但是,如果复变量是数组,这种方法测试失败!! fortran 真是太严苛
        替代方法是分别计算其实部和虚部放于实数中,然后用cmplx(x,y,kind) 来解决! 如果只是写成cmplx(x,y) (居然允许不同的写法),则即使x,y是双精度,合成的复数则不一定是,精度不保证。所以为了精度,一定要用kind来约束。
        辛辛苦苦从pascal 翻译过来的fortran FFT程序终于达到了精度要求。 Fortran真是好累!


        IP属地:荷兰4楼2019-04-10 00:30
        收起回复