Skip to content
Snippets Groups Projects
Commit 02370aae authored by Fredrik Bagge Carlson's avatar Fredrik Bagge Carlson
Browse files

Updates to type defs and ar,arx methods

parent cf53f92c
Branches
No related tags found
No related merge requests found
...@@ -11,10 +11,12 @@ FitStatistics, ...@@ -11,10 +11,12 @@ FitStatistics,
FitResult, FitResult,
IdData, IdData,
# Functions # Functions
ar,arx,getARregressor,getARXregressor,find_na ar,arx,getARregressor,getARXregressor,find_na,
toeplitz, kalman
## Fit Methods ================= ## Fit Methods =================
:LS :LS
:LS_reg
:LM :LM
## Types ======================= ## Types =======================
...@@ -22,8 +24,8 @@ abstract Model ...@@ -22,8 +24,8 @@ abstract Model
abstract LinearModel <: Model abstract LinearModel <: Model
abstract NonLinearModel <: Model abstract NonLinearModel <: Model
abstract Network <: NonLinearModel abstract Network <: NonLinearModel
typealias Polynom Union(Real, Array{Real,1}) typealias Polynom{T<:Real} Union(T, Array{T,1})
typealias PolynomMatrix Union(Array{Polynom,1},Polynom) typealias PolynomMatrix{T<:Real} Union(Array{Polynom,1},Polynom)
""" """
...@@ -32,7 +34,7 @@ typealias PolynomMatrix Union(Array{Polynom,1},Polynom) ...@@ -32,7 +34,7 @@ typealias PolynomMatrix Union(Array{Polynom,1},Polynom)
`bias::Bool`\n `bias::Bool`\n
`λ::Float64`\n `λ::Float64`\n
""" """
type AR <: Model type AR <: LinearModel
a::Polynom a::Polynom
na::Int na::Int
bias::Bool bias::Bool
...@@ -47,7 +49,7 @@ end ...@@ -47,7 +49,7 @@ end
`bias::Bool`\n `bias::Bool`\n
`λ::Float64`\n `λ::Float64`\n
""" """
type ARX <: Model type ARX <: LinearModel
a::Polynom a::Polynom
b::PolynomMatrix b::PolynomMatrix
na::Int na::Int
...@@ -68,14 +70,17 @@ type FitStatistics ...@@ -68,14 +70,17 @@ type FitStatistics
RMS::Float64 RMS::Float64
FIT::Float64 FIT::Float64
AIC::Float64 AIC::Float64
FitStatistics(e::Vector{Float64}) = new(rms(e),fit(e),aic(e)) FitStatistics(y::Vector{Float64},yh::Vector{Float64},d) = new(rms(y-yh),fit(y,yh),aic(y-yh,d))
end end
type FitResult type FitResult
error::VecOrMat{Float64} error::VecOrMat{Float64}
fit::FitStatistics fit::FitStatistics
method::Symbol method::Symbol
FitResult(error::VecOrMat{Float64},method::Symbol) = new(error, FitStatistics(error),method) function FitResult(y,yh,d::Int,method::Symbol)
error = y-yh
new(error, FitStatistics(y,yh, d),method)
end
end end
type IdData type IdData
...@@ -87,7 +92,11 @@ type IdData ...@@ -87,7 +92,11 @@ type IdData
IdData(y::VecOrMat{Float64}, u::VecOrMat{Float64}) = new(y,u,0) IdData(y::VecOrMat{Float64}, u::VecOrMat{Float64}) = new(y,u,0)
end end
## Helper functions
rms(x) = sqrt(mean(x.^2))
sse(x) = sum(x.^2)
fit(y,yh) = 100 * (1-rms(y-yh)./rms(y-mean(y)));
aic(x,d) = log(sse(x)) + 2d/length(x)
include("armax.jl") include("armax.jl")
include("kalman.jl") include("kalman.jl")
......
...@@ -9,7 +9,10 @@ function ar(y::Vector{Float64}, na; λ = 0, bias=false) ...@@ -9,7 +9,10 @@ function ar(y::Vector{Float64}, na; λ = 0, bias=false)
end end
prediction = A*w prediction = A*w
error = y_train - prediction error = y_train - prediction
return AR(w,na,bias,λ), FitResult(error,:LS) model = AR(w,na,bias,λ)
na = bias ? na+1:na
result = FitResult(y_train,prediction,na, λ>0?(:LS_reg) :(:LS))
return model, result
end end
ar(iddata::IdData, na; λ = 0, doplot=false, bias=false) = ar(iddata.y, na; λ = 0, bias=bias) ar(iddata::IdData, na; λ = 0, doplot=false, bias=false) = ar(iddata.y, na; λ = 0, bias=bias)
...@@ -24,8 +27,10 @@ function arx(y::Vector{Float64}, u::VecOrMat{Float64}, na, nb; λ = 0, doplot=fa ...@@ -24,8 +27,10 @@ function arx(y::Vector{Float64}, u::VecOrMat{Float64}, na, nb; λ = 0, doplot=fa
end end
prediction = A*w prediction = A*w
error = y_train - prediction error = y_train - prediction
model = AR(w,na,bias,λ)
return AR(w,na,bias,λ), FitResult(error,:LS) na = bias ? na+1:na
result = FitResult(y_train,prediction,na, λ>0?(:LS_reg) :(:LS))
return model, result
end end
arx(iddata::IdData, na, nb; λ = 0, bias=false) = arx(iddata.y, iddata.u, na, nb; λ = 0, bias=bias) arx(iddata::IdData, na, nb; λ = 0, bias=false) = arx(iddata.y, iddata.u, na, nb; λ = 0, bias=bias)
......
using SystemIdentification
@assert isa(1,Polynom) @assert isa(1,Polynom)
@assert isa(1.0,Polynom) @assert isa(1.0,Polynom)
@assert isa([1.0; 1.0],Polynom) @assert isa([1.0; 1.0],Polynom)
@assert isa(1.0,PolynomMatrix) @assert isa(1.0,PolynomMatrix)
@assert isa(1,PolynomMatrix) @assert isa(1,PolynomMatrix)
ar(collect(1:5.0),1,bias=true)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment