関連情報

C#による 3次スプラインの評価

C#によるサンプルソースコード
使用関数名:e02bb

Keyword: 3次, スプライン

概要

本サンプルは3次スプラインの評価を行うC#によるサンプルプログラムです。 本サンプルは以下に示されるデータについて3次スプラインの値を求めて出力します。

3次スプラインのデータ 

※本サンプルはNAG Library for .NETに含まれる関数 e02bb() のExampleコードです。本サンプル及び関数の詳細情報は e02bb のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで

入力データ

(本関数の詳細はe02bb のマニュアルページを参照)

このデータをダウンロード
e02bb Example Program Data
  9
   4
     1.00
     1.00
     1.00
     1.00
     3.00
     6.00
     8.00
     9.00
     9.00
     9.00
     9.00
     1.00
     2.00
     4.00
     7.00
     6.00
     4.00
     3.00 

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目にスプラインを計算する点の数(m)を指定しています。
  • 3行目にスプラインが定義される区間の数(ncap)を指定しています。
  • 4〜14行目に拡張されたノット(lamda)を指定しています。
  • 15〜21行目にBスプライン係数(c)を指定しています。

出力結果

(本関数の詳細はe02bb のマニュアルページを参照)

この出力例をダウンロード
e02bb Example Program Results

   J       LAMDA(J)    B-spline coefficient (J-2)

    1        1.0000
    2        1.0000
    3        1.0000               1.0000
    4        1.0000               2.0000
    5        3.0000               4.0000
    6        6.0000               7.0000
    7        8.0000               6.0000
    8        9.0000               4.0000
    9        9.0000               3.0000
   10        9.0000
   11        9.0000

   R       Argument      Value of cubic spline

    1        1.0000               1.0000
    2        2.0000               2.3779
    3        3.0000               3.6229
    4        4.0000               4.8327
    5        5.0000               5.8273
    6        6.0000               6.3571
    7        7.0000               6.1905
    8        8.0000               5.1667
    9        9.0000               3.0000

  • 6〜9行目に拡張ノットとBスプライン係数が出力されています。
  • 19〜27行目に3次スプラインの評価点と3次スプラインの値が出力されています。

ソースコード

(本関数の詳細はe02bb のマニュアルページを参照)

※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「NAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法


このソースコードをダウンロード
//      e02bb Example Program Text
//      C# version, NAG Copyright 2008
using System;
using NagLibrary;
namespace NagDotNetExamples
{
  public class E02BBE
  {
    static bool defaultdata = true;
    static string datafile = "";
    static void Main(String[] args)
    {
      if (args.Length == 1)
      {
        defaultdata = false;
        datafile = args[0];
      }
      StartExample();
    }
    public static void StartExample()
    {
      try
      {
        DataReader sr = null;
        if (defaultdata)
        {
          sr = new DataReader("exampledata/e02bbe.d");
        }
        else
        {
          sr = new DataReader(datafile);
        }
        double a,   b,   s,   x; int j, m, ncap, r;
        int ifail;
        Console.WriteLine("e02bb Example Program Results");
        //      Skip heading in data file
        sr.Reset();
        try
        {
          while (true)
          {
            sr.Reset();
            m = int.Parse(sr.Next());
            if (m > 0)
            {
              sr.Reset();
              ncap = int.Parse(sr.Next());
              if (ncap + 7 >= 8)
              {
                double[] c = new double[ncap+7];
                double[] lamda = new double[ncap+7];
                sr.Reset();
                for (j = 1 ; j <= ncap + 7 ; j++)
                {
                  lamda[j - 1] = double.Parse(sr.Next());
                }
                sr.Reset();
                for (j = 1 ; j <= ncap + 3 ; j++)
                {
                  c[j - 1] = double.Parse(sr.Next());
                }
                a = lamda[3];
                b = lamda[ncap + 4 - 1];
                Console.WriteLine("");
                for (r = 1 ; r <= m ; r++)
                {
                  x = ((double)(m - r) * a + (double)(r - 1) * b) / (double)(m - 1);
                  // 
                  E02.e02bb(ncap + 7, lamda, c, x, out s, out ifail);
                  // 
                  if (ifail == 0)
                  {
                    if (r == 1)
                    {
                      Console.WriteLine(" {0}","  J       LAMDA(J)    B-spline coefficient (J-2)");
                      Console.WriteLine("");
                      for (j = 1 ; j <= ncap + 7 ; j++)
                      {
                        if ((j < 3) || (j > ncap + 5))
                        {
                          Console.WriteLine("  {0,3}{1,14:f4}",j,lamda[j - 1]);
                        }
                        else
                        {
                          Console.WriteLine("  {0,3}{1,14:f4}{2,21:f4}",j,lamda[j - 1],c[j - 2 - 1]);
                        }
                      }
                      Console.WriteLine("");
                      Console.WriteLine(" {0}","  R       Argument      Value of cubic spline");
                      Console.WriteLine("");
                    }
                    Console.WriteLine("  {0,3}{1,14:f4}{2,21:f4}",r,x,s);
                  }
                  else
                  {
                    Console.WriteLine(" ** e02bb returned with ifail = {0, 3}", ifail);
                  }
                }
              }
            }
          }
        }
        catch
        {
        }
        // 
      }
      catch (Exception e)
      {
        Console.WriteLine(e.Message);
        Console.WriteLine("Exception Raised");
      }
    }
  }
}


Results matter. Trust NAG.

Privacy Policy | Trademarks