Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Polynomials.fit changes behavior somewhere between (inclusive) Julia 1.7.3 and Julia 1.10.4, the latter being self-inconsistent (problematic) #579

Open
pchavez201706 opened this issue Jul 4, 2024 · 1 comment

Comments

@pchavez201706
Copy link

This is my first issue report, so please forgive me if I "didn't get the memo" about this finding at some earlier date, but it's quite simple and shouldn't waste much time in the worst-case:

In Julia 1.7.3, Polynomials.fit with the third input argument ("deg"), i.e., the degree of the polynomial desired, of value x always returns a Polynomial of x+1 number of coefficients.

In Julia 1.10.4, Polynomials.fit with the third input argument ("deg") of value x ALMOST always returns a Polynomial of x+1 number of coefficients.

MWE (note the difference in one of the returns between the two code blocks with the same two Polynomial.fit commands run in the two Julia versions):

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.7.3 (2022-05-06)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using Polynomials

julia> x=-2:1
-2:1

julia> y=[0.0360126786947437, 0.020007043719302054, 0.0360126786947437, 0.020007043719302054]
4-element Vector{Float64}:
 0.0360126786947437
 0.020007043719302054
 0.0360126786947437
 0.020007043719302054

julia> Polynomials.fit(x,y,2).coeffs
3-element Vector{Float64}:
  0.026409297709478707
 -0.0032011269950883254
  6.640921040373548e-19

julia> y=[0.00361, 0.00201, 0.00361, 0.00201]
4-element Vector{Float64}:
 0.00361
 0.00201
 0.00361
 0.00201

julia> Polynomials.fit(x,y,2).coeffs
3-element Vector{Float64}:
  0.00265
 -0.00031999999999999976
 -2.926366747177586e-19

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.10.4 (2024-06-04)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using Polynomials

julia> x=-2:1
-2:1

julia> y=[0.0360126786947437, 0.020007043719302054, 0.0360126786947437, 0.020007043719302054]
4-element Vector{Float64}:
 0.0360126786947437
 0.020007043719302054
 0.0360126786947437
 0.020007043719302054

julia> Polynomials.fit(x,y,2).coeffs
2-element Vector{Float64}:
  0.026409297709478707
 -0.0032011269950883254

julia> y=[0.00361, 0.00201, 0.00361, 0.00201]
4-element Vector{Float64}:
 0.00361
 0.00201
 0.00361
 0.00201

julia> Polynomials.fit(x,y,2).coeffs
3-element Vector{Float64}:
  0.00265
 -0.0003199999999999998
 -2.5554890278056236e-19

@jverzani
Copy link
Member

Sorry not too have responded. I thought this was due to some internal rounding where the last digit is numerically zero, but on my machine it isn't happening:

julia> using Polynomials
	
julia> x=-2:1
-2:1

julia> y=[0.0360126786947437, 0.020007043719302054, 0.0360126786947437, 0.020007043719302054]
4-element Vector{Float64}:
 0.0360126786947437
 0.020007043719302054
 0.0360126786947437
 0.020007043719302054

julia> Polynomials.fit(x,y,2).coeffs
3-element Vector{Float64}:
  0.02640929770947871
 -0.0032011269950883276
 -8.177564888977996e-19

In the constructor we have a check for trailing zeros. One way to avoid this if it happens would be to using Polynomials.PnPolynomial which doesn't include that check.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants