« 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(7/18更新)日本が垂直に増加してきた。どこもBA.5で増えているが日本が一番急。とうとう第7波か…もう1028万人累積でかかっている。 | トップページ | Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(3) 高速フーリエ変換(FFT)を実行する。FourierOptionsにMatlabとNumerical Recipesがあるのが意外。 »

2022年7月20日 (水)

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

さて、前回はMath.NET Numericsを使って準備と行列の計算をやってみた。

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

今回は補間。

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

を見るとかなりいろんな方法が使える。推奨されているのはIf unsure, we recommend using RationalWithoutPoles for most cases.

だそうなのでそれでやってみる。例題は、、、Numpyのやつを使おう。

https://numpy.org/doc/stable/reference/generated/numpy.interp.html

せっかくなんで線形補間と有理関数補間の両方やってみよう。

(お絵描き部分は略)。結果はこんな感じで。

Mathnet_interpolate01

ソースコードはこんな感じ。

Mathnet_interpolate02

テキストでも書いておく。


  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // 初期化
            chart1.Series.Clear();      
            chart1.Titles.Clear();      
            chart1.Legends.Clear();     
            chart1.ChartAreas.Clear();  
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Title title = new Title("補間", Docking.Top);
            chart1.Titles.Add(title);
            Legend legend = new Legend();
            chart1.Legends.Add(legend);

            Series series1 = new Series();
            series1.ChartType = SeriesChartType.Line;
            series1.BorderWidth = 1;
            series1.LegendText = "補間データ1";
            chart1.Series.Add(series1);

            Series series2 = new Series();
            series2.ChartType = SeriesChartType.Point;
            series2.MarkerSize = 10;
            series2.LegendText = "元データ";
            chart1.Series.Add(series2);

            Series series3 = new Series();
            series3.ChartType = SeriesChartType.Line;
            series3.BorderWidth = 1;
            series3.LegendText = "補間データ2";
            chart1.Series.Add(series3);

            chart1.ChartAreas.Add("");
            Axis axisX = new Axis();
            axisX.Title = "X軸";
            axisX.Minimum = 0;                           
            axisX.Maximum = 7;                          
            axisX.Interval = 0.5;                              
            chart1.ChartAreas[0].AxisX = axisX;

            Axis axisY = new Axis();
            axisY.Title = "Y軸";                           
            axisY.Minimum = -1;                           
            axisY.Maximum = 1;                       
            axisY.Interval = 0.2;                        
            chart1.ChartAreas[0].AxisY = axisY;

            double[] x = Generate.LinearSpaced(10, 0.0, 2.0 * Math.PI);
            double[] y = Generate.Map(x, Math.Sin);
            var InterpFunction = Interpolate.RationalWithoutPoles(x, y);
            var InterpFunction2 = Interpolate.Linear(x, y);

            double[] xval = Generate.LinearSpaced(50, 0.0, 2.0 * Math.PI);
            double[] yinterp = new double[xval.Length];
            double[] yinterp2 = new double[xval.Length];
            for (int i = 0; i < xval.Length; i++)
            {
                yinterp[i] = InterpFunction.Interpolate(xval[i]);
                yinterp2[i] = InterpFunction2.Interpolate(xval[i]);
            }

            // データ設定
            for (int i = 0; i < xval.Length; i++)
            {
                series1.Points.AddXY(xval[i], yinterp[i]);
                series3.Points.AddXY(xval[i], yinterp2[i]);
            }
            for (int i = 0; i < x.Length; i++)
            {
                series2.Points.AddXY(x[i], y[i]);
            }
        }
    }

« 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(7/18更新)日本が垂直に増加してきた。どこもBA.5で増えているが日本が一番急。とうとう第7波か…もう1028万人累積でかかっている。 | トップページ | Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(3) 高速フーリエ変換(FFT)を実行する。FourierOptionsにMatlabとNumerical Recipesがあるのが意外。 »

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

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

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

コメント

コメントを書く

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

« 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(7/18更新)日本が垂直に増加してきた。どこもBA.5で増えているが日本が一番急。とうとう第7波か…もう1028万人累積でかかっている。 | トップページ | Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(3) 高速フーリエ変換(FFT)を実行する。FourierOptionsにMatlabとNumerical Recipesがあるのが意外。 »

最近の記事

最近のコメント

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