Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I need an expression for the real 7/3 power of a real-valued function, i.e., a reformulation of

f[x_] := g[x]^(7/3)

that works for negative values of g[x]. This function and its first and second derivatives are used in heavy computation (i.e. in objectives to FindMinimum) and need to be well-defined at all values of x. In particular, I've tried the following, which don't work:

f[x_] := g[x]^(7/3)

which gives complex values at negative values of g[x], and

f[x_] := Surd[g[x],3]^7

which gives a "Infinite expression" error when its derivative is evaluated at 0.

share|improve this question
    
(-1)^(7/3) == ??? –  belisarius Mar 6 '13 at 17:00
2  
@belisarius I'm sure he's interpreting this as -1 and that's rather the point of the new CubeRoot and Surd functions. –  Mark McClure Mar 6 '13 at 17:02
    
Why doesn't f[x_] := Piecewise[{{g[x]^(7/3), g[x] >= 0}}, -(-g[x])^(7/3)] work? –  whuber Mar 6 '13 at 17:52
    
@belisarius I want the real 7/3 power of a real number, which is well defined over all $\mathbb{R}$. –  user168715 Mar 6 '13 at 19:27
    
@whuber Thanks, I will try that. –  user168715 Mar 6 '13 at 19:27

1 Answer 1

To some extent, this is understandable given the formula for the derivative of the Surd.

D[Surd[x^4, 3], x] // InputForm
(* Out: (4*x^3)/(3*Surd[x^4, 3]^2) *)

Of course, this formula is good, except when $x=0$. Computer algebra systems frequently return this type of "generic" result. If you really need to work at zero, perhaps something like the following will work:

Clear[f, fp];
f[x_] = CubeRoot[x^7];
fp[x_] := f'[x] /; x != 0;
fp[0] = fp[0.0] = 0;

This should define a function fp representing your derivative that might work as expected. It also might depend on what you need to do with it.

share|improve this answer
1  
$f$ is used as input to functionals in my code that themselves take D of it, so if possible I would like to avoid having to define the derivative of f specially. –  user168715 Mar 6 '13 at 19:26
    
(Also, I suppose I hoped Mathematica would be "smart" enough to take a limit at 0, instead of throwing up its hands and aborting with an error.) –  user168715 Mar 6 '13 at 19:30
    
If I define the function just as f[x_] := Surd[x, 3]^7 and then make this: Plot[Evaluate[D[f[x], x]], {x, -1, 1}] it returns a plot. However, if I define it like this: f[x_] = D[Surd[x, 3]^7, x] /; x != 0; and try to draw the same plot or the one with the exclusion: Plot[Evaluate[f[x]], {x, -1, 1}, Exclusions -> x == 0] it returns nothing at all. Do you know why? –  Alexei Boulbitch Mar 7 '13 at 8:39
    
@Alexei It is semantically meaningless. Test it yourself by plugging in some particular arguments, as in f[1]. Remove the /; x!= 0 codicil and you might be more successful. –  whuber Mar 7 '13 at 9:07
    
@whuber. Thank you. In fact I started my question with that. I tried your test as well and see what happens, but I seem to not understand its origin. Where is the difference between the operator written in the answer above and the one I wrote? I seem to only combined the second and third lines from that answer in one statement. The result is, however, clearly not what I expected, meaning that I am missing something important. –  Alexei Boulbitch Mar 8 '13 at 9:52

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.