Keyword: 3次, スプライン
概要
本サンプルは3次スプラインの評価を行うC#によるサンプルプログラムです。 本サンプルは以下に示されるデータについて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");
}
}
}
}
