数値解析と制御のためのScilab入門

数値解析と制御のためのScilab入門では、行列、微分方程式、制御などの基礎的な計算を紹介しています。また、計算結果をScilabを用いたグラフィック表示による可視化について紹介しています。

*

3次スプライン補間 splin について!

      2015/05/27

計測したデータを補間して表示させたい場合には、3次スプライン補間 splinを用いると見やすくなります。離散的なデータをフラットな曲線で表示できるので、データの推移を把握できます。



splin関数は3次スプライン補間で
d = splin(x, y ,spline_typ)
のようになります。この関数は、点(xi,yi)を補間し、i=1,..,nについてs(xi)=yi となる3次スプラインで補間します。また、spline_typeパラメータにより、いくつかの種類のスプラインを利用することができます。

SPONSORED LINK



 例として、補間の区間は[0,1]、データの個数は10個、データは乱数で作成し、スプラインの評価点は800点として、3次スプライン補間を行なってみることにします。
次のようなプログラムを実行すると得ることができます。

1. //異なるスプラインの計算
2. a = 0; b = 1; // 補間の区間
3. n = 10; // 補間点の個数nb
4. m = 800; // 評価を行う離散点
5. x = linspace(a,b,n)’; // 補間点の横座標
6. y = rand(x); // 補間点の縦座標
7. xx = linspace(a,b,m)’;
8. yk = interp(xx, x, y, splin(x,y,”not_a_knot”)); //デフォルト
9. yf = interp(xx, x, y, splin(x,y,”fast”)); //ローカルなスキーム
10. ym = interp(xx, x, y, splin(x,y,”monotone”));//単調なスキーム
11. clf()
12. plot2d(xx, [yk yf ym ], style=[3 5 2 ], strf=”121″, …
13. leg=”fast@monotone@not a knot spline”)
14. plot2d(x,y,-9, strf=”000″) // to show interpolation points
15. xtitle(“Various spline on random data”)
16. show_window()

  • 【プログラムの流れ】
  • 5行目は補間する座標点の計算で、区間[0,1]を10等分します。
    6行目は乱数でデータを10個作成しています。7行目は区間[0,1]を離散評価点800点としています。
    8行目は3次スプラインがデフォルトで計算されます。計算結果をykとしています。
    9行目は3次スプラインがローカルなスキームで計算されます。計算結果をyfとしています。
    10行目は3次スプラインが区間で単調となるようなスキームで計算されます。計算結果をymとしています。
    12行の継続行が13行目です。ここでは、異なる3次スプラインの結果を表示します。3次スプラインyk=”not_a_knot”、yf =”fast”、ym =”monotone”の順で、線の色はそれぞれ、緑、赤、青となっています。
    14行目は元のデータを○(-9)で表示しています。
    15行目はグラフのタイトルを表示しています。
    16行目はカレントのグラフィックウインドウを前面に出します。

    3次スプライン補間 :splin

     この結果からすると3次スプライン補間を行う場合には、ローカルなスキームで計算される”fast”か、単調となるようなスキームで計算される”monotone”がごく自然で適しているようです。


     - グラフィック, 数値計算, 線形補間法

            

    SPONSORED LINK

    SPONSORED LINK

      関連記事

    連立方程式
    連立一次方程式を解いてみる|scilab入門

    逆行列 inv と (¥)を用いて、簡単なの連立一次方程式を解いてみました。 次 …

    正規分布
    正規分布と相関係数

    正規分布と相関係数について行ってみます。 初めに  ・正規分布  ・相関係数 を …

    行列
    行列演算の基礎計算 |scilab入門

    行列演算はScilabの基本となっています。行列を用いることにより数式レベルで扱 …

    ifによる分岐と関係演算子・論理演算子
    ifによる分岐と関係演算子・論理演算子

    繰り返し処理に if による分岐と関係演算子・論理演算子 を用いることにします。 …

    scilab パイi
    円周率 π を表す|scilab入門

    円周率 π を表す場合には、パーセントの後にpiとし  %pi のように表記しま …

    scilab 絶対値
    絶対値の計算 abs|scilab入門

    絶対値の計算:abs の計算の紹介です。  5 – 9 の計算は   …

    2次元プロットにグリッドを追加
    2次元プロットにグリッドを追加:xgrid|グラフィック

    グラフのデータを比較したいとか、見やすくしたい場合には、グリッドを入れて表示させ …

    グラフに文字列を描画:xstring
    グラフに文字列を描画 xstring

    グラフに項目たタイトルの文字列を描画して見やすくする方法があります。 描画するグ …

    高速フーリエー変換 FFT
    高速フーリエ変換 FFTの計算

    高速フーリエ変換 FFT の計算を行ってみます。  フーリエ変換は雑音を含んだ …

     複数のグラフィック・ウィンドウを開く:scf
    複数のグラフィック・ウィンドウを開く scf

    グラフを重ね書きをしないで、表示させたい場合に scf を用いるととても便利です …