函数在涉及if、else和矩阵的Julia中实现的困难

函数在涉及if、else和矩阵的Julia中实现的困难,julia,juno-ide,Julia,Juno Ide,我试图在Julia中实现这个函数,但我不明白。我认为这是因为广播,它似乎不适用于阵列。 当我用类似点的“>而不是>”来编写关系运算符时,错误的数量减少了,但它指责TypeError:在布尔上下文中使用的非布尔位向量。 我怎样才能解决这个问题 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

我试图在Julia中实现这个函数,但我不明白。我认为这是因为广播,它似乎不适用于阵列。 当我用类似点的“>而不是>”来编写关系运算符时,错误的数量减少了,但它指责TypeError:在布尔上下文中使用的非布尔位向量。 我怎样才能解决这个问题

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只接受布尔值。所以我想你需要先调用位向量的all或any?

假设X和Y是矩阵,X[n,1]是标量,α+Y[n,1]是向量,所以这些对象之间没有意义的比较。因此,根据您的需要,您可以使用

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]

或者最小α+Y[n,1]?哈,你是对的,在我这边过度工程:-哇!我不知道这些功能!使用all函数的建议我理解,但我仍然不理解最小函数的作用。不管怎样,我用了所有的,效果非常好!我很满意!非常感谢你!最小值函数查找集合中的最小值。这个名字很贴切,真的。