错误: 方法错误: 没有方法匹配 abs(::Array{Complex{Float64},1}).



假设我们有这个函数:

function prob(na)
@assert count(!iszero, ui2*na) == 0
b = T0*na
setc(-b)
total = 0.0
for x in Channel(scan)
nab = vi2*x + b 
total += prod([c.^complex(n)/factorial(n) for (c, n) in zip(coef, nab)])
end
return abs(total*omega)^2
end

让我们尝试忽略此函数中的一些变量,因为问题与它们无关,我在这里面临的问题是当我调用这个函数时,顺便说一下,这是一个实习函数,我收到以下错误:

ERROR: MethodError: no method matching abs(::Array{Complex{Float64},1})
Closest candidates are:
abs(::Bool) at bool.jl:83
abs(::Float16) at float.jl:520
abs(::Float32) at float.jl:521
...

现在我知道错误在最后一部分abs(total*omega)^2coefnab是系数类型Intomega也是Int,如果我在一个简单的情况下尝试相同的操作它会起作用,但在这里我不知道为什么!!

total似乎是复数的Vectoromega可能是一些标量。 因此,如果您使用 do (.( 运算符对操作进行矢量化,可能就足够了。看看下面的代码:

julia> cnums = Complex.([2,2,3],[2,7,6])
3-element Array{Complex{Int64},1}:
2 + 2im
2 + 7im
3 + 6im
julia> abs.(cnums .* 1).^2
3-element Array{Float64,1}:
8.000000000000002
53.0
45.00000000000001

或者,最好由@DNF建议:

julia> abs2.(cnums .* 1)
3-element Array{Int64,1}:
8
53
45

相关内容

最新更新