2

Bug introduced in 8.0.0 and fixed in 9.0.0


Could someone explain the odd behavior of the Derivative function when drawing arguments from lists? We have,

Derivative[1][a + #*(b - c) &]
(* b - c & *)

and analogously,

Derivative[1][{a1, a2} + #*({b1, b2} - {c1, c2}) &]
(* {0, 0} + {b1, b2} - {c1, c2} + ({0, 0} + {0, 0}) #1 & *)

So far so good. However,

lst = {{a1, a2}, {b1, b2}, {c1, c2}};
Derivative[1][lst[[1]] + #*(lst[[2]] - lst[[3]]) &]
(* {lst[[2]] - lst[[3]], lst[[2]] - lst[[3]]} & *)

Why is the output in the last case not,

lst[[2]] - lst[[3]] &

as one would expect based on the previous examples? Why do I get a list of lists as an answer, instead of just a list? (And what should I do to get the expected result?)

ilian
  • 25,474
  • 4
  • 117
  • 186
Ted Pudlik
  • 345
  • 2
  • 6

1 Answers1

1

As indicated in the comments, this has been fixed as of version 9.0.0.

lst = {{a1, a2}, {b1, b2}, {c1, c2}};                                   
Derivative[1][lst[[1]] + #*(lst[[2]] - lst[[3]]) &]                     

(* lst[[2]] - lst[[3]] & *)
ilian
  • 25,474
  • 4
  • 117
  • 186
  • This is perhaps something to look at? At least the non-working example should be removed from the documentation. – Szabolcs Aug 09 '15 at 09:29
  • @Szabolcs Agreed, in fact there are several open bug reports for that issue, and I've updated them to link to the MSE discussion. Personally I'd prefer it to work as it used to (long ago), but updating the documentation may be more realistic at this point. – ilian Aug 09 '15 at 16:15