Skip to content
Snippets Groups Projects
Commit 4b3f78d5 authored by Krueger Jasmin's avatar Krueger Jasmin
Browse files

Hensel validation

parent 9703296f
No related branches found
No related tags found
No related merge requests found
......@@ -696,3 +696,44 @@ function validate_a_posteriori_inverse_bivariate(q::PolyElem{T}, b::PolyElem{S},
print("no convergence in ", tmax, " steps, last r = ", r, "\n")
(r, tmax, string("no convergence in ", tmax, " steps"))
end
function validate_Hensel(l::Int, f::PolyElem, g::PolyElem, h::PolyElem)
#convert f,g,h to polynomials in Float64
fr = convert_balls_to_Float(f)
gr = convert_balls_to_Float(g)
hr = convert_balls_to_Float(h)
dg = degree(g)
dh = degree(h)
#compute numerical solution
(gstar, hstar, s, t )= henseltruncate(l,fr,gr,hr,validation = false)
gstar = convert_float_to_balls(gstar)
hstar = convert_float_to_balls(hstar)
#compute δ
(q,R) = fastdivrem(s*(gstar*hstar-f),hstar)
δg = t*e + q*g
BivPolMod!(δg,l)
δh = R
δgmin = nonzeroMin(δg)
ηg = deepcopy(δg)
replace_zeros!(ηg,δgmin, degree(g), l)
δhmin = nonzeroMin(δh)
ηh = deepcopy(δh)
replace_zeros!(ηh, δhmin, degree(h), l)
δh = δh + ηh
δg = δg + ηg
#validation
rg = parent(g)(0)
rh = parent(h)(0)
for t in 1:tmax
(Λg, Λh) = Λ(rg,rh)
rrg = Λg*rg + δg
rrg = trunc(rrg, dg +1, l)
rrh = Λh*rh + δh
rrh = trunc(rrh, dh+1, l)
if (isless_coefficientwise(rrg-rg,ηg))&&(isless_coefficientwise(rrh-rh,ηh))
gstar = convert_polynomial_to_intervals(gstar,convert_balls_to_Float(rg,rounding = RoundUp))
hstar = convert_polynomial_to_intervals(hstar,convert_balls_to_Float(rh,rounding = RoundUp))
end
end
end
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment