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

### Nutthanond (view profile)

on 3 Feb 2013
Latest activity Answered by Pritee Ray

on 20 Mar 2015

### bym (view profile)

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

## Products

No products are associated with this question.

### bym (view profile)

on 3 Feb 2013

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

Nutthanond

### Nutthanond (view profile)

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

### Tom Lane (view profile)

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 (view profile)

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

### Nutthanond (view profile)

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 (view profile)

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!

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