Calculate derivative of erfcx(x) function

I want to know how i can calculater the derivative of an erfcx(x) function with the symbolic math toolbox. The following is what i tried so far:
>> syms x real
>> y = erfcx(x)
Undefined function 'erfcx' for input arguments of type 'sym'.
I also tried doing this with an anonymous function:
>> testing = @(x) erfcx(x)
testing =
function_handle with value:
@(x)erfcx(x)
but then i don't know how to use the diff() function, as i don't know what variable i should give: diff(testing(x)) <- instead of this x.

6 Comments

I suspect there is no analytical derivative for erfcx(x) therefore why not approximate it numerically?
do you have a link/doi for me where this is described?
HUH? No analytical derivative of erfcx?
Try:
help erfcx
help erfc
help erf
Then apply the definition of erf in producing a version of erfcx that the symbolic toolbox can handle.
Without transforming erfcx() is it possible to differentiate it?
Kevin Frey
Kevin Frey on 8 Feb 2019
Edited: Kevin Frey on 8 Feb 2019
so the base problem with inserting "erfcx(x) = exp(x^2) * erfc(x)" before calculating the derivative (which i already did via wolfram alpha) is that i get overflow errors and i wanted to circumvent that issue with the erfcx(x) function.
So if that is what you two are suggesting i am afraid that won't work for me.
But i really appreciate all your input.
Why cant you do that and plug it into the symbolic differentiation? (It took me ~5 minutes to get an analytical derivative...)

Sign in to comment.

 Accepted Answer

Torsten
Torsten on 8 Feb 2019
Edited: Torsten on 8 Feb 2019
Try
x = 0:0.1:5;
analytical_derivative = -2/sqrt(pi) + 2.*x.*erfcx(x);
numerical_derivative = (erfcx(x+1.0e-6)-erfcx(x))*1e6;
plot(x,analytical_derivative,x,numerical_derivative)
So my guess is that the derivative of erfcx is erfcx'(x) = -2/sqrt(pi) + 2*x*erfcx(x) (and you can easily deduce this result by differentiating exp(x^2)*erfcx(x) using the product rule).

More Answers (1)

Just plug in the definitions of the erfcx function into your symbolic calculations? Or do the differentiation by hand?
HTH

5 Comments

it was mentioned that you should use the erfcx instead of e(t^2)*erfc(t) to avoid overflow.
"Description
erfcx(x) returns the value of the Scaled Complementary Error Function for each element of x. Use the erfcx function to replace expressions containing exp(x^2)*erfc(x) to avoid underflow or overflow errors."
Thats why i wanted to use that function, or am i missing something?
If you're performing the calculations symbolically (which you will need to do to take the derivative using diff) this isn't a problem. Just don't try to evaluate your result for a large numeric value (or if you do, convert that number into a sym first so you perform the calculation using variable precision arithmetic.)
Perhaps. You asked for an analytical derivative in the original post. For symbolic calculations you will not have problems with numerical underflow nor overflow. So I assumed that something like an anlytical derivative would be what you wanted for some purpose or the other, and suggested a simpe 2-3-step way to get you that. If you want a numerical derivative then simly use the gradient function for that.
Kevin Frey
Kevin Frey on 8 Feb 2019
Edited: Kevin Frey on 8 Feb 2019
I am sorry, i have problems understanding what exactly you mean by numerical or analytical. From what i found "analytic" and "symbolic" are supposed to be the same and they are meant to be exact and "numerical" are approximations.
So what i need in the end, is a working function for a exponentially modified gauss calculcation i am currently working on, and if i use the approximation of "erfcx(x) = exp(x^2) * erfc(x)" i get overflow results, if my number gets too big and i wanted to circumvent that.
If I got the definitions right you should just simply have expressed erfcx in terms of exp(x^2) and erf:
syms x
diff(exp(x^2)*(1-erf(x)),x)
ans =
- 2/pi^(1/2) - 2*x*exp(x^2)*(erf(x) - 1)
HTH

Sign in to comment.

Categories

Products

Release

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!