« 高周波・RFニュース 2026年10月1日 iFixitがApple AirPods 5を分解、KeysightがデュアルチャンネルのSG発表、アンリツが反射板を使った高速道路向け5G実証、Mini-CircuitsがGaN バランスアンプ解説、TDKのMLCCたわみクラック解説 | トップページ | 映画「ディスクロージャー・デイ」を観てきた。宇宙人の存在が隠蔽されているのはわかるが、終盤まで主人公2人に何が起きているのか全く分からない展開(数学が宇宙の共通言語ということだけ…)そして最後には予想通りあの人?が出てくるし、観る人に結末はゆだねられていた。 »

2026年10月 1日 (木)

Go言語の数値計算ライブラリGonumを使う(4)補間を行う。リニアと秋間スプラインを試してGonum Plotでプロット。

今回の例題はこちら。

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

Gonum/interpではFritschButlandやAkima Splineなどが使える。

https://pkg.go.dev/gonum.org/v1/gonum@v0.17.0/interp

今回はリニアと秋間スプラインにしてみよう。

コードはこちら。

package main

import (
    "image/color"
    "math"

    "gonum.org/v1/gonum/interp"
    "gonum.org/v1/plot"
    "gonum.org/v1/plot/plotter"
    "gonum.org/v1/plot/vg"
)

func main() {
    n := 100
    m := 10
    xs := make([]float64, m)
    ys := make([]float64, m)
    originalpts := make(plotter.XYs, m)
    for i := 0; i < m; i++ {
        xs[i] = 2.0 * math.Pi * float64(i) / float64(m-1)
        ys[i] = math.Sin(xs[i])
        originalpts[i].X = xs[i]
        originalpts[i].Y = ys[i]
    }

    var pl interp.PiecewiseLinear
    var as interp.AkimaSpline

    pl.Fit(xs, ys)
    as.Fit(xs, ys)

    linearpts := make(plotter.XYs, n)
    splinepts := make(plotter.XYs, n)
    for i := 0; i < n; i++ {
        x := 2.0 * math.Pi * float64(i) / float64(n-1)
        linearpts[i].X = x
        linearpts[i].Y = pl.Predict(x)
        splinepts[i].X = x
        splinepts[i].Y = as.Predict(x)
    }
    p := plot.New()

    p.Title.Text = "Interpolation"
    p.X.Label.Text = "X"
    p.Y.Label.Text = "Y"
    p.Add(plotter.NewGrid())

    s, err := plotter.NewScatter(originalpts)
    if err != nil {
        panic(err)
    }
    s.GlyphStyle.Color = color.RGBA{G: 255, A: 255}
    llinear, err := plotter.NewLine(linearpts)
    if err != nil {
        panic(err)
    }
    llinear.LineStyle.Color = color.RGBA{B: 255, A: 255}
    lspline, err := plotter.NewLine(splinepts)
    if err != nil {
        panic(err)
    }
    lspline.LineStyle.Color = color.RGBA{R: 255, A: 255}

    p.Add(s, llinear, lspline)
    p.Legend.Add("original", s)
    p.Legend.Add("PiecewiseLinear", llinear)
    p.Legend.Add("AkimaSpline", lspline)

    if err := p.Save(10*vg.Inch, 6*vg.Inch, "interp.png"); err != nil {
        panic(err)
    }
}

実行結果

Interp 

ちゃんと補間できているようだ。

« 高周波・RFニュース 2026年10月1日 iFixitがApple AirPods 5を分解、KeysightがデュアルチャンネルのSG発表、アンリツが反射板を使った高速道路向け5G実証、Mini-CircuitsがGaN バランスアンプ解説、TDKのMLCCたわみクラック解説 | トップページ | 映画「ディスクロージャー・デイ」を観てきた。宇宙人の存在が隠蔽されているのはわかるが、終盤まで主人公2人に何が起きているのか全く分からない展開(数学が宇宙の共通言語ということだけ…)そして最後には予想通りあの人?が出てくるし、観る人に結末はゆだねられていた。 »

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

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

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

コメント

コメントを書く

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

« 高周波・RFニュース 2026年10月1日 iFixitがApple AirPods 5を分解、KeysightがデュアルチャンネルのSG発表、アンリツが反射板を使った高速道路向け5G実証、Mini-CircuitsがGaN バランスアンプ解説、TDKのMLCCたわみクラック解説 | トップページ | 映画「ディスクロージャー・デイ」を観てきた。宇宙人の存在が隠蔽されているのはわかるが、終盤まで主人公2人に何が起きているのか全く分からない展開(数学が宇宙の共通言語ということだけ…)そして最後には予想通りあの人?が出てくるし、観る人に結末はゆだねられていた。 »

最近の記事

2026年10月
日 月 火 水 木 金 土
        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

最近のコメント

無料ブログはココログ
フォト