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

How to define a cumulative distribution function with variable in it

Asked by Nutthanond on 3 Feb 2013

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.

2 Answers

Answer by bym on 3 Feb 2013
Accepted answer
f = @(x) normcdf(x,mu,sigma);


Nutthanond on 3 Feb 2013

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

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

Tom Lane

Contact us