« 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(10/30更新) 日本も韓国も微増し始めた。あとログスケールにしていると3年超えたので左に寄る…いつになったら終息か… | トップページ | 大阪、寝屋川の成田山不動尊でお参り。 »

2022年11月 1日 (火)

Visual C# (C_sharp)の数値計算ライブラリ MathNET Numericsを使う(10) 数値積分としてガウス・クロンロッド積分公式と二重指数関数型積分公式を試す。 

今回は数値積分やってみよう。

これは例題がちゃんと公式サイトに書かれているので簡単。

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

数値積分の方法としては

DoubleExponentialTransformation
GaussKronrodRule
GaussLegendreRule
NewtonCotesTrapeziumRule
SimpsonRule

が選べる。今回はガウス・クロンロッド(オーダーいろいろ変える)と二重指数関数型積分公式をやってみよう。

積分は

∫4/(1+x^2)dx (積分範囲[0,1])

∫1/√(1-x^2)dx (積分範囲[-1,1])

とする。結果はこちら。

Mathnetintegral1

ガウス・クロンロッドの方は予想通りの精度だが、二重指数関数型積分公式が悪いな。

なんで?Githubのコード見てみよう。

今回のコードはこちら。めちゃくちゃ簡単。

Mathnetintegral2

テキストでもコードを書いておきます。


using System;
using MathNet.Numerics.Integration;

namespace MathNetIntegral
{
    class Program
    {
        static void Main(string[] args)
        {
            double ApproximatePi;
            double err;

            Console.WriteLine("ガウス・クロンロッドの積分公式で∫4/(1+x^2)dx (積分範囲[0,1])の計算");
            for (int n = 2; n <= 20; n++)
            {
                ApproximatePi =  GaussKronrodRule.Integrate(x => 4.0 / (1.0 + x * x), 0.0, 1.0, out _, out _, order : n);
                err = ApproximatePi - Math.PI;
                Console.WriteLine("次数" + n.ToString() + ":  " + ApproximatePi.ToString() +"    誤差: " +  err.ToString());
            }
            Console.WriteLine();

            Console.WriteLine("二重指数型数値積分で∫1/√(1-x^2)dx (積分範囲[-1,1])の計算");
            double integrate = DoubleExponentialTransformation.Integrate(x => 1.0 / Math.Sqrt(1.0 - x * x), -1.0, 1.0, 1.0e-16);
            Console.WriteLine(integrate.ToString());

        }
    }
}

 

 

過去のもの:

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)を計算してみる(ちょうど奥村先生が記事を出されてたので)

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

 

 

« 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(10/30更新) 日本も韓国も微増し始めた。あとログスケールにしていると3年超えたので左に寄る…いつになったら終息か… | トップページ | 大阪、寝屋川の成田山不動尊でお参り。 »

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

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

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

コメント

コメントを書く

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

« 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(10/30更新) 日本も韓国も微増し始めた。あとログスケールにしていると3年超えたので左に寄る…いつになったら終息か… | トップページ | 大阪、寝屋川の成田山不動尊でお参り。 »

最近の記事

最近のコメント

2022年11月
    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      
フォト
無料ブログはココログ