この関数は,確率変数 x[] の配列に対して,パラメータ mu と sigma を持つ正規分布の確率密度関数の値を計算します.エラーの場合は falseを 返す。R言語のdnorm() の類似品です。
boolMathProbabilityDensityNormal(
constdouble &x[], // [in] Массив со значениями случайной величиныconstdouble mu, // [in] Параметр распределения mean (математическое ожидание)constdouble sigma, // [in] Параметр распределения sigma (среднеквадратическое отклонение) constbool log_mode, // [in] Флаг расчета логарифма значения, если log_mode=true, то рассчитывается натуральный логарифм плотности вероятностиdouble &result[] // [out] Массив для значений функции плотности вероятности
);
2)アナログpnorm。
この関数は,乱数 x[] の配列に対して,パラメータ mu と sigma を持つ正規分布関数の値を計算します. エラーの場合は,false を返します.Rのpnorm() の類似品です。
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, alpha = 1, beta = 1 のとき、分子に不定値が発生し、分数全体が不確定になる。
厳密には、点ゼロでの分布のガンマ密度は不定であることを述べる。そして、右側の制限を取ると、密度は1です。
このことから、「Rの計算ミス」という表現は正しくないと考えています。より正確には、次数0の表現に等しいと考えるよりも、という慣習の問題である。ガンマ分布の密度を点ゼロでゼロに等しくすることは、有効な方法とは言えないようです。
は、ご指摘の通り、点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でエラーを発見することについて書くこともできます。すべての数学ソフトウェアを、この状況で何を返すかで2つのグループに分けると、50%と50%に分かれるでしょう、あなたはmqlについての記事でmqlが得意なソフトウェアをさらに十数個追加できますね。
AS243の 誤りについて言及していただき、ありがとうございます。しかし、明確な解決策がない他のパラメータ付き関数の動作のせいにしてはいけません。
そこで、mqlの利点について、「ほら、Rでは小数点以下15桁の誤差がある関数がある」と記事に書くべきだったのです。そして、より精度の高い別の関数をmqlに搭載しています。今のように独断的ではなく、すべてが文化的で科学的なものになるのです。
点x=0において、パラメータa=0.5, b=1の例を考えてみよう。
点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 Test (EURUSD,H1) 1 0, x=0.0000000000000000e+00 PDF=5.39909665131880628364e-02, CDF=2.27501319481792120547e-02, Q=0.0000000000000000e+00,
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 1, x=1.0000000000005551e-01 PDF=6.561581477465951780e-02, CDF=2.87165598160018034624e-02, Q=1.00000000000000088818e-01
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 2, x=2.0000000000011102e-01 PDF=7.89501583008941493214e-02, CDF=3.593031911292598098213e-02, Q=2.0000000000177636e-01
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 3, x=2.9999999999988898e-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.0000000000022204e-01 PDF=1.1092083434679455543315e-01, CDF=5.4799291695579740225e-02, Q=3.999999999999999911182e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 5, x=5.0000000000000000e-01 PDF=1.29517595665891743772e-01, CDF=6.68072012688580713080e-02, Q=5.0000000000222045e-01.Q=1.00000000000000000000e-01.Q=1.00000000000000000000e-01.Q=1.00000000000000000000e-01.Q=1.00000000000000000000e-01.Q=1.00000000000000000000e-01,
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 6, x=5.999999999999999999796e-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.9999999999955591e-01 PDF=1.71368592047807355438e-01, CDF=9.68004845856103440793e-02, Q=7.00000000177636e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 8, x=8.000000000000044409e-01 PDF=1.94186054983212952330e-01, CDF=1.15069670221708289515e-01, Q=8.000000000000044409e-01.Q=1.0000000000000000044409e-01.Q=8.0000000000000000044409e-01.Q=8.0000000000000000044409e-01,
2016.11.11 11:56:46.413 テスト (EURUSD,H1) 1 9, x=9.000000000000022204e-01 PDF=2.1785217177032550525793e-01, CDF=1.35666060946382671659e-01, Q=9.0000000000133227e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 10, x=1.0000000000000000e+00 PDF=2.41970724519143365328e-01, CDF=1.58655253931457046468e-01, Q=1.0000000000000000e+00,
Rで計算した結果。