Julia实现函数的难点涉及if、else和矩阵

Difficulties of implementing function in Julia involving if, else and matrices

我试图在 Julia 中实现这个功能,但我没有得到它。我认为这是因为广播,它似乎不适用于数组。 当我用点(比如 .> 而不是 >)编写关系运算符时,错误的数量减少了,但它指责“类型错误:布尔上下文中使用的非布尔值(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

if, else 只接受布尔值。所以我想你需要先在 BitVector 上调用 allany

假设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]