Keyword: ベッセル関数, 複素数
概要
本サンプルは複素数zのベッセル関数Yv+a(z)を求めるC言語によるサンプルプログラムです。 本サンプルは引数zを読み込み、zの各値についてベッセル関数Yv+a(z)を求めて出力します。
※本サンプルはnAG Cライブラリに含まれる関数 nag_complex_bessel_y() のExampleコードです。本サンプル及び関数の詳細情報は nag_complex_bessel_y のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はnag_complex_bessel_y のマニュアルページを参照)| このデータをダウンロード |
nag_complex_bessel_y (s17dcc) Example Program Data 0.00 ( 0.3, 0.4) Nag_UnscaleRes 2.30 ( 2.0, 0.0) Nag_UnscaleRes 2.12 (-1.0, 0.0) Nag_UnscaleRes 1.58 (-2.3, 5.6) Nag_UnscaleRes 1.58 (-2.3, 5.6) Nag_ScaleRes
- 1行目はタイトル行で読み飛ばされます。
- 2〜6行目に、ベッセル関数の関数列の最初の関数の次数(fnu)、引数zの複素数の値(z.re,z.im)、スケーリングオプション(scal)を指定しています。"Nag_UnscaleRes"はスケーリングされないことを意味し、"Nag_ScaleRes"はスケーリングされることを意味します。
出力結果
(本関数の詳細はnag_complex_bessel_y のマニュアルページを参照)| この出力例をダウンロード |
nag_complex_bessel_y (s17dcc) Example Program Results Calling with n = 2 fnu z scal cy[0] cy[1] nz 0.0000 ( 0.300, 0.400) Nag_UnscaleRes ( -0.498, 0.670) ( -1.015, 0.949) 0 2.3000 ( 2.000, 0.000) Nag_UnscaleRes ( -0.740, 0.000) ( -1.412, 0.000) 0 2.1200 ( -1.000, 0.000) Nag_UnscaleRes ( -1.728, 0.860) ( 6.533, -2.615) 0 1.5800 ( -2.300, 5.600) Nag_UnscaleRes ( 36.476, -1.552) ( -2.679, 25.911) 0 1.5800 ( -2.300, 5.600) Nag_ScaleRes ( 0.135, -0.006) ( -0.010, 0.096) 0
- 3〜8行目にベッセル関数の関数列の最初の関数の次数、引数zの値、スケーリングオプション、複素数のベッセル関数の値、アンダーフローによりゼロにセットされたベッセル関数の値の数が出力されています。
ソースコード
(本関数の詳細はnag_complex_bessel_y のマニュアルページを参照)
※本サンプルソースコードはnAG数値計算ライブラリ(Windows, Linux, MAC等に対応)の関数を呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
/* nag_complex_bessel_y (s17dcc) Example Program.
*
* CLL6I261D/CLL6I261DL Version.
*
* Copyright 2017 Numerical Algorithms Group.
*
* Mark 26.1, 2017.
*/
#include <nag.h>
#include <stdio.h>
#include <nag_stdlib.h>
#include <nags.h>
int main(void)
{
Integer exit_status = 0;
Complex z, cy[2];
double fnu;
const Integer n = 2;
Integer nz;
Nag_ScaleResType scal;
char nag_enum_arg[40];
NagError fail;
INIT_FAIL(fail);
/* Skip heading in data file */
scanf("%*[^\n]");
printf("nag_complex_bessel_y (s17dcc) Example Program Results\n");
printf("Calling with n = %ld\n", n);
printf(" fnu z scal cy[0] "
" cy[1] nz\n");
while (scanf(" %lf (%lf,%lf) %39s%*[^\n] ", &fnu, &z.re, &z.im,
nag_enum_arg) != EOF) {
/* Convert scal character to enum */
scal = (Nag_ScaleResType) nag_enum_name_to_value(nag_enum_arg);
/* nag_complex_bessel_y (s17dcc).
* Bessel functions Y_(nu+a)(z), real a >= 0, complex z,
* nu = 0,1,2, ...
*/
nag_complex_bessel_y(fnu, z, n, scal, cy, &nz, &fail);
if (fail.code != NE_NOERROR) {
printf("Error from nag_complex_bessel_y (s17dcc).\n%s\n", fail.message);
exit_status = 1;
goto END;
}
printf("%7.4f (%7.3f,%7.3f) %-14s (%7.3f,%7.3f) (%7.3f,%7.3f) "
"%ld\n", fnu, z.re, z.im, nag_enum_arg, cy[0].re,
cy[0].im, cy[1].re, cy[1].im, nz);
}
END:
return exit_status;
}
