Issues with differentiating with respect to polynomial coefficients
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 38/100
Research direction
Start by running the provided Polynomials and ForwardDiff example and inspect how Polynomial(x) and ForwardDiff.gradient interact when trailing coefficients are zero. Compare the reported gradients with true_∇f(x); done means the zero-coefficient cases produce the expected coefficient derivatives without breaking the existing examples.
Written by the indexing model from the issue text.
Description
I am interested in taking the derivative of a polynomial with respect to its coefficients. When the coefficients are such that all terms of order $n \ge k$ for some $k$ are 0, automatic differentiation packages return 0 as the derivative with respect to those coefficients. Of course, the true derivative of $\beta_0 + \beta_1 x + \cdots + \beta_K x^K$ with respect to $\beta_n$ should be $x^n$.
Here is an example:
using Polynomials
using ForwardDiff
f(x) = Polynomial(x)(0.5)
∇f(x) = ForwardDiff.gradient(f, x)
true_∇f(x) = 0.5.^(0:length(x)-1)
all_params = [[1.0, 2.0, 3.0], [1.0, 0.0, 3.0], [1.0, 0.0, 0.0]]
for param in all_params
println("Params are $(param).")
println("Gradient from ForwardDiff: $(∇f(param))")
println("True gradient: $(true_∇f(param))")
println("")
end
The output from this example is below. Note the issue in the final example.
Params are [1.0, 2.0, 3.0].
Gradient from ForwardDiff: [1.0, 0.5, 0.25]
True gradient: [1.0, 0.5, 0.25]
Params are [1.0, 0.0, 3.0].
Gradient from ForwardDiff: [1.0, 0.5, 0.25]
True gradient: [1.0, 0.5, 0.25]
Params are [1.0, 0.0, 0.0].
Gradient from ForwardDiff: [1.0, 0.0, 0.0]
True gradient: [1.0, 0.5, 0.25]
Is there a way to avoid this issue?
- Dominant language
- Julia
- Stars
- 321
- Forks
- 81
- Avg merge
- 10h 1m
- Merged PRs (30d)
- 5
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from JuliaMath/Polynomials.jl
-
Difficulty 1/5 Under an hour Newbie friendliness 83/100
JuliaMath/Polynomials.jl#647 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
JuliaMath/Polynomials.jl#641 · 1 comment ·
-
tagbot-manual
Difficulty 2/5 1-3 hours Newbie friendliness 35/100
JuliaMath/Polynomials.jl#627 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 38/100
JuliaMath/Polynomials.jl#620 · 6 comments ·
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
JuliaMath/Polynomials.jl#585 · 7 comments ·
All issues in JuliaMath/Polynomials.jl
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
JuliaDecisionFocusedLearning/ImplicitDifferentiation.jl#231 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
bug io
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
lanl-ansi/PowerModels.jl#1023 ·