# How to define a cumulative distribution function with variable in it

19 views (last 30 days)
Nutthanond on 3 Feb 2013
Edited: Mohammad Wamique on 21 Feb 2020
Hi everyone, I'm having problem trying to solve for the integral of the cumulative distribution function for my thesis. I want to hold x as variable for F(x) and solve it later to optimize it. The problem is the function normcdf(x,mu,sigma) doesn't allow me to define x as symbol, it require x to be a double value instead. So my question is, is there anyway to define x as "syms x" and then use normcdf(x,mu,sigma)?
With the uniform distribution I write the function straightforward in the program like this:
gamma = 0; n = 150; syms e Q_sc Q_r X Pi_sc Pi_r S_Q S_Q2 x h t; S_Q = Q_sc - int(((e-gamma+n)/(2*n)),e,0,Q_sc - D_r); S_Q2 = Q_r - int(((e-gamma+n)/(2*n)),e,0,Q_r - D_r); Pi_sc = (S_Q*(p-c_m-s+g_r+g_m+(G1*(s_return-l_m-l_r-r)))) + ((s-c_r)*Q_sc) - ((g_r+g_m)*D_r); Diff_Pi_sc = diff(Pi_sc,'Q_sc'); Q_sc = solve(Diff_Pi_sc); Q_sc = vpa(Q_sc);
So instead of writing unifcdf(...), I use ((e-gamma+n)/(2*n)) instead, because I want to keep "e" as variable, I don't want the program to calculate in right away. Is there anyway I can achieve this task using unifcdf function provided by the program?
Thank you very much in advance

bym on 3 Feb 2013
f = @(x) normcdf(x,mu,sigma);
##### 2 CommentsShowHide 1 older comment
Tom Lane on 4 Feb 2013
It's not clear to me what you tried. Your post mentions integrating the cdf. I don't know the integral of the cdf, but here's the cdf itself:
>> mu = 0; sigma = 1; f = @(x) normcdf(x,mu,sigma);
I would expect the cdf to be close to 1 over this interval of length 5, so I'd expect the integral to be about 5:
>> integral(f,10,15)
ans =
5
I'd expect the cdf to average to 0.5 over this symmetric interval of length 2, so I'd expect the answer to be about 1:
>> integral(f,-1,1)
ans =
1

Tom Lane on 4 Feb 2013
If you need to use Symbolic Toolbox sym variables, then you may want to use the erfc function in place of normcdf. Consider this:
>> mu = 10; sigma = 2;
>> normcdf(10:13,mu,sigma)
ans =
0.5000 0.6915 0.8413 0.9332
Here's how to get to get that answer using a sym:
>> syms x
>> y = .5*erfc(-(x-mu)/(sigma*sqrt(2)));
>> subs(y,x,10:13)
ans =
[ 1/2, 1 - erfc(2^(1/2)/4)/2, 1 - erfc(2^(1/2)/2)/2, 1 - erfc((3*2^(1/2))/4)/2]
>> double(ans)
ans =
0.5000 0.6915 0.8413 0.9332
Nutthanond on 9 Feb 2013
Thank you very much, this is exactly what I need. ^___^ ah, by the way I accept the wrong answer, actually I want to accept this one but wrong pressing

Pritee Ray on 20 Mar 2015
Dear Tom Lane, I want to integrate a cdf function, however getting error "??? Undefined function or method 'erfc' for input arguments of type 'sym'." The Matlab code is given below.Please suggest me what to do? sym x f1(i) =int(normcdf(x,mu,sigma),0,1000); f2(i) =int(normcdf(x,mu,sigma),1600,2000); G(i) = double(f1(i)+f2(i));

Mohammad Wamique on 21 Feb 2020
Edited: Mohammad Wamique on 21 Feb 2020
Use an equivalent 'complementary error function' instead. For example:
''normcdf(x)'' is equivalent to "0.5*erfc(-x/(sqrt(2)))''.
Try: [normcdf(.5); 0.5*erfc(-.5/(sqrt(2)))] in command window