fix gauss tests

This commit is contained in:
Gaspard Jankowiak 2025-02-11 13:42:14 +01:00
commit 0b1a5ad3af
3 changed files with 40 additions and 33 deletions

View file

@ -1,32 +1,39 @@
function J_gauss(p::Vector{Float64}; x::Float64=0.0)
λ, μ, σ = p
c = [1 / λ (2 * (x - μ) / σ^2) (-1 + 2 * ((x - μ) / σ)^2) / σ]
return c .* gauss(p; x=x)
end
function gauss(p::Vector{Float64}; x::Float64=0.0)
λ, μ, σ = p
return λ / sqrt(2π * σ^2) * exp(-(x - μ)^2/2σ^2)
end
function H_gauss(p::Vector{Float64}; x::Float64=0.0)
λ, μ, σ = p
c = zeros(3, 3)
function J_gauss(p::Vector{Float64}; x::Float64=0.0)
λ, μ, σ = p
c = [(1/λ) ((x - μ) / σ^2) ((x - μ)^2 - σ^2)/σ^3]
return c .* gauss(p; x=x)
end
# c[1,1] = 0
c[1, 2] = c[2, 1] = (2x) / (λ * σ^2) - (2 * μ) / (λ * σ^2)
c[1, 3] = c[3, 1] = (2 * (x - μ)^2 - σ^2) / (λ * σ^3)
function H_gauss(p::Vector{Float64}; x::Float64=0.0)
λ, μ, σ = p
c = zeros(3, 3)
c[2, 2] = (4 * (x - μ)^2 - 2 * σ^2) / σ^4
c[2, 3] = c[3, 2] = (2λ * (x - μ) * (2μ^2 - 3σ^2 + 2x^2 - 4μ * x)) / (λ * σ^5)
# c[1,1] = 0
c[1, 2] = c[2, 1] = (x-μ) / (λ * σ^2)
c[1, 3] = c[3, 1] = -((μ + σ - x)*(-μ + σ + x))/(λ*σ^3)
c[3, 3] = (2 * (σ^4 - 5σ^2 * (x - μ)^2 + 2 * (x - μ)^4)) / σ^6
return c .* gauss(p; x=x)
end
c[2, 2] = ((x - μ)^2 - σ^2) / σ^4
c[2, 3] = c[3, 2] = -((μ - x)*((μ - x)^2 - 3σ^2))/σ^5
c[3, 3] = (-5*σ^2*(μ - x)^2 + (μ - x)^4 + 2*σ^4)/σ^6
return c .* gauss(p; x=x)
end
@testset "Gauss function" begin
λ = 10 * (rand() - 0.5)
λ = 10 * rand()
μ = 10 * (rand() - 0.5)
σ = 10rand()
x = σ * (2 * rand() - 0.5) + μ
p = [λ, μ, σ]
x = σ * (2 * rand() - 1) + μ
@assert abs(gauss(p; x=x)) > 1e-7 "gauss(p; x=x) is too small: $(gauss(p; x=x))"
@test TaylorTest.check(gauss, J_gauss, p; x=x)
@test TaylorTest.check(J_gauss, H_gauss, p; x=x)
end
@ -39,8 +46,8 @@ end
p_aux = _p -> [_p[1]/_p[2], _p[3] + _p[4] + 2_p[5], _p[6]]
J_p_aux = _p -> [1/_p[2] -_p[1]/_p[2]^2 0 0 0 0;
0 0 1 1 2 0;
0 0 0 0 0 1]
0 0 1 1 2 0;
0 0 0 0 0 1]
g = (_p; x=x) -> gauss(p_aux(_p); x=x)
Jg = (_p; x=x) -> J_gauss(p_aux(_p); x=x) * J_p_aux(p)