我有Julia BoundsError
我想做svd alg。但我有边界。下面是我的代码我有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
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
这样的单个数字就失败了
要修复此错误,您可以将tuplenu,beta
移出else
块中的house
然而,在j>m
的情况下,eye((m-j)+1)
返回0×0数组{Float64,2}
,而beta*nu*nu'
返回1×1数组{Float64,2}
。尝试减去这些会导致维度不匹配
错误。因为我不知道您真正想要实现什么,所以我无法在此提出修复方案。请准确报告您如何调用该函数以及完整的错误消息。从这一点可以清楚地看出,例如,错误发生在哪一行。“我不知道跟踪有什么问题。”请发布您的问题。欢迎来到StackOverflow。请看这里