How to define a cumulative distribution function with variable in it
    10 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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
0 Commenti
Risposta accettata
  bym
      
 il 3 Feb 2013
        f = @(x) normcdf(x,mu,sigma);
3 Commenti
  Tom Lane
    
 il 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
  Hui
 il 8 Nov 2024
				Hi, Tom!
Could I ask a question? why the cdf is close to 1 over the interval [10, 15], while the cdf is expected to 0.5 over the interval [-1, 1]? If we choose another integral interval, for example, the interval [8, 10], what would the cdf to be expected? Thank you for your attention! 
Più risposte (3)
  Tom Lane
    
 il 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
  Pritee Ray
 il 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));
0 Commenti
  Mohammad Wamique
 il 21 Feb 2020
        
      Modificato: Mohammad Wamique
 il 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
0 Commenti
Vedere anche
Categorie
				Scopri di più su Mathematical Functions in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!