2

我正在尝试在 Julia 中实现此功能,但我没有得到它。我认为这是因为广播,它似乎不适用于数组。当我用点写关系运算符时(比如.>而不是>),错误的数量减少了,但它指责“TypeError:布尔上下文中使用的非布尔(BitVector)”。我怎样才能解决这个问题?

function Rulkov(N, X, Y, α)
    global σ, μ
    for n=1:1:N
    if (X[n, 1]<=0)
        X[n, 2]  = α[n] / (1 - X[n, 1])  + Y[n, 1]

    elseif (X[n, 1]>0 && X[n, 1]<(α .+ Y[n, 1]))
        X[n, 2]  = α[n] + Y[n, 1]
    else
        X[n, 2]  = -1
    end
    
    Y[n, 2]  = Y[n, 1]  - μ*(X[n, 1] .+ 1) .+ μ*σ

    end
    return sum(X[:, 2])/N
end

4

2 回答 2

2

if,else只接受一个布尔值。所以我猜你需要打电话all还是any先打电话BitVector

于 2021-05-25T13:19:48.220 回答
2

假设XY是矩阵,X[n, 1]是标量 并且α .+ Y[n, 1]Vector,因此这些对象之间没有有意义的比较。所以,根据你想要的,你可以使用

all(X[n, 1] .< (α .+ Y[n, 1])))

或(从数学的角度来看可能更正确)

X[n, 1] < minimum(α .+ Y[n, 1])

或先前计算的非分配版本

X[n, 1] < minimum(x -> x + Y[n, 1], α)

或(正如评论中提出的那样)

X[n, 1] < minimum(α) + Y[n, 1]
于 2021-05-25T15:04:22.350 回答