我有Julia BoundsError

我有Julia BoundsError,julia,Julia,我想做svd alg。但我有边界。下面是我的代码 function house(x::Array{Float64}) n = length(x) sigma = dot(x[2:n]', x[2:n]) nu = [1; x[2:n]] beta = 0 if sigma == 0 beta = 0 else mu = sqrt(x[1]^2 + sigma) if x[1] <= 0

我想做svd alg。但我有边界。下面是我的代码

function house(x::Array{Float64})

    n = length(x)
    sigma = dot(x[2:n]', x[2:n])
    nu = [1; x[2:n]]
    beta = 0
    if sigma == 0
        beta = 0
    else
        mu = sqrt(x[1]^2 + sigma)
        if x[1] <= 0
            nu[1] = x[1] - mu
        else
            nu[1] = -sigma / (x[1]+ mu)
        end
        beta = 2nu[1]^2 / (sigma + nu[1]^2)
        nu =nu / nu[1]
        nu, beta
    end
end

function house_bidiag(A)

    A = copy(A)
    m,n = size(A)
    for j = 1:n
        nu, beta = house(A[j:m,j]) # this part, i got error
        A[j:m,j:n] = (eye(m-j+1)- beta*nu*nu')*A[j:m,j:n]
        A[j+1:m,j] = nu[2:m-j+1]
        if j <= n-2
            nu, beta = house(A[j,j+1:n]')
            A[j:m,j+1:n] = A[j:m,j+1:n] * (eye(n-j)-beta*nu*nu')
            A[j,j+2:n] = nu[2:n-j]'
        end
    end
    A
end

M=rand(5,7)
house_bidiag(M)
功能屋(x::数组{Float64})
n=长度(x)
西格玛=点(x[2:n]',x[2:n])
nu=[1;x[2:n]]
β=0
如果σ=0
β=0
其他的
mu=sqrt(x[1]^2+西格玛)

如果x[1]函数
house
仅返回
0
如果
sigma==0
,而不是元组
nu,beta
。特别是,如果
house
的参数是空数组,则会发生这种情况

在标记的行中,尝试将
house
的返回值分解为变量
nu
beta
。但这只适用于至少有两个元素的iterables,因此对于像
0
这样的单个数字就失败了

要修复此错误,您可以将tuple
nu,beta
移出
else
块中的
house


然而,在
j>m
的情况下,
eye((m-j)+1)
返回
0×0数组{Float64,2}
,而
beta*nu*nu'
返回
1×1数组{Float64,2}
。尝试减去这些会导致
维度不匹配
错误。因为我不知道您真正想要实现什么,所以我无法在此提出修复方案。

请准确报告您如何调用该函数以及完整的错误消息。从这一点可以清楚地看出,例如,错误发生在哪一行。“我不知道跟踪有什么问题。”请发布您的问题。欢迎来到StackOverflow。请看这里