Keyword: チェビシェフ級数, 2変数多項式
概要
本サンプルはチェビシェフ級数形式の2変数多項式を求めるC言語によるサンプルプログラムです。 本サンプルは以下に示されるデータを含む引数を読み込み、チェビシェフ級数形式の2変数多項式を計算し出力します。
※本サンプルはnAG Cライブラリに含まれる関数 nag_2d_cheb_eval() のExampleコードです。本サンプル及び関数の詳細情報は nag_2d_cheb_eval のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はnag_2d_cheb_eval のマニュアルページを参照)| このデータをダウンロード |
nag_2d_cheb_eval (e02cbc) Example Program Data 3 3 2 15.34820 5.15073 0.10140 1.14719 0.14419 -0.10464 0.04901 -0.00314 -0.00699 0.00153 -0.00033 -0.00022 0.0 4.0 1.0 9 0.1 4.5 0.5 4.5 1.5 8 0.225 4.25 0.5 4.0 2.0 8 0.4 4.0 0.5 4.0
- 1行目はタイトル行で読み飛ばされます。
- 2行目に多項式の計算回数(n)、変数xの次元(k)、変数yの次元(l)を指定しています。
- 3〜14行目に多項式のチェビシェフ係数(a)を指定しています。
- 15行目に変数yの下限(ymin)と上限'ymax)を指定しています。
- 16〜18行目にy座標、等間隔点の数(m)、変数xの下限(xmin)、上限(xmax)、多項式を計算する区間の下限(x1)、上限(xm)を指定しています。
出力結果
(本関数の詳細はnag_2d_cheb_eval のマニュアルページを参照)| この出力例をダウンロード |
nag_2d_cheb_eval (e02cbc) Example Program Results y = 1.0000e+00 i x(i) Poly(x(i),y) 0 5.0000e-01 2.0812e+00 1 1.0000e+00 2.1888e+00 2 1.5000e+00 2.3018e+00 3 2.0000e+00 2.4204e+00 4 2.5000e+00 2.5450e+00 5 3.0000e+00 2.6758e+00 6 3.5000e+00 2.8131e+00 7 4.0000e+00 2.9572e+00 8 4.5000e+00 3.1084e+00 y = 1.5000e+00 i x(i) Poly(x(i),y) 0 5.0000e-01 2.6211e+00 1 1.0000e+00 2.7553e+00 2 1.5000e+00 2.8963e+00 3 2.0000e+00 3.0444e+00 4 2.5000e+00 3.2002e+00 5 3.0000e+00 3.3639e+00 6 3.5000e+00 3.5359e+00 7 4.0000e+00 3.7166e+00 y = 2.0000e+00 i x(i) Poly(x(i),y) 0 5.0000e-01 3.1700e+00 1 1.0000e+00 3.3315e+00 2 1.5000e+00 3.5015e+00 3 2.0000e+00 3.6806e+00 4 2.5000e+00 3.8692e+00 5 3.0000e+00 4.0678e+00 6 3.5000e+00 4.2769e+00 7 4.0000e+00 4.4971e+00
- 3行目にy座標の値が出力されています。
- 5〜14行目にインデックス、xの値、多項式の値が出力されています。
- 16行目にy座標の値が出力されています。
- 18〜26行目にインデックス、xの値、多項式の値が出力されています。
- 28行目にy座標の値が出力されています。
- 30〜38行目にインデックス、xの値、多項式の値が出力されています。
ソースコード
(本関数の詳細はnag_2d_cheb_eval のマニュアルページを参照)
※本サンプルソースコードはnAG数値計算ライブラリ(Windows, Linux, MAC等に対応)の関数を呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
/* nag_2d_cheb_eval (e02cbc) Example Program.
*
* CLL6I261D/CLL6I261DL Version.
*
* Copyright 2017 Numerical Algorithms Group.
*
* Mark 26.1, 2017.
*/
#include <stdio.h>
#include <nag.h>
#include <nag_stdlib.h>
#include <nage02.h>
int main(void)
{
/* Scalars */
double x1, xm, xmax, xmin, y, ymax, ymin;
Integer exit_status, i, j, k, l, m, n, ncoef, one;
NagError fail;
/* Arrays */
double *a = 0, *ff = 0, *x = 0;
INIT_FAIL(fail);
exit_status = 0;
printf("nag_2d_cheb_eval (e02cbc) Example Program Results\n");
/* Skip heading in data file */
scanf("%*[^\n] ");
while (scanf("%ld%ld%ld%*[^\n] ", &n, &k, &l)
!= EOF)
{
/* Allocate array a */
ncoef = (k + 1) * (l + 1);
if (!(a = nAG_ALLOC(ncoef, double)))
{
printf("Allocation failure\n");
exit_status = -1;
goto END;
}
for (i = 0; i < ncoef; ++i)
scanf("%lf", &a[i]);
scanf("%*[^\n] ");
scanf("%lf%lf%*[^\n] ", &ymin, &ymax);
for (i = 0; i < n; ++i) {
scanf("%lf%ld%lf%lf%lf%lf%*[^\n] ",
&y, &m, &xmin, &xmax, &x1, &xm);
/* Allocate arrays x and ff */
if (!(x = nAG_ALLOC(m, double)) || !(ff = nAG_ALLOC(m, double)))
{
printf("Allocation failure\n");
exit_status = -1;
goto END;
}
for (j = 0; j < m; ++j)
x[j] = x1 + (xm - x1) * (double) j / (double) (m - 1);
one = 1;
/* nag_2d_cheb_eval (e02cbc).
* Evaluation of fitted polynomial in two variables
*/
nag_2d_cheb_eval(one, m, k, l, x, xmin, xmax, y, ymin, ymax,
ff, a, &fail);
if (fail.code != NE_NOERROR) {
printf("Error from nag_2d_cheb_eval (e02cbc).\n%s\n", fail.message);
exit_status = 1;
goto END;
}
printf("\n");
printf("y = %13.4e\n", y);
printf("\n");
printf(" i x(i) Poly(x(i),y)\n");
for (j = 0; j < m; ++j)
printf("%3ld%13.4e%13.4e\n", j, x[j], ff[j]);
nAG_FREE(ff);
nAG_FREE(x);
}
nAG_FREE(a);
}
END:
nAG_FREE(a);
nAG_FREE(ff);
nAG_FREE(x);
return exit_status;
}
