【问题标题】:Error: Expected PARAMETER symbol in complex constant at (1)错误: (1) 处的复数常量中的预期参数符号
【发布时间】:2013-11-19 14:57:51
【问题描述】:

我正在编写一小段 Fortran 90 代码来使用复变量计算一些数量。

我有一个包含以下指令的子程序:

complex, dimension(3) :: v
integer :: i
real:: tmp


do i = 1,3
  tmp = vg(i)
  v(i) = (tmp, 0.0) 
enddo

v 是一个长度为 3 的复数数组。vg 也是一个长度为 3 且元素为实数的数组。

当我使用 gfortran 4.7.3 编译上述代码时,我收到以下错误:

v(i) =   (tmp,0.0) 

Error: Expected PARAMETER symbol in complex constant at (1)

我不明白这是什么问题。

【问题讨论】:

    标签: fortran


    【解决方案1】:

    你必须使用

    v(i) = cmplx(tmp, 0.0)
    

    您的语法 (re, im) 仅适用于常量表达式,即当 reim 是实数或整数常量时。

    这意味着你不能从一个实变量和一个实常数生成一个复数常数。您必须使用内部函数cmplxreal 变量转换为complex 变量,或从real 变量对(或整数)构建complex 变量。

    【讨论】:

    • 谢谢弗拉基米尔。我什么时候应该使用 cmplx?在其他地方我没有使用它,例如将 v 初始化为 v = (0.0,0.0) 时。为什么在那种情况下编译器没有抱怨?谢谢。
    • 谢谢。但是,当我对复数进行一些运算时,我应该使用 result= cmplx(log(v)) 还是只使用 result = log(v),其中 v 是上面定义为 v(i) = cmplx(tmp, 0.0)?
    • 这是因为 0.0 是一个实常数。您可以在任何地方使用cmplx,如果您愿意,可以在初始化表达式中使用。
    • 在这种情况下,您可以省略转换函数,因为 rhs 上的表达式和 lhs 上的变量都很复杂。如果不是,则会发生默认转换。
    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多