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

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

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

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

概要

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

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;
}


Results matter. Trust NAG.

Privacy Policy | Trademarks