Keyword: エアリー関数, 導関数, 複素数
概要
本サンプルはエアリー関数 Ai(z)あるいはその導関数 Ai'(z)を求めるC#によるサンプルプログラムです。 本サンプルは複素数の引数zを読み込み、zの各値についてエアリー関数 Ai(z)あるいはその導関数 Ai'(z)を求めて出力します。
※本サンプルはnAG Library for .NETに含まれる関数 s17dg() のExampleコードです。本サンプル及び関数の詳細情報は s17dg のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はs17dg のマニュアルページを参照)| このデータをダウンロード |
s17dg Example Program Data 'F' ( 0.3, 0.4) 'U' 'F' ( 0.2, 0.0) 'U' 'F' ( 1.1, -6.6) 'U' 'F' ( 1.1, -6.6) 'S' 'D' (-1.0, 0.0) 'U'
- 1行目はタイトル行で読み飛ばされます。
- 2〜6行目に求めるのは関数か導関数かを示すフラグ(deriv)、複素数の引数zの値、スケーリングオプション(scal)を指定しています。"F"はエアリー関数Ai(z)、"D"はエアリー関数の導関数Ai'(z)を意味します。また、 "U"はスケーリングをしないことを意味し、 "S"はスケーリングすることを意味します。
出力結果
(本関数の詳細はs17dg のマニュアルページを参照)| この出力例をダウンロード |
s17dg Example Program Results deriv z scal ai nz ifail F ( 0.3000, 0.4000) U ( 0.2716, -0.1002) 0 0 F ( 0.2000, 0.0000) U ( 0.3037, 0.0000) 0 0 F ( 1.1000,-6.6000) U (-43.6632,-47.9030) 0 0 F ( 1.1000,-6.6000) S ( 0.1655, 0.0597) 0 0 D ( -1.0000, 0.0000) U ( -0.0102, 0.0000) 0 0
- 5〜9行目には求めるのは関数か導関数かを示すフラグ、引数zの値、スケーリングオプション、エアリー関数または導関数の値、エアリー関数または導関数の値がアンダーフローによりゼロにセットされたかどうかを示すフラグ、エラーコードが出力されています。nz の"0"はゼロにセットされていないことを意味します。
ソースコード
(本関数の詳細はs17dg のマニュアルページを参照)
※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「nAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
// s17dg Example Program Text
// C# version, nAG Copyright 2008
using System;
using NagLibrary;
namespace NagDotNetExamples
{
public class S17DGE
{
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
{
PrintManager.Warning = new PrintManager.MessageLogger(discardmessage);
DataReader sr = null;
if (defaultdata)
{
sr = new DataReader("exampledata/s17dge.d");
}
else
{
sr = new DataReader(datafile);
}
Complex ai = new Complex(0.0, 0.0), z = new Complex(0.0, 0.0);
double xxx = ai.re;
int nz = 0;
string deriv = "",
scal = "";
int ifail;
Console.WriteLine("s17dg Example Program Results");
// Skip heading in data file
sr.Reset();
Console.WriteLine("");
Console.WriteLine(" {0}", "deriv z scal ai nz ifail");
Console.WriteLine("");
try
{
while (true)
{
sr.Reset();
deriv = sr.Next();
z = Complex.Parse(sr.Next());
scal = sr.Next();
//
S.s17dg(deriv, z, scal, out ai, out nz, out ifail);
//
string formattedZ = String.Format("({0,8:f4},{1,7:f4})", z.re, z.im);
string formattedAI = String.Format("({0,8:f4},{1,8:f4})", ai.re, ai.im);
if (ifail >= 0)
{
Console.WriteLine(" {0,-5} {1}{2,6} {3,8}{4,5}{5,7}", deriv, formattedZ, scal, formattedAI, nz, ifail);
}
else
{
Console.WriteLine("** s17dg failed with ifail = {0,5}", ifail);
}
}
}
catch
{
}
//
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine("Exception Raised");
}
}
static void discardmessage(String message)
{
}
}
}
