ApproxFun+IntervalArithmetic: make ODE solving really rigorous
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 30/100
Línea de trabajo
Comienza en src/Caching/matrix.jl, en la comprobación de convergencia alrededor de la línea 122, y luego reproduce el ejemplo de Airy-equation del issue. Determina cómo gestiona la comprobación actual las colas de coeficientes; se considera terminado cuando el criterio de convergencia acota correctamente la cola y proporciona una garantía a priori, en lugar de depender del éxito observado.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
The following code returns successfully for solving Airy's equation (the extra definitions are work arounds for bugs):
julia> Base.broadcast(::typeof(*), a::IntervalArithmetic.Interval, b::AbstractVector) =
map(x -> a*x, b)
julia> Base.Broadcast.broadcasted(::typeof(*), a::IntervalArithmetic.Interval, b::AbstractVector) =
map(x -> a*x, b)
julia> Base.length(d::UnitRange{<:IntervalArithmetic.Interval}) = Integer(maximum(d.stop.hi)-minimum(d.start.lo)+1)
julia> u = [Dirichlet(); D^2 - x] \ [[1, 0], 0]
Fun(Chebyshev([-1, -1]..[1, 1]),IntervalArithmetic.Interval{Float64}[[0.528647, 0.528648], [-0.522247, -0.522246], [-0.023162, -0.0231619], [0.0223854, 0.0223855], [-0.00557882, -0.00557881], [-0.000122104, -0.000122103], [9.37066e-05, 9.37067e-05], [-1.68122e-05, -1.68121e-05], [-2.4373e-07, -2.43729e-07], [1.63064e-07, 1.63065e-07] … [1.54639e-10, 1.5464e-10], [-1.89644e-11, -1.89643e-11], [-1.63813e-13, -1.63812e-13], [9.21385e-14, 9.21386e-14], [-9.91957e-15, -9.91956e-15], [-7.12466e-17, -7.12465e-17], [3.76658e-17, 3.76659e-17], [-3.63796e-18, -3.63795e-18], [-2.23433e-20, -2.23432e-20], [-1.12162e-20, -1.12161e-20]])
It happens to have worked:
julia> parse(BigFloat,"0.546136459064141770613483785351029091974067802242010192661484687977676021081218637004123196030567166414008915304513669838826570884623515686") in u(0) # true value from mathematica
true
However, this is mostly luck: the convergence criteria doesn't actually control the decay in the tail. To do this properly (and thereby have apriori guaranteed success) we would need to modify the convergence check at https://github.com/JuliaApproximation/ApproxFunBase.jl/blob/7dd9ef0a111ffd702f989c6f752a62538bc7e62b/src/Caching/matrix.jl#L122
to properly bound the tail.
- Lenguaje dominante
- Julia
- Estrellas
- 13
- Forks
- 13
- Merge medio
- 1 d 5 h
- PR fusionados (30 d)
- 3
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de JuliaApproximation/ApproxFunBase.jl
-
tagbot-manual
Dificultad 1/5 1-3 horas Aptitud para principiantes 62/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
JuliaApproximation/ApproxFunBase.jl#389 · 1 comentario ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
JuliaApproximation/ApproxFunBase.jl#86 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
JuliaApproximation/ApproxFunBase.jl#81 · 10 comentarios ·
Todos los issues de JuliaApproximation/ApproxFunBase.jl
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
JuliaPy/pyjuliapkg#102 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
JuliaMath/Polynomials.jl#641 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
JuliaLang/LinearAlgebra.jl#1794 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día