チェビシェフ級数形式の2変数多項式の評価

C言語によるサンプルソースコード : 使用関数名:nag_2d_cheb_eval (e02cbc)

ホーム > 製品 > nAG数値計算ライブラリ > サンプルソースコード集 > チェビシェフ級数形式の2変数多項式の評価 (C言語/C++)

Keyword: チェビシェフ級数, 2変数多項式

概要

本サンプルはチェビシェフ級数形式の2変数多項式を求めるC言語によるサンプルプログラムです。 本サンプルは以下に示されるデータを含む引数を読み込み、チェビシェフ級数形式の2変数多項式を計算し出力します。

2変数多項式のデータ 

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

入力データ

(本関数の詳細はnag_2d_cheb_eval のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

このデータをダウンロード
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 のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

この出力例をダウンロード
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等に対応)の関数を呼び出します。
サンプルのコンパイル及び実行方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

このソースコードをダウンロード
/* 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;
}


関連情報
© 譌・譛ャ繝九Η繝シ繝。繝ェ繧ォ繝ォ繧「繝ォ繧エ繝ェ繧コ繝�繧コ繧ー繝ォ繝シ繝玲�ェ蠑丈シ夂、セ 2024
Privacy Policy  /  Trademarks