« かつやでカツ煮冷やしそばをいただく。ぬるいおそばの上にカツ煮で半ご飯プラスということでこれだけ聞くと???という感じですが、お蕎麦屋さんのカツ丼定食でカツ丼+そばと思うと違和感ない。 | トップページ | すき家で旨辛やきとり丼(ご飯大盛)をいただく。「もも」「つくね」「鶏皮」といろんな部位があっていいが、旨辛でもどちらかというと甘味が強かったかも。 »

2022年9月14日 (水)

Visual C# (C_sharp)の数値計算ライブラリ MathNET Numericsを使う(9) いろんな確率分布の乱数(メルセンヌツイスタがベース)をヒストグラムにして描く。とりあえず正規分布とガンマ分布で。

さて今回は乱数。

https://numerics.mathdotnet.com/Random.html

https://numerics.mathdotnet.com/Probability.html

Math.NET Numericsにはヒストグラムにする機能もある。

https://numerics.mathdotnet.com/DescriptiveStatistics.html

ということで非常に簡単にできる。

まずは正規分布。

Mathnet_random01

プログラムはこちら。めっちゃ簡単。

Mathnet_random02

次はガンマ分布。

Mathnet_random03

Mathnet_random04

 

テキストでコードを書いときます。


正規分布
            Random rnd = new MersenneTwister(42);
            int N = 10000;
            double xmin = -5.0;
            double xmax = 5.0;
            int bin = 100;

            double[] normal = new double[N];
            Normal.Samples(rnd, normal, 0.0, 1.0);
            var hist = new Histogram(normal, bin, xmin, xmax);


            for (int i = 0; i < hist.BucketCount; i++)
            {
                double x = (hist[i].UpperBound + hist[i].LowerBound) / 2.0;
                series1.Points.AddXY(x,hist[i].Count/(N));
                series2.Points.AddXY(x, ((xmax - xmin) / bin)*Math.Exp(-x * x / 2.0)/Math.Sqrt(2.0*Math.PI));
            }





ガンマ分布
            Random rnd = new MersenneTwister(42);
            int N = 10000;
            double xmin = 0.0;
            double xmax = 20.0;
            int bin = 100;
            double k = 9.0;
            double theta = 0.5;

            double[] gamma = new double[N];
            Gamma.Samples(rnd, gamma, k, 1.0/theta);
            var hist = new Histogram(gamma, bin, xmin, xmax);


            for (int i = 0; i < hist.BucketCount; i++)
            {
                double x = (hist[i].UpperBound + hist[i].LowerBound) / 2.0;
                series1.Points.AddXY(x, hist[i].Count /N);
                series2.Points.AddXY(x, ((xmax - xmin) / bin) * Math.Pow(x, k - 1.0) * Math.Exp(-x / theta) 
                    / (Math.Pow(theta, k)*SpecialFunctions.Gamma(k)));

            }

 

 

 

過去のもの:

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(3) 高速フーリエ変換(FFT)を実行する。FourierOptionsにMatlabとNumerical Recipesがあるのが意外。

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。

Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(5) 常微分方程式の数値解法、4段4次のルンゲクッタ法がRungeKutta.FourthOrderの一文でできる。ローレンツ方程式を例としてやってみる

Visual C# (C_sharp)の数値計算ライブラリ MathNET Numericsを使う(6) OptimizationのNelder-Mead SimplexでRosenbrock関数(5パラメータ)を最小になる点を探す。

Visual C# (C_sharp)の数値計算ライブラリ MathNET Numericsを使う(7) OptimizationのLevenberg-Marquardt法(LevenbergMarquardtMinimizer)で非線形最小二乗法(回帰)でNISTの例題Rat43を計算する。

Visual C# (C_sharp)の数値計算ライブラリ MathNET Numericsを使う(8) 特異値分解(SVD)、主成分分析(PCA)を計算してみる(ちょうど奥村先生が記事を出されてたので)

« かつやでカツ煮冷やしそばをいただく。ぬるいおそばの上にカツ煮で半ご飯プラスということでこれだけ聞くと???という感じですが、お蕎麦屋さんのカツ丼定食でカツ丼+そばと思うと違和感ない。 | トップページ | すき家で旨辛やきとり丼(ご飯大盛)をいただく。「もも」「つくね」「鶏皮」といろんな部位があっていいが、旨辛でもどちらかというと甘味が強かったかも。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« かつやでカツ煮冷やしそばをいただく。ぬるいおそばの上にカツ煮で半ご飯プラスということでこれだけ聞くと???という感じですが、お蕎麦屋さんのカツ丼定食でカツ丼+そばと思うと違和感ない。 | トップページ | すき家で旨辛やきとり丼(ご飯大盛)をいただく。「もも」「つくね」「鶏皮」といろんな部位があっていいが、旨辛でもどちらかというと甘味が強かったかも。 »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ