How to define a cumulative distribution function with variable in it
8 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
bym
2013 年 2 月 3 日
f = @(x) normcdf(x,mu,sigma);
3 件のコメント
Tom Lane
2013 年 2 月 4 日
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 Yu
2024 年 11 月 8 日 4:29
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!
その他の回答 (3 件)
Tom Lane
2013 年 2 月 4 日
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
2015 年 3 月 20 日
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 件のコメント
Mohammad Wamique
2020 年 2 月 21 日
編集済み: Mohammad Wamique
2020 年 2 月 21 日
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 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!