diff --git a/src/armax.jl b/src/armax.jl index 9773a2620d586277be05febc79fe84f216a68846..8ce9e24e156550e615dbc37ad823acca67a3d065 100644 --- a/src/armax.jl +++ b/src/armax.jl @@ -7,19 +7,22 @@ function ar(y::Vector{Float64}, na; λ = 0, normtype=2, verbose=false) if normtype == 2 if λ == 0 w = A\y_train + method = :LS else w = (A'A + λ*eye(size(A,2)))\A'y_train + method = :LS_reg end elseif normtype == 1 w = Variable(size(A,2),1) problem = minimize(sum(abs(A*w-y_train )) + λ*norm(w)) solve!(problem, SCSSolver(verbose=Int(verbose))) w = w.value[:] + method = :L1 end prediction = A*w error = y_train - prediction model = AR(w,na) - result = FitResult(y_train,prediction,na, λ>0?(:LS_reg) :(:LS),λ) + result = FitResult(y_train,prediction,na, method,λ) return model, result end ar(iddata::IdData, na; λ = 0) = ar(iddata.y, na; λ = 0) @@ -31,14 +34,17 @@ function arx(y::Vector{Float64}, u::VecOrMat{Float64}, na, nb; λ = 0, normtype= if normtype == 2 if λ == 0 w = A\y_train + method = :LS else w = (A'A + λ*eye(size(A,2)))\A'y_train + method = :LS_reg end elseif normtype == 1 w = Variable(size(A,2),1) problem = minimize(sum(abs(A*w-y_train )) + λ*norm(w)) solve!(problem, SCSSolver(verbose=Int(verbose))) w = w.value[:] + method = :L1 end prediction = A*w error = y_train - prediction @@ -51,7 +57,7 @@ function arx(y::Vector{Float64}, u::VecOrMat{Float64}, na, nb; λ = 0, normtype= si += nb[i] end model = ARX(w[1:na],b,na,nb) - result = FitResult(y_train,prediction,na, λ>0?(:LS_reg) :(:LS), λ) + result = FitResult(y_train,prediction,na, method, λ) return model, result end arx(iddata::IdData, na, nb; λ = 0) = arx(iddata.y, iddata.u, na, nb; λ = 0)