多項式補間のチェビシェフ級数表現

Fortranによるサンプルソースコード : 使用ルーチン名:e01aef

Keyword: 多項式補間, チェビシェフ

概要

本サンプルは多項式補間のチェビシェフ級数表現の構築を行うFortranによるサンプルプログラムです。 本サンプルは以下に示されるデータについて補間を構築しチェビシェフ級数表現の係数を出力します。

多項式補間のデータ 

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

入力データ

(本ルーチンの詳細はe01aef のマニュアルページを参照)
1
2
3
4
5
6
7
8

このデータをダウンロード
E01AEF Example Program Data
    4      2.0      6.0                               : M, XMIN, XMAX
    0        1        0        2                      : IP(1:M)
    2.0    4.0    5.0    6.0                          : X(1:M)
    1.0
    2.0   -1.0
    1.0
    2.0    4.0    -2.0                                : Y(1:N)

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に独立変数の数(m)、xの下限(xmin)、xの上限(xmax)を指定しています。
  • 3~6行目に最高階導関数の階数(ip)、xの値、yの値を指定しています。

出力結果

(本ルーチンの詳細はe01aef のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

この出力例をダウンロード
 E01AEF Example Program Results

 Total number of interpolating conditions =   7

 Interpolating polynomial

    I    Chebyshev Coefficient A(I+1)
    0               9.125
    1              -4.578
    2               0.461
    3               2.852
    4              -2.812
    5               2.227
    6              -0.711

   X    R   Rth derivative    Residual
  2.0   0         1.0         0.000000
  4.0   0         2.0         0.000000
        1        -1.0         0.000000
  5.0   0         1.0         0.000000
  6.0   0         2.0         0.000000
        1         4.0         0.000000
        2        -2.0         0.000000

  • 3行目に補間条件の合計数が出力されています。
  • 7~14行目にチェビシェフ係数が出力されています。
  • 16~23行目にxの値、導関数の階数、導関数と残差が出力されています。

ソースコード

(本ルーチンの詳細はe01aef のマニュアルページを参照)

※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法

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
98
99
100
101

このソースコードをダウンロード
    PROGRAM e01aefe

!      E01AEF Example Program Text

!      Mark 23 Release. nAG Copyright 2011.

!      .. Use Statements ..
       USE nag_library, ONLY : e01aef, f16dnf, nag_wp
!      .. Implicit None Statement ..
       IMPLICIT NONE
!      .. Parameters ..
       INTEGER, PARAMETER              :: nin = 5, nout = 6
!      .. Local Scalars ..
       REAL (KIND=nag_wp)              :: xmax, xmin
       INTEGER                         :: i, ifail, ip1, ipmax, ires, itmax,   &
                                          itmin, iy, j, k, liwrk, lwrk, m, n
!      .. Local Arrays ..
       REAL (KIND=nag_wp), ALLOCATABLE :: a(:), wrk(:), x(:), y(:)
       INTEGER, ALLOCATABLE            :: ip(:), iwrk(:)
!      .. Intrinsic Functions ..
       INTRINSIC                          sum
!      .. Executable Statements ..
       WRITE (nout,*) 'E01AEF Example Program Results'

!      Skip heading in data file
       READ (nin,*)

       itmin = -1
       itmax = -1

       READ (nin,*) m, xmin, xmax
       liwrk = 2*(m+1)
       ALLOCATE (ip(m),x(m),iwrk(liwrk))

       READ (nin,*) (ip(i),i=1,m)
       READ (nin,*) (x(i),i=1,m)

       n = m + sum(ip(1:m))

!      Get the maximum value of IP

       CALL f16dnf(m,ip,1,k,ipmax)

       lwrk = 7*n + 5*ipmax + m + 7
       ALLOCATE (a(n),y(n),wrk(lwrk))

       j = 0

       DO i = 1, m
          READ (nin,*) (y(k),k=j+1,j+ip(i)+1)
          j = j + ip(i) + 1
       END DO

       ifail = -1
       CALL e01aef(m,xmin,xmax,x,y,ip,n,itmin,itmax,a,wrk,lwrk,iwrk,liwrk, &
          ifail)

       WRITE (nout,*)

       SELECT CASE (ifail)
       CASE (0,4:)
          WRITE (nout,99999) 'Total number of interpolating conditions =', n
          WRITE (nout,*)
          WRITE (nout,*) 'Interpolating polynomial'
          WRITE (nout,*)
          WRITE (nout,*) '   I    Chebyshev Coefficient A(I+1)'

          DO i = 1, n
             WRITE (nout,99998) i - 1, a(i)
          END DO

          WRITE (nout,*)
          WRITE (nout,*) '  X    R   Rth derivative    Residual'

          iy = 0
          ires = ipmax + 1

          DO i = 1, m
             ip1 = ip(i) + 1

             DO j = 1, ip1
                iy = iy + 1
                ires = ires + 1

                IF (j-1/=0) THEN
                   WRITE (nout,99997) j - 1, y(iy), wrk(ires)
                ELSE
                   WRITE (nout,99996) x(i), '   0', y(iy), wrk(ires)
                END IF

             END DO

          END DO

       END SELECT

99999  FORMAT (1X,A,I4)
99998  FORMAT (1X,I4,F20.3)
99997  FORMAT (5X,I4,F12.1,F17.6)
99996  FORMAT (1X,F4.1,A,F12.1,F17.6)
    END PROGRAM e01aefe


関連情報
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks