bool MathCumulativeDistributionNormal(
constdouble &x[], // [in] Массив со значениями случайной величиныconstdouble mu, // [in] Математическое ожиданиеconstdouble sigma, // [in] Среднеквадратическое отклонениеconstbool tail, // [in] Флаг расчета, если lower_tail=true, то рассчитывается вероятность того, что случайная величина не превысит xconstbool log_mode, // [in] Флаг расчета логарифма значения, если log_mode=true, то рассчитывается натуральный логарифм вероятности
double &result[] // [out] Массив для значений функции вероятности
);
Рассмотрены функции для работы с основными статистическими распределениями, реализованными в языке R. Это распределения Коши, Вейбулла, нормальное, логнормальное, логистическое, экспоненциальное, равномерное, гамма-распределение, центральное и нецентральные распределения Бета, хи-квадрат, F-распределения Фишера, t-распределения Стьюдента, а также дискретные биномиальное и отрицательное биномиальные распределения, геометрическое, гипергеометрическое и распределение Пуассона. Есть функции расчета теоретических моментов распределений, которые позволяют оценить степень соответствия реального распределения модельному.
让我们回到最初关于文章中R错误的声明。
我们的意见仍然是:有错误存在,而且是由于执行中的粗心造成的。
我将尝试向R支持团队提出问题。
而你进入它,重新计算一切,像他那样花几个星期重新检查。但相反,你甚至没有阅读我们的文章。
就我们而言,我们做了这项工作。而且我们做得很好。如果Wolfram对你来说也不是一个权威,那么你的这种交流方式就是在浪费时间。
请不要把创作者和用户混为一谈。
而你进入其中,重新计算一切,花几个星期重新检查,就像他做的那样。但相反,你甚至没有阅读我们的文章。
就我们而言,我们做了这项工作。而且我们做得很好。如果Wolfram对你来说也不是一个权威,那么你用这种交流方式是在浪费时间。
请不要把创作者和用户混为一谈。
有许多公式都假设0^0=1,例如多项式和幂级数的符号,红心数算术,二项式定理,等等,这些都是假设0^0=1。例如,将x=0代入x^0+x^1+x^2+...。= 1/(1-x)显示0^0 = 1。
人们可以认为,定义一个函数意味着指定一种计算方法。
给定表达式此外,根据。
https://en.wikipedia.org/wiki/Gamma_distribution
当x=0,α=1,β=1时,你在分子中得到一个未定义的值,这使整个分数变得不确定。
我们声明,严格来说,零点的分布的伽马密度是不确定的。而以右边的极限为例,密度为1。
有鉴于此,我们认为 "R的计算错误 "的表述是不正确的。更确切地说,这是一个约定俗成的问题:比考虑等于零度的表达。在零点将伽马分布密度等同于零,似乎不是一个有效的做法。
不符合函数的定义,因为它在x=0点包含一个不确定性,正如你所指出的。
如果条件x>=0而不是x>0,那么就没有不确定性,你可以用这个公式计算出数值。
关于实践--Mathematica和Matlab可以说是工程计算的工业标准,它们产生的是0,即该表达式只对x>0有效。
我们可以假设,定义一个函数意味着指定一种计算方法。
给出的表达方式是。不适合用来定义一个函数,因为正如你所指出的,它在x=0处包含一个不确定性。
如果你把条件x>=0而不是x>0,就没有不确定性,你可以用这个公式计算出数值。
关于实践--Mathematica和Matlab可以说是工程计算的行业标准,它们给出的是0,即该表达式只有在x>0时才是真的。
Mathematica和Matlab可以说是工程计算的工业标准
你把一个没有解决方案的情况,查找Wolfram返回的结果,并称其他的结果都是错误的。这不是工程计算,而是教条。
他们可以以R为参考,写出在Wolfram中发现错误的情况。我想如果你把所有的数学软件,根据它们在这种情况下的回报分成两组--会有50%/50%的比例,你可以在一篇关于mql的文章中再增加一打mql擅长的软件。
谢谢你在AS 243 中提到的错误。但你不应该把它归咎于其他带参数的函数的行为,对于这些函数没有明确的解决方案。
所以应该在关于mql优势的文章中写到--看,在R中,有一个函数有小数点后15位的错误。而我们在mql中有另一个函数,它更准确。一切都将是有文化和科学的,而不是像现在这样的教条主义。
让我们考虑一个例子,参数a=0.5,b=1的点x=0
如果我们不排除x=0点,密度就会发散,概率就没问题。
再往前走,也没有问题了。
事实证明,当计算CDF R时排除了x=0点,无穷大在某处消失了。
亲爱的同事!
有好几页都在争论你和R的算法在函数 域边缘的区别。边际点就是边际点,在实践中可以忽略掉这些差异。
但在这种情况下,我有一个更实质性的问题。
你所有的功能的文档在哪里?
以前,我认为我们把你的函数,然后把R的文档,因为你的函数是类似的,然后深入研究R的文档中那些描述算法的部分,或者按照R提供的链接。R有非常高质量的文档和参考仪器。
在争论的过程中,我发现你的函数与R不同--它们是一些其他的函数,其算法依赖于其他来源。文章本身没有关于这一点,没有文件。而我们在完全不同的背景下从雷纳特那里了解到了这一点。
在实践中,我们可以得出一个毫不含糊的结论:代码不能从R移植到MQL5。
原因就在这里。
我很清楚,如果上面写着 "R的类似物",而且没有关于类似物的文档,那么它就是100%的类似物,我可以很容易地将代码从解释器转移到编译器,而不用担心这个问题。如果不是这样,那么一个案例就足以终止将代码从R移植到MQL5的想法了。没有人希望在将工作代码转移到R时,你得到的MQL代码由于算法实现的细微差别而无法工作,这让人完全头疼。
你所有的功能的文档在哪里?
以前,我认为我们把你的函数,然后把R的文档,因为你的函数是类比的,然后进入R文档中那些描述算法的部分,或者去找R提供的链接。R有非常高质量的文档和参考仪器。
在争论的过程中,我发现你的函数与R不同--它们是一些其他的函数,其算法依赖于其他来源。文章本身没有关于这一点,没有文件。而我们在完全不同的背景下从雷纳特那里了解到了这一点。
在实践中,我们可以得出一个毫不含糊的结论:代码不能从R移植到MQL5。
原因就在这里。
我很清楚,如果上面写着 "R的类似物",而且没有关于类似物的文档,那么它就是100%的类似物,我可以很容易地将代码从解释器转移到编译器,而不用担心这个问题。如果不是这样,就足以终止将代码从R移植到MQL5的想法了。没有人希望得到一个完全的僵局,当把工作代码迁移到R中后,你得到了MQL代码,由于算法实现的微妙性,它不能工作。
目前,这些功能在文章https://www.mql5.com/ru/articles/2742 中有所描述。
考虑以参数mu=2,sigma=1的正态分布 为例进行计算。
n <- 10
k <- seq(0,1,by=1/n)
mu=2
sigma=1
normal_pdf<-dnorm(k, mu, sigma, log = FALSE)
normal_cdf<-pnorm(k, mu, sigma, lower.tail=TRUE,log.p = FALSE)
normal_quantile <- qnorm(normal_cdf, mu,sigma, lower.tail=TRUE,log.p = FALSE)
normal_pdf
normal_cdf
normal_quantile
1)R函数dnorm()的类似物是一个函数。
该函数计算随机变量数组x[]的正态分布概率密度函数的值,参数为mu和sigma。如果出现错误,则返回 false。R中dnorm() 的类似物。
2)模拟pnorm。
该函数计算随机变量数组x[]的参数mu和sigma的正态分布函数值。 如果出现错误,则返回false。类似于R中的pnorm()。
3) qnorm的类似物。
这个函数计算参数为mu和sigma的正态分布的反函数值,用于计算概率[]数组的值。 如果出现错误,它将返回false。R中qnorm() 的类似物。
这是一个关于如何使用它的例子。
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- arrays for calculated values
double x_values[];
double normal_pdf[];
double normal_cdf[];
double normal_quantile[];
//--- prepare x values
const int N=11;
ArrayResize(x_values,N);
for(int i=0;i<N;i++)
x_values[i]=i*1.0/(N-1);
//--- set distribution parameters
double mu=2.0;
double sigma=1.0;
//--- calculate pdf, cdf and quantiles
MathProbabilityDensityNormal(x_values,mu,sigma,false,normal_pdf);
MathCumulativeDistributionNormal(x_values,mu,sigma,true,false,normal_cdf);
MathQuantileNormal(normal_cdf,mu,sigma,true,false,normal_quantile);
//--- show calculated values
for(int i=0;i<N;i++)
PrintFormat("1 %d, x=%.20e PDF=%.20e, CDF=%.20e, Q=%.20e,",i,x_values[i],normal_pdf[i],normal_cdf[i],normal_quantile[i]);
}
结果。
2016.11.11:56:46.413 测试(EURUSD,H1) 1 0, x=0.000000000000000000e+00 PDF=5.39909665131880628364e-02, CDF=2.27501319481792120547e-02, Q=0.000000000000000000e+00。
2016.11.11 11:56:46.413 测试 (EURUSD,H1) 1 1, x=1.00000000000000005551e-01 PDF=6.56158147746765951780e-02, CDF=2.87165598160018034624e-02, Q=1.00000000000000088818e-01
2016.11.11 11:56:46.413 测试 (EURUSD,H1) 1 2, x=2.00000000000000011102e-01 PDF=7.895015830089414932-02, CDF=3.593031911292598098213e-02, Q=2.0000000000177636e-01
2016.11.11 11:56:46.413 测试 (EURUSD,H1) 1 3, x=2.99999999999888-01 PDF=9.40490773768869470217e-02, CDF=4.456546247585430410108e-02, Q=3.0000000000266454e-01
2016.11.11 11:56:46.413 测试 (EURUSD,H1) 1 4, x=4.00000000000000022204e-01 PDF=1.1092083434679455543315e-01, CDF=5.47992916995579740225e-02, Q=3.99999999999999911182e-01
2016.11.11:56:46.413 测试(EURUSD,H1) 1 5, x=5.00000000000000-01 PDF=1.29517595665891743772e-01, CDF=6.68072012688580713080e-02, Q=5.0000000000222045e-01,
2016.11.11 11:56:46.413 测试 (EURUSD,H1) 1 6, x=5.99999999999999977796e-01 PDF=1.49727465635744877437e-01, CDF=8.07566592337710387195e-02, Q=6.0000000000310862e-01
2016.11.11 11:56:46.413 测试 (EURUSD,H1) 1 7, x=6.9999999999999551e-01 PDF=1.71368592047807355438e-01, CDF=9.68004845856103440793e-02, Q=7.0000000000177636e-01
2016.11.11:56:46.413 测试 (EURUSD,H1) 1 8, x=8.0000000000000000044409e-01 PDF=1.94186054983212952330e-01, CDF=1.15069670221708289515e-01, Q=8.0000000000000000044409e-01,
2016.11.11 11:56:46.413 测试 (EURUSD,H1) 1 9, x=9.0000000000000000022204e-01 PDF=2.1785217177032550525793e-01, CDF=1.35666060946382671659e-01, Q=9.0000000000133227e-01
2016.11.11:56:46.413 测试 (EURUSD,H1) 1 10, x=1.000000000000000000e+00 PDF=2.41970724519143365328e-01, CDF=1.58655253931457046468e-01, Q=1.000000000000000000e+00。
R中的计算结果。