Из описания, всё же, не ясно, что конкретно делается. Если если минимальный пример и он не работает, то можем разобрать здесь 🙂
Пример огромный - очень большая функция, вот так работает: function reml_sweep_β(lmm, data::AbstractLMMDataBlocks, θ::Vector{T}) where T <: Number
noerrors = true
n = length(lmm.covstr.vcovblock)
N = length(lmm.data.yv)
c = (N - lmm.rankx)*log(2π)
#---------------------------------------------------------------------------
V⁻¹ = Vector{AbstractArray{T}}(undef, n)
θ₁ = zero(T)
θ₂ = zeros(T, lmm.rankx, lmm.rankx)
θ₃ = zero(T)
βm = zeros(T, lmm.rankx)
β = Vector{T}(undef, lmm.rankx)
#---------------------------------------------------------------------------
local logdetθ₂::T
akk = Vector{T}(undef, lmm.covstr.maxn + lmm.rankx) #temp for sweep
#Vm = Matrix{T}(undef, lmm.covstr.maxn + lmm.rankx, lmm.covstr.maxn + lmm.rankx) #!!
for i = 1:n
q = length(lmm.covstr.vcovblock[i])
qswm = q + lmm.rankx
Vpm = Matrix{T}(undef, qswm, qswm) #!!
Vp = view(Vpm, 1:qswm, 1:qswm) #!!
fill!(Vp, zero(T))
V = view(Vp, 1:q, 1:q)
Vx = view(Vp, 1:q, q+1:qswm)
Vc = view(Vp, q + 1:qswm, q + 1:qswm)
copyto!(Vx, data.xv[i])
vmatrix!(V, θ, lmm, i)
#-----------------------------------------------------------------------
try
swr = sweepb!(fill!(view(akk, 1:qswm), zero(T)), Vp, 1:q; logdet = true)
θ₁ += swr[2]
catch
noerrors = false
lmmlog!(lmm, LMMLogMsg(:ERROR, "θ₁ not estimated during REML calculation, V isn't positive definite or |V| less zero."))
return (1e100, nothing, nothing, 1e100, noerrors)
end
V⁻¹[i] = V
#-----------------------------------------------------------------------
subutri!(θ₂, Vc)
#θ₂ -= UpperTriangular(view(Vp, q + 1:qswm, q + 1:qswm))
mulαtβinc!(βm, Vx, data.yv[i])
#-----------------------------------------------------------------------
end
θs₂ = Symmetric(θ₂)
mul!(β, inv(θs₂), βm)
for i = 1:n
θ₃ += mulθ₃(data.yv[i], data.xv[i], β, V⁻¹[i])
end
try
logdetθ₂ = logdet(θs₂)
catch
noerrors = false
lmmlog!(lmm, LMMLogMsg(:ERROR, "logdet(θ₂) not estimated during REML calculation"))
return (1e100, nothing, nothing, 1e100, noerrors)
end
return θ₁ + logdetθ₂ + θ₃ + c, β, θs₂, θ₃, noerrors #REML, β, iC, θ₃, errors
end