関連情報

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

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

Keyword: 双3次, スプライン

概要

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

双3次スプラインのデータ 

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

入力データ

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

このデータをダウンロード
e02de Example Program Data
11  10                                                   PX  PY
1.0  1.0  1.0  1.0  1.3  1.5  1.6  2.0  2.0  2.0  2.0    LAMDA(1) .. LAMDA(PX)
0.0  0.0  0.0  0.0  0.4  0.7  1.0  1.0  1.0  1.0         MU(1) .. MU(PY)
1.0000   1.1333   1.3667   1.7000   1.9000   2.0000
1.2000   1.3333   1.5667   1.9000   2.1000   2.2000
1.5833   1.7167   1.9500   2.2833   2.4833   2.5833
2.1433   2.2767   2.5100   2.8433   3.0433   3.1433
2.8667   3.0000   3.2333   3.5667   3.7667   3.8667
3.4667   3.6000   3.8333   4.1667   4.3667   4.4667
4.0000   4.1333   4.3667   4.7000   4.9000   5.0000     Spline coefficients, C
7                                                       M
1.0  0.0                                                X(1), Y(1)
1.1  0.1
1.5  0.7
1.6  0.4
1.9  0.3
1.9  0.8
2.0  1.0                                                X(M), Y(M) 

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目にx方向のノット数(px)、y方向のノット数(py)を指定しています。
  • 3行目に変数xに関するノット(lamda)を指定しています。
  • 4行目に変数yに関するノット(mu)を指定しています。
  • 5〜11行目に双3次スプライン係数(c)を指定しています。
  • 12行目にスプラインの値が必要となるデータ点の数(m)を指定しています。
  • 13〜19行目にスプラインの値が必要となる点のx座標(x)、y座標(y)を指定しています。

出力結果

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

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

       I       X(I)       Y(I)      FF(I)
       1      1.000      0.000      1.000
       2      1.100      0.100      1.310
       3      1.500      0.700      2.950
       4      1.600      0.400      2.960
       5      1.900      0.300      3.910
       6      1.900      0.800      4.410
       7      2.000      1.000      5.000


  • 3〜10行目にインデックス、xの値、yの値、スプラインの値が出力されています。

ソースコード

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

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


このソースコードをダウンロード
//      e02de Example Program Text
//      C# version, NAG Copyright 2008
using System;
using NagLibrary;
namespace NagDotNetExamples
{
  public class E02DEE
  {
    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/e02dee.d");
        }
        else
        {
          sr = new DataReader(datafile);
        }
        int i,   m,   px,   py; int ifail;
        Console.WriteLine("e02de Example Program Results");
        //      Skip heading in data file
        sr.Reset();
        //      Read px and py, the number of knots in the x and Y directions.
        sr.Reset();
        px = int.Parse(sr.Next());
        py = int.Parse(sr.Next());
        if (px >= 8 && py >= 8)
        {
          double[] lamda = new double[px];
          double[] mu = new double[py];
          double[] c = new double[(px-4)*(py-4)];
          sr.Reset();
          for (i = 1 ; i <= px ; i++)
          {
            lamda[i - 1] = double.Parse(sr.Next());
          }
          sr.Reset();
          for (i = 1 ; i <= py ; i++)
          {
            mu[i - 1] = double.Parse(sr.Next());
          }
          //         Read C, the bicubic spline coefficients.
          sr.Reset();
          for (i = 1 ; i <= (px - 4) * (py - 4) ; i++)
          {
            c[i - 1] = double.Parse(sr.Next());
          }
          //         Read M, the number of spline evaluation points.
          sr.Reset();
          m = int.Parse(sr.Next());
          if (m >= 1)
          {
            double[] x = new double[m];
            double[] y = new double[m];
            double[] ff = new double[m];
            //            Read the x and Y co-ordinates of the evaluation points.
            for (i = 1 ; i <= m ; i++)
            {
              sr.Reset();
              x[i - 1] = double.Parse(sr.Next());
              y[i - 1] = double.Parse(sr.Next());
            }
            // 
            //            Evaluate the spline at the M points.
            E02.e02de(m, px, py, x, y, lamda, mu, c, ff, out ifail);
            // 
            Console.WriteLine("");
            if (ifail == 0)
            {
              //               Print the results.
              Console.WriteLine(" {0}","      I       X(I)       Y(I)      FF(I)");
              for (i = 1 ; i <= m ; i++)
              {
                Console.WriteLine(" {0, 7}{1, 11:f3}{2,11:f3}{3,11:f3}", i, x[i - 1], y[i - 1], ff[i - 1]);
              }
              Console.WriteLine();
            }
            else
            {
              Console.WriteLine(" ** e02de returned with ifail = {0, 3}", ifail);
            }
          }
        }
        // 
      }
      catch (Exception e)
      {
        Console.WriteLine(e.Message);
        Console.WriteLine("Exception Raised");
      }
    }
  }
}


Results matter. Trust NAG.

Privacy Policy | Trademarks