1
$\begingroup$

I want to create an UpValue that will cause a function that is zero for it's second derivative to have a value when the second derivative is integrated. The function is:

YrA3[x_, hh_] := Piecewise[{{x, 0 <= x && x <= hh}, {hh, hh < x && x <= 1}}];

I created this UpValue that I'm expecting the integration of the second derivative to use:

YrA3 /: D[YrA3[x_, hh_, ___], xx_] := 1/Lenh;    
SetOptions[D, NonConstants -> {YrA3}];

When I check the definitions they seem correct:

?YrA3
(* Out:
  D[YrA3[x_, hh_, ___], xx_] ^:= 1/Lenh
  YrA3[x_, hh_] := Piecewise[{{x, 0 <= x && x <= hh}, {hh, hh < x && x <= 1}}]
*)

But when I run the code it doesn't work:

YrA3[x, l/3]
Derivative[1, 0][YrA3][x, 1/3]
Derivative[2, 0][YrA3][x, 1/3]
Integrate[Derivative[2, 0][YrA3][x, 1/3], {x, 0, 1}]

(* the first line works *)
(* the second line acts as if the UpValue doesn't exist *)
(* the third line works (i.e. zero) *)
(* the fourth line acts as if the UPValue doesn't exist (i.e. zero) *)

The link I used to try and understand what I need to do is How to customize derivative behavior via upvalues?

I do not understand what the BlankNullSequence and NonConstants declaration are supposed to be doing but whatever it is it doesn't seem to work. Is there something else I might try? or even a hint at the best way to debug something like this would be helpful.

$\endgroup$

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.