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
上调用 all
或 any
?
假设X
和Y
是矩阵,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]
我试图在 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
上调用 all
或 any
?
假设X
和Y
是矩阵,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]