MATLAB Answers


How to define a cumulative distribution function with variable in it

Asked by Nutthanond
on 3 Feb 2013
Latest activity Answered by Pritee Ray
on 20 Mar 2015
Accepted Answer by bym

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



No products are associated with this question.

3 Answers

Answer by bym
on 3 Feb 2013
 Accepted answer

f = @(x) normcdf(x,mu,sigma);


I tried it, but it seems that command only represent string, when I try to solve it, it return empty set T___T

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 =

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 =

Answer by 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

  1 Comment

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

Answer by 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));


Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!