imsl ライブラリ 利用者向け講習会 - my.fit.ac.jp · • imsl cライブラリv6.0 –...

296
IMSL ライブラリ 利用者向け講習会 20071019寺内 和也 [email protected] 須賀 恵美子 [email protected] 日本ビジュアルニューメリックス㈱ 福岡工業大学

Upload: lydiep

Post on 02-Jul-2018

255 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL ライブラリ

利用者向け講習会

2007年 10月19日寺内 和也 [email protected]須賀 恵美子 [email protected]

日本ビジュアルニューメリックス㈱

福岡工業大学

Page 2: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

2

www.vnij.com

目 次

• ビジュアルニューメリックス社概要• IMSL ライブラリの概要

• IMSL Fortranライブラリ v5.0– 環境– IMSL Fortranライブラリの仕様

– サポートリソース• Fortran ライブラリの各章概要• IMSL Fortranライブラリの並列処理と性

• IMSL Cライブラリ v6.0– 環境– IMSL Cライブラリの仕様

– サポートリソース• IMSL Cライブラリの各章概要

• 今後のリリース予定 (Fortran v6.0)

• 添付資料

– IMSL Fortranの行列格納方法– IMSL C の行列格納方法

Page 3: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

3

www.vnij.comビジュアルニューメリックス社(VNI)

創立35周年

【沿革】1970年 IMSL, Inc. (Texas, USA) 設立1980年 Precision Visuals, Inc. (Colorado, USA) 設立1991年 日本IMSL株式会社設立1993年 IMSL, Inc. とPrecision Visuals, Inc. の合併により、

Visual Numerics, Inc. 並びに日本ビジュアルニューメリックス株式会社に社名変更

【グローバルネットワーク】米国(テキサス、コロラド)、メキシコ英国、ドイツ、フランス、オランダ、中国、台湾、韓国、日本その他世界60ヶ国に販売代理店

Page 4: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

4

www.vnij.comVNI製品(一覧)65ヵ国50万人のユーザ

数値計算・統計解析ライブラリ

• IMSL Fortran ライブラリ Fortran90対応

• IMSL C ライブラリ C/C++言語対応

• IMSL C# ライブラリ MS C# .NET Framework対応

• JMSL ライブラリ JavaTM

対応

データ解析・可視化ソフトウェア

VDA (Visual Data Analysis)

• PV-WAVEデスクトップVDAアプリケーション構築言語

• JWAVEWebベースのVDAアプリケーション構築言語及び

コンポーネント

• TS-WAVE 時系列解析アプリケーション

Page 5: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL ライブラリの概要(International Mathematical & Statistical Libraries)

Page 6: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

6

www.vnij.com Fortran, C/C++, C#, Java 用の数値計算・統計解析ライブラリ

• 各言語で100%作成されたライブラリ

• 数値計算・特殊関数・統計解析ルーチンを包括

• 信頼性・安定性の高いアルゴリズム

• 新の高度なアルゴリズムの採用

• 使いやすい関数名・ドキュメント

• 35年、世界65ヵ国、50万人のユーザ

• パソコンからスーパーコンピュータまで幅広いプラットフォームに対応

Page 7: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

7

www.vnij.com IMSLライブラリの信頼性の検証

【平均値の計算】

ADATA(500000)

配列 データ

1 0.000001

2 0.000002

3 0.000003

・・・ ・・・

249999 0.249999

250000 0.250000

250001 10000.000000

250002 20000.000000

・・・ ・・・

499999 2499990000.000000

500000 2500000000.000000

BDATA(500000)

配列 データ

1 0.000001

2 2500000000.000000

3 0.000002

4 2499990000.000000

5 0.000003

6 2499980000.000000

・・・ ・・・

499997 0.249999

499998 20000.000000

499999 0.250000

500000 10000.000000

Page 8: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

8

www.vnij.com IMSLライブラリの信頼性の検証

【平均値の計算】

配列番号の1から順に合計し平均値を倍精度で計算

・ADATAの平均値= 62502500.06250024

・BDATAの平均値= 62502500.06254053

【データの合計する順番で結果が異なる】

DO 100 I=1,500000TOTAL = TOTAL + DATA(I)

100 CONTINUEAVERAGE = TOTAL / 500000.

Page 9: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

9

www.vnij.com IMSLライブラリの信頼性の検証

【平均値の計算】

IMSL Fortran ライブラリの UVSTAルーチン で

求めた平均値

・ADATAの平均値= 62502500.06250024・BDATAの平均値= 62502500.06250024

IMSLはどのようなデータでも正しい解を提供

Page 10: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

10

www.vnij.com

IMSL とベンダーライブラリの関係

ユーザアプリケーション

IMSL ライブラリ

数値計算・統計解析の高度な関数

ベンダーライブラリ IMSL ライブラリBLAS 基本的な数値計算関数

ハードウェア

IMSLはハードウェアに特化されたベンダーライブラリ

を利用して高い性能を得ることが出来る。

Page 11: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran ライブラリの概要

Page 12: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

12

www.vnij.com

IMSL Fortranライブラリ概要(1/3)

• リリースの履歴– 1971年 F66版ファーストリリース

– 1987年 F77対応

– 1994年 F90対応

– 1998年 MPIサポート

– 2002年 OpenMPサポート

• ルーチン数 1000以上

• 各ルーチンに単精度版と倍精度版

• Fortran77インターフェースとFortran90インター

フェース

• 完全な上位互換

Page 13: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

13

www.vnij.com

IMSL Fortranライブラリ概要(2/3)

• 全ルーチンにオプション引数

• ルーチン名、マトリックス、変数、パラメータの共通規則

• システム環境変数の使用 (エラーメッセージの参照、コマンドラインの実行、ライセンス管理など)

• モジュールファイルによるコンパイル時の引数チェック

• 単一パッケージ– F77、F90およびパラレルルーチンが単一製品に

Page 14: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

14

www.vnij.com

IMSL Fortran ライブラリ概要(3/3)

• OpenMP並列サポート– 線形方程式、マトリックス演算、固有値解析、

高速フーリエ変換など• MPI並列サポート

– MPI(Message Passing Interface)による並列化

– 線形方程式、固有値解析、高速フーリエ変換など

• BLAS(Basic Linear Algebra Subprograms)– IMSLのBLASとベンダーBLASの切り替え

• ScaLAPACK ユーティリティ

Page 15: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran ライブラリの使い方

Page 16: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

16

www.vnij.com

IMSL Fortranの環境設定

環境設定はUNIX・Linuxの各OSで共通

• C シェルユーザ

Source /usr/local/imsl/imsl.csh• BシェルまたはKシェルユーザ

. /usr/local/imsl/imsl.sh• 環境変数の設定は、対話型よりログイン毎の自動セット

アップを推奨– 下記ファイルに上記のコマンドを追加

• .cshrc (C shell)• .profile (sh, ksh).

IMSL Fortran福岡工業大学

Page 17: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

17

www.vnij.comIMSL Fortranライブラリの

コンパイル・リンク

• コンパイラはPGI Fortran95 v6.1.x に対応

• IMSL Fortranライブラリのコンパイル&リンク$F90 -o <実行モジュール> $F90FLAGS <メインソース> $LINK_F90

• IMSL FortranライブラリのOpenMP並列&ベンダーBLAS使用時のコンパイル&リンク : これを推奨します

$F90 -o <実行モジュール> $F90FLAGS <メインソース> $LINK_F90_SMP(または$LINK_F90_STATIC_SMP)

export OMP_NUM_THREADS=使用CPU数./実行モジュール名

IMSL Fortran福岡工業大学

Page 18: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran ライブラリの環境

Page 19: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

19

www.vnij.com

IMSL Fortranのディレクトリ構成

/usr/local/imsl||- license| |- bin|- CTT6.0| |- bin| |- ctt ※6.0はFortran、Cライブラリ

| I- example 共通バージョン。

| |- help | |- include ※ UNIX、Linuxで共通の構成

| |- lib

IMSL Fortran福岡工業大学

Page 20: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

20

www.vnij.com

IMSL Fortranの環境変数

• $CTT_FORTRAN_COMPILER コンパイラバージョン• $CTT_EXAMPLES 例題のディレクトリ• $CTT_OS_VERSION OSバージョン• $F90 F90コンパイラ• $MPIF90 MPI用F90コンパイラ• $F90FLAGS FORTRANのコンパイルオプション• $LINK_F90_SHARED FORTRANのリンクパス(Sharedリンク)• $LINK_F90_STATIC FORTRANのリンクパス(Staticリンク)• $LINK_F90 FORTRANのリンクパス(デフォルト)• $LINK_MPI IMSLのMPI時のリンクパス• $VNI_LICENSE_NUMBER 製品のライセンス番号

: 等

IMSL Fortran

Page 21: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

21

www.vnij.com IMSL Fortranライブラリ 付属の例題(1/2)

• $CTT_EXAMPLES/f90 ディレクトリ に例題

- eiat ディレクトリ

• Environment and Installation Assurance Tests• 1973題の環境及びインストール保証テスト

– manual ディレクトリ

• 105題のIMSL Fortran ライブラリユーザズガイドの例題

– benchmark ディレクトリ

• ネイティブなIMSL F90ルーチンと、同一機能の元F77ルーチンとの17組の性能比較。

• 詳細はIMSL Fortran日本語マニュアルのAppendix D参照

IMSL Fortran

Page 22: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

22

www.vnij.com

IMSL Fortran 付属の例題 (2/2)

– mpi_manual• 37題のIMSL Fortran ユーザーズガイドのMPIの例題

– mpi_benchmark• IMSL FortranのMPIでの実行と、同一内容のIMSL

Fortranスカラーバージョンでの実行の17組の性能比較

• 詳細はIMSL Fortran日本語マニュアルのAppendix D参

IMSL Fortran

Page 23: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

23

www.vnij.com

IMSLライブラリの動作環境

• パソコンからスーパーコンまで 新のシステムに対応• 随時動作環境表をVNIのホームページに公表

http://www.vni.com/books/dod/pdf/IMSL_scp.pdf

IMSL Fortran,C

Page 24: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran ライブラリv5.0 の仕様

Page 25: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

25

www.vnij.comシェアード ライブラリとスタティックライブラリ

シェアードライブラリ (WindowsではDLL)

– 実行時にシンボルを参照

– アプリケーションのメンテナンスが容易

– 実行モジュールは小さいが、実行時にライブラリが参照可能でなければならない

スタティックライブラリ– リンク時にシンボルを参照

– IMSLライブラリが更新された場合は、全てのアプリケーションを再リンクする必要がある

– 実行時にライブラリを参照する必要はないが、実行モジュールのサイズが大きい

IMSL Fortran

Page 26: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

26

www.vnij.com

F90ルーチンと F77ルーチン

IMSLライブラリはF66→F77→F90へと変化

F77時代との互換性を保ちながら、F90の機能を追加

F77で書かれたルーチンと、F90で書かれたルーチンが混在

F77ルーチンにはF90用インターフェース有り

F90 ルーチンは長いルーチン名

名称の例 F90 : LIN_SOL_GENF77 : LSARG(6文字以下)

IMSL Fortran

Page 27: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

27

www.vnij.com

IMSL Fortranライブラリ 命名規則(1/2)

• F77開発ルーチンの命名規則

<規則1> 6文字以内、倍精度版は頭にDがつく

例: 単精度 LSARG倍精度 DLSARG

<規則2> Ver5.0から、

F77開発ルーチンはより明示的な別名を持つ

例: 単精度 S_LSARG倍精度 D_LSARG

IMSL Fortran

Page 28: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

28

www.vnij.com

IMSL Fortranライブラリ命名規則 (2/2)

F90開発ルーチン

明示的名称、単精度、倍精度共通

例:単精度、倍精度共にlin_sol_gen

その他 一部のルーチンは命名規則に従わない

BLAS や三角関数など、標準名があらかじめある場合

IMSLを使用するFortranプログラムでの変数・ルーチン名の注意事項

IMSLのルーチン名と同一名を使用しない

S_, D_, C_, or Z_で始まる名前を使用しない

5~6文字の変数で、2、3文字目が数字の変数を使用しない

(IMSLの内部ルーチンで多く使用されている)

IMSL Fortran

Page 29: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

29

www.vnij.com IMSL Fortranライブラリ 5.0 のモジュールファイル

• コンパイル時にモジュールファイルを参照、

IMSLのルーチン呼び出し時の引数リストをチェック

→ デバッグの手間・プログラムミスを著しく減少

• モジュールファイル(*.mod)の使用方法

IMSLルーチンを使用しているソースの先頭に下記の文を指定 個々のルーチンの場合 use ルーチン名_int

例 : use neqnf_int 全ルーチン use imsl_libraries F90のオペレータ関数全て use linear_operators

IMSL Fortran

Page 30: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

30

www.vnij.com

IMSL Fortran ライブラリ例題

USE imsl_libraries ! または USE LSLRG_INT! USE WRRRN_INT

PARAMETER (LDA=3, N=3)REAL A(LDA, LDA), B(N), X(N)

DATA A/33.0, -24.0, 18.0, 16.0, -10.0, -11.0, 72.0, -57.0, 7.0/DATA B/129.0, -96.0, 8.5/

CALL LSLRG (A, B, X, 3, 3, 1) ! または CALL S_LSLRG (...

CALL WRRRN ('X', X, 1, N, 1)

END反復改良法によらない実一般線形連立方程式の解User’s Guide Math/Library P.86

IMSL Fortran

Page 31: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

31

www.vnij.com

IMSL Fortranライブラリの引数

• F90インターフェースとF77インターフェース– F77インターフェースは、F77仕様の引数

例 : BCLSJ (FCN, JAC, M, N, XG, IB, XL, XU, XS, FS, IP, RP, X, FV, FJ, LDFJ)

– F90インターフェースは、省略可能な引数を省略

例 : BCLSJ (FCN, JAC, M, IB, XL, XU, X)

• 引数を簡略化しプログラミングエラーを防止

• 省略された引数はデフォルト値がセット

• 省略した引数にデフォルト以外を与える場合は、オプション引数で追加指定が可能

例 : BCLSJ (FCN, JAC, M, IB, XL, XU, X, N=N, XGUESS=XG)

IMSL Fortran

Page 32: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

32

www.vnij.com

マシン定数(1/2)

– 関数IMACH( ) 整数のマシン定数を取得<出力例> AMD Opteron• 整数ビット数 imach( 1 )= 32• 整数バイト数 imach( 2 )= 4• 整数の基数 imach( 3 )= 2• 基数A桁の数 imach( 4 )= 31• 大の整数 imach( 5 )= 2147483647• 浮動少数の基数 imach( 6 )= 2• 単精度の基数Bの桁数 imach( 7 )= 24• 小の単精度指数 imach( 8 )= -125• 大の単精度指数 imach( 9 )= 128• 倍精度の基数Bの桁数 imach( 10 )= 53• 小の倍精度指数 imach( 11 )= -1021• 大の倍精度指数 imach( 12 )= 1024

IMSL Fortran

Page 33: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

33

www.vnij.com

マシン定数(2/2)

– 関数AMACH ( ) 単精度のマシン定数を取得

– 関数DMACH ( ) 倍精度のマシン定数を取得

<出力例> AMD Opteron 小の正規化された正の数 amach( 1 )= 1.175494351E-38 大の数 amach( 2 )= 3.402823466E+38 小の相対間隔 amach( 3 )= 5.960464478E-8 大の相対間隔 amach( 4 )= 1.192092896E-7 log10(B) amach( 5 )= 0.30103001 NaN amach( 6 )= NaN 正のマシン無限大値 amach( 7 )= Infinity 負のマシン無限大値 amach( 8 )= -Infinity

Page 34: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

34

www.vnij.comレベル2ルーチンによるワークスペースの明示的指定

<例:LQRRVの内部ルーチンの説明>

下線部分はLQRRVと同じComments

Workspace may be explicitly provided, if desired, by use of L2RRV/DL2RRV. The reference is:CALL L2RRV (NRA, NCA, NUMEXC, A, LDA, X, LDX, FACT, LDFACT, WK) ← 内部ルーチン形式

The additional arguments are as follows: ← 追加の引数の説明

FACT — LDFACT ´ (NCA + NUMEXC) work array containing the Householder factorization of the matrix on output. If the input data is not needed, A and FACT can share the same storage locations.

LDFACT — Leading dimension of the array FACT exactly as specified in the dimension statement of the calling program. (Input)

f A and FACT are sharing the same storage, then LDA = LDFACT is required.WK — Work vector of length (NCA + NUMEXC + 1) * (NB + 1) . The default value is NB ← ワークサイズ計算方法

F77ルーチンは、内部ルーチンを呼び出して、ワークスペースの指定が可能。

通常、ワークスペースは自動で作成される。ワークスペースのユーザーが指定には、次のメリットが考えられる。

メモリの有効利用実行時間の短縮

Page 35: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

35

www.vnij.com IMSL Fortran ライブラリ

エラーハンドリング

• 7種類のエラータイプ

• 各エラータイプごとにエラー後の処理のデフォルトを持つ

WARNINGと同じ。メッセー

ジ出力のタイミングが即時継続印字Global-

Warning6

根本的なエラー終了印字Terminal5

Fatalと同じ。メッセージ出力

のタイミングが即時終了印字Global-

Fatal7

プログラムを修正終了印字Fatal4

条件によってはプログラムを修正

継続印字Warning3アンダーフローの発生継続無Alert2エラーの可能性継続無Note1エラーの内容プログラムの終了メッセージの印字エラーレベルレベル番号

IMSL Fortran

Page 36: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

36

www.vnij.comIMSL Fortranライブラリ

エラー処理の変更

エラー処理設定ルーチン ERSETCALL ERSET(IERSVR,IPACT,ISACT)

IERSVR エラー処理を変更するエラータイプ

(0の時は全タイプ)

IPACT エラーメッセージの出力の有無

-1:変更なし 0:出力無し 1:出力有り 2:規定値に戻す

ISACT プログラムを終了の有無

-1:変更なし 0:終了しない 1:終了する 2:規定値に戻す

例:

CALL ERSET(4, 0, 0)Fatalエラー発生時の処理は、エラーメッセージの出力なし、

プログラムの実行は継続

IMSL Fortran

Page 37: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

37

www.vnij.comIMSL Fortranライブラリ

エラー情報の取得(1/2)

エラーコード取得関数 IERCD( )IERCD() = 0 正常終了

IERCD() ≠ 0 WARNING以上のエラーの時、

エラーコードが返される

例:WARNINGエラー以上の場合、

独自のエラー処理を行う

CALL IMSLルーチン

IF (IERCD( ) .NE. 0) THENエラー処理

ENDIF

IMSL Fortran

Page 38: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

38

www.vnij.comIMSL Fortranライブラリ

エラー情報の取得(2/2)

エラータイプの取得関数 N1RTY(1)

N1RTY( 1) = 0 正常終了

N1RTY( 1 ) = 1~5 エラータイプの番号

例:

CALL IMSLルーチン

IF (N1RTY( 1) .EQ. 3) THENWarningの時のエラー処理

ENDIF

IMSL Fortran

Page 39: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

39

www.vnij.comIMSL Fortranライブラリ

エラーメッセージファイル

$CTT_DIR/bin/$LIB_ARCH ディレクトリ

<ファイル一覧>

• messages.daf エラーメッセージファイル

• messages.gls テキスト版エラーメッセージファイル

• prepmess messages.glsからmessages.daf への変換プログラム

• prepmess.f 変換プログラムprepmessのソース

エラーメッセージの内容の変更が可能。

テキスト版メッセージファイルを書き換え →

prepmessプログラムでエラーメッセージファイルに変換

IMSL Fortran

message_number=081 ←エラーメッセージ番号

message='s_/lin_eig_self/ The data array ''a'' has size %(i1) '// &'by %(i2) but the problem dimension is %(i3).'

↑エラーメッセージ内容message_number=82message='s_/lin_eig_self/ The eigenvalue array ''diagonal'' has size %(i1)

'// &'but the problem dimension is %(i2).'

<message.gls内容>

Page 40: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

40

www.vnij.com

アンダーフローとオーバーフロー

アンダーフロー• IMSLライブラリはアンダーフローによって計算が影響されないように作成さ

れている

• システムはレジスタを0にする

• エラーはIMSL_ALERTレベル

オーバーフロー• IMSL のコードはオーバーフローを回避するように作成されている

• 発生時はプログラムミスのチェックが必要

• エラーはIMSL_FATALレベル

• エラーコード例:

IMSL_LARGE_ARG_OVERFLOWIMSL_ZERO_ARG_OVERFLOWIMSL_SMALL_ARG_OVERFLOW 等

IMSL Fortran,C

Page 41: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

41

www.vnij.com

欠測値

• IMSL Fortran ライブラリと C ライブラリは欠測値の取り扱いが可能

• 欠測値は “Not a Number” または NaN として特別な

値として取り扱う

• 実際の欠測値の値は、機種により異なる

– 次のサブルーチン・関数で参照可能• IMSL Fortran ライブラリ:AMACH または DMACH• IMSL C ライブラリ : imsl_f_machine

IMSL Fortran,C

Page 42: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

42

www.vnij.com

IMSL Fortran 行列格納モード

• 一般モード 正方 n x n 行列

• 矩形モード m x n 行列

• 対称モード AT = Aのような正方 n x n 行列

• エルミートモード AH = ATのような正方 n x n 行列

• 帯格納モード 非ゼロ要素が主対角項に近い m x n 行列

• 疎行列対応座標格納モード 疎行列の非ゼロ要素の座標と値

IMSL Fortran

Page 43: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL サポートリソース

Page 44: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

44

www.vnij.com

IMSLサポートリソース

• ハードコピードキュメント

• オンラインドキュメント

• その他ドキュメントリソース

IMSL Fortran,C

Page 45: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

45

www.vnij.com

Fortranライブラリのマニュアル

– 英語版 『IMSL Fortran Library 5.0 Function Catalog』関数一覧

『IMSL Fortran Library Version 5.0 MATH/LIBRARY User’s Guide』2冊

『IMSL Fortran Library User’s Guide MATH/LIBRARY Special Function』1冊

『IMSL Fortran Library Version 5.0 STAT/LIBRARY User’s Guide』2冊

– 日本語版 『IMSL Fortran ライブラリ5.0 関数カタログ』 関数一覧

『Fortran77、IMSLライブラリ V3.0日本語マニュアル』

F77ルーチンの各章の概要

『IMSL FORTRAN90MP ILBRARY V4.0日本語マニュアル 』

F90ルーチンの詳細説明

IMSL Fortran

Page 46: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

46

www.vnij.com

IMSL ライブラリのマニュアルについて

• IMSLライブラリのドキュメントは3つのセクショ

ンからなっている。ただしライブラリそのものは一つである。– 数値計算 Mathematics– 特殊関数 Special Functions– 統計解析 Statistics

• いくつかのオーバーラップはあるが、各章はそれぞれ機能別に構成されている。

Page 47: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

47

www.vnij.com

Fortranライブラリのマニュアルの形式

• 各章の構成– 各章の先頭にその章全体の説明と注意事項

– 1ルーチン毎に引数、オプション引数、注意事項、エラーメッセージ等の記述

– 全てのルーチンに1つ以上のプログラム例

• 巻末・参考資料

エラーハンドリング・自動ワークスペースアロケーション・マシン定数・

配列モード・予約名

– Appendix A : GAMS Index– Appendix B : Alphabetical Summary of Routines– Appendix C : References

IMSL Fortran

Page 48: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

48

www.vnij.com

正しいルーチンの見つけ方

• 関数カタログを参照

• 各章のイントロダクションを参照

• 巻末のルーチン名アルファベット順インデックスで検索

• 巻末のGAMS(Guide to Available Mathematical Software, National Institute of Standards and Technology)

インデックスで検索

• ドキュメントの各ルーチン毎にある例題を参照

IMSL Fortran

Page 49: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

49

www.vnij.com

その他サポートリソース

• オンラインドキュメント(PDF・英語マニュアルと同じ)

http://www.vnij.com/products/imsl/documentation/index.html• TIPS データベース

http://www.vni.com/tech/imsl/tips.html• ホワイトペーパー

http://www.vni.com/company/whitepapers• Cross-language Technical Report (Calling Fortran from C,

Report # 8902)http://www.vni.com/tech/imsl/tn.html

• VNI Forumhttp://forums.vni.com/

IMSL Fortran,C

Page 50: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

50

www.vnij.com

サポート連絡先

下記お問い合わせフォームよりご連絡下さい。

http://www.vnij.com/forms/tech_sprt_request.html

緊急時はメール・電話・FAXでのお問い合わせも承ります。

日本ビジュアルニューメリックス㈱

• サポート時間 土日、祭日を除く 10:00 ~ 17:00• Phone Number (03)5211-7760• Fax Number (03)5211-7769• E-mail support@vnij.co.jp

Page 51: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran ライブラリ

各章概要

Page 52: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

52

www.vnij.com IMSL Fortran 数値計算Mathematics

1章: 線形システム

2章: 固有システム解析

3章: 補間と近似

4章: 積分と微分

5章: 微分方程式

6章: 変換

7章: 非線形方程式

8章: 適化

9章: 基本的な行列とベクトル演算

10章: 線形演算子とジェネリック関数

11章:ユーティリティ

IMSL Fortran

Page 53: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

53

www.vnij.com IMSL Fortran 特殊関数Special Functions

1章: 初等関数

2章: 三角関数と双曲線関数

3章: 指数積分と関連する関数

4章: ガンマ関数と関連する関数

5章: 誤差関数と関連する関数

6章: ベッセル関数

7章: ケルビン関数

8章: エアリ関数

9章: 楕円積分

10章: 楕円関数と関連する関数

11章: 確率分布関数と逆関数

12章: マシュウ関数

13章: その他の関数

IMSL Fortran

Page 54: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

54

www.vnij.com IMSL Fortran 統計解析Statistics

1章: 基本統計

2章: 回帰

3章: 相関

4章: 分散分析

5章: カテゴリデータと離散データの解析

6章: ノンパラメトリック統計

7章: 適合度とランダム度の検定

8章: 時系列解析と予測

9章: 共分散構造と因子分析

10章: 判別分析

11章: クラスタ分析12章: 標本分析13章: 生存解析14章: 多次元尺度法15章: 密度関数とハザードの

推定16章: ラインプリンター作図17章: 確率分布関数と逆関数18章: 乱数生成19章: ユーティリティ20章: 数学的サポート

IMSL Fortran

Page 55: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran 各章概要

数値計算Mathematics

IMSL Fortran

Page 56: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

56

www.vnij.comCh. 1 線形システム

Linear Systems

1. 線形方程式の解法 LIN_SOL_– 一般行列, 自己随伴行列、三重対角行列の解法 Ax=b– 小2乗法、特異値分解で解く Ax @b

2. MPI並列処理でAx @bを 小2乗法で解く PARALLEL_– Ax @b, xの拘束(x ≧ 0 あるいは α≦x≦β)

3. 連立方程式の解、逆行列、行列式の計算など– 様々なタイプの係数行列をカバー

– 実・複素、正定値、対称、Hermite、帯・三角、Toeplitz、循環、一般・疎など

– 反復解法 ルーチン

PCG, GMRES(Generalized Minimal Residual Method)4. 線形 小2乗法と行列の因子分解

– 小2乗法、QR分解

– Cholesky分解

– 特異値分解 (SVD)– Moore-Penroseの一般逆行列の計算 A† = V1Σ1

-1U1T

IMSL Fortran Math

Page 57: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

57

www.vnij.comCh. 1 線形システム

Linear Systems

行列の種類と命名

複素 Hermite 正定値疎行列.ZD実対称正定値疎行列.XD複素一般疎行列.ZG実一般疎行列.XG複素 Hermite 正定値帯行列.QH or QB実対称正定値帯行列.QS or PB複素正方形行列の上半分に格納された複素 Hermite 行列.HF

複素正方形行列の上半分に格納された複素 Hermite 正定値行列.DH正方行列の上半分に格納された実対称正定値行列.DS正方行列の上半分に格納された実対称行列.SF複素帯行列.CB複素三重対角行列.TQ or CQ実帯行列.RB実三重対角行列.TR or CR複素一般(正方)行列.CG実一般(正方)行列.RG

IMSL Fortran Math

Page 58: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

58

www.vnij.comCh. 1 線形システム

Linear Systems

線型方程式の解法と因子分解

IMSL Fortran Math

A

bLFT** LFC**

LFD**LFI**LFS**

LIN** LSA**LSL**

Conditionnumber

Factorization

DeterminantA-1 x = A bor

x = A b

-1

-T

LSL** : LFC**でLU分解を行い、LFS**で答えを得る。上三角行列Uの対角要素が0になるような特異行列では解を得られない。Aが悪条件あるいはスケールが悪くて条件数が1/εより大きくなる場合は、警告メッセージを出す。この場合はLSA**またはLSV**を利用すると良い。

LSA** : LFC**によるLU分解を行い、LFI**で解の反復改

良を行い精度の高い答えを得る。

LFI** : LU分解された係数行列を用い、LFS**を使い、反

復改良で精度を高める。

LSV** : 特異値分解を行う。

LFC** : LU分解を行ない、また条件数L1を推定する。LU分解は scaled partial pivoting による。 LFT**はLU分解

のみのルーチン。

LFD**:LU分解された行列から、行列式を計算する。det A = det L det U , det U = ΠUii, det L = (-1)k (kはpivot交換の回数)

LIN**: LU分解された行列から、逆行列を計算する。A-1 = U-1L-1

Page 59: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

59

www.vnij.comCh. 1 線形システム

Linear Systems

Iterative Refinement : 反復改良による高精度の解法 (LFI**)

IMSL Fortran Math

x0 = A-1bFor i = 1, 50

ri = Axi-1 - b computed in higher precisionpi = A-1 rixi = xi-1 - piif (|| pi ||∞ ≦ ε|| xi ||∞) Exit

End for Error — Matrix is too ill-conditioned

ri の計算はAが単精度なら倍精度で、倍精度の場合は4倍精度で行う。 (4倍精度計算用の関数はCh.9)

Page 60: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

60

www.vnij.comCh. 1 線形システム

Linear Systems

例:連立1次方程式の解法 (p.12)

LIN_SOL_GEN :

Ax = b をLU分解で解く:1) LU = A2) y = L-1b, x = U-1y

その他:AのLU分解、行列式の値、逆行列、LU分解されたAによるAx=bおよびATx=bの解

use lin_sol_gen_intuse rand_gen_intuse error_option_packet

implicit none

! This is Example 1 for LIN_SOL_GEN.

integer, parameter :: n=32 real(kind(1e0)), parameter :: one=1e0 real(kind(1e0)) err real(kind(1e0)) A(n,n), b(n,n), x(n,n), res(n,n), y(n**2)

! Generate a random matrix. call rand_gen(y) A = reshape(y,(/n,n/))

! Generate random right-hand sides. call rand_gen(y) b = reshape(y,(/n,n/))

! Compute the solution matrix of Ax=b. call lin_sol_gen(A, b, x)

! Check the results for small residuals. res = b - matmul(A,x) err = maxval(abs(res))/sum(abs(A)+abs(b)) if (err <= sqrt(epsilon(one))) then

write (*,*) 'Example 1 for LIN_SOL_GEN is correct.' end if end

OutputExample 1 for LIN_SOL_GEN is correct.

IMSL Fortran Math

Page 61: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

61

www.vnij.comCh. 1 線形システム

Linear Systems

例:PCGで実対称定値連立式Ax = 1 を解く (p.363)

USE IMSL_LIBRARIESINTEGER LDA, LDPRE, N, NCODA, NCOPREPARAMETER (N=9, NCODA=3, NCOPRE=1, LDA=2*NCODA+1,&

LDPRE=NCOPRE+1)!

INTEGER IDO, ITMAXREAL A(LDA,N), P(N), PRECND(LDPRE,N), PREFAC(LDPRE,N),&

R(N), RCOND, RELERR, X(N), Z(N)! Set A in band form

DATA A/3*0.0, 4.0, -1.0, 0.0, -1.0, 2*0.0, -1.0, 4.0, -1.0, 0.0,& etc.! Set PRECND in band symmetric form

DATA PRECND/0.0, 4.0, -1.0, 4.0, -1.0, 4.0, -1.0, 4.0, -1.0, 4.0,& etc.! Right side is (1, ..., 1)

R = 1.0E0! Initial guess for X is 0

X = 0.0E0! Factor the preconditioning matrix

CALL LFCQS (PRECND, NCOPRE, PREFAC, RCOND)!

ITMAX = 100RELERR = 1.0E-4IDO = 0

10 CALL PCGRC (IDO, X, P, R, Z, RELERR=RELERR, ITMAX=ITMAX)IF (IDO .EQ. 1) THEN

! Set z = ApCALL MURBV (A, NCODA, NCODA, P, Z)GO TO 10

ELSE IF (IDO .EQ. 2) THEN! Solve PRECND*z = r

CALL LSLQS (PREFAC, NCOPRE, R, Z)GO TO 10

END IF! Print the solution

CALL WRRRN (’Solution’, X)!

END

4 1 0 11 4 1 0 1

0 1 4 1 0 11 0 1 4 1 0 1

1 0 1 4 1 0 11 0 1 4 1 0 1

1 0 1 4 1 01 0 1 4 1

1 0 1 4

A

- -é ùê ú- - -ê úê ú- - -ê ú- - - -ê úê ú= - - - -ê ú

- - - -ê úê ú- - -ê ú

- - -ê úê ú- -ê úë û

4 11 4 1

1 4 11 4 1

1 4 11 4 1

1 4 11 4 1

1 4

M

-é ùê ú- -ê úê ú- -ê ú- -ê úê ú= - -ê ú

- -ê úê ú- -ê ú

- -ê úê ú-ê úë û

Mは前処理用行列

IMSL Fortran Math

Page 62: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

62

www.vnij.com

Ch. 1 線形システム Linear Systems

例:GMRES法で疎行列Ax = b を解く。前処理行列はJacobi(Aの対角) (p.373)G2RESはGMRESの2ndレベルルーチン。解法やワーク

サイズを指定できる。

USE IMSL_LIBRARIESINTEGER N, NZPARAMETER (N=6, NZ=15)

! Specifications for local variablesINTEGER IDO, INFO(10), NOUTREAL P(N), TOL, WORK(1000), X(N), Z(N)REAL DIAGIN(N), R(N)EXTERNAL AMULTP

EXTERNAL G8RES, G9RES!

DATA DIAGIN/0.1, 0.1, 0.0666667, 0.1, 1.0, 0.16666667/DATA R/10.0, 7.0, 45.0, 33.0, -34.0, 31.0/

!CALL UMACH (2, NOUT)

! Initial guess = (1 ... 1)X = 1.0E0

! Set up the options vector INFO! to use preconditioning

INFO = 0INFO(4) = 1

! Set stopping tolerance to! square root of machine epsilon

TOL = AMACH(4)TOL = SQRT(TOL)IDO = 0

10 CONTINUECALL G2RES (IDO, N, X, P, R, Z, TOL, INFO, G8RES, G9RES, WORK)IF (IDO .EQ. 1) THEN

! Set z = A*pCALL AMULTP (P, Z)GO TO 10

ELSE IF (IDO .EQ. 2) THEN! Set z = inv(M)*p! The diagonal of inv(M) is stored! in DIAGIN

CALL SHPROD (N, DIAGIN, 1, P, 1, Z, 1)GO TO 10

ELSE IF (IDO .EQ. 3) THEN! Set z = A*inv(M)*p

CALL SHPROD (N, DIAGIN, 1, P, 1, Z, 1)P = ZCALL AMULTP (P, Z) GO TO 10

END IF CALL WRRRN ('Solution', X) WRITE (NOUT,'(A11, E15.5)') 'Residual = ', TOL END

OutputSolution

1 1.0002 2.0003 3.0004 4.0005 5.0006 6.000Residual = 0.25882E-05

IMSL Fortran Math

Page 63: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

63

www.vnij.comCh. 2 固有システム解析

Eigensystem Analysis

1. 固有値の計算 LIN_EIG_, LIN_GEIG_– 正方、自己随伴行列、一般化固有値の計算

2. 固有値と固有ベクトルの計算 Ax=λx– 様々なタイプの行列をカバー

• 実・複素、対称、正定値、帯・一般・Hessenbergなど

3. 一般化固有値問題 Ax=λBx• 実・複素、実対称行列

IMSL Fortran Math

Page 64: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

64

www.vnij.com

EPIHFp. 518

EPISBp. 501

EPISFp. 483

性能指標Performance Index

EVFHFp 515

EVFSBp. 498

EVFSFp. 480

所定範囲内の固有値と固有ベクトル

EVBHFp. 513

EVBSBp. 495

EVBSFp. 478

所定範囲内の固有値

EVEHFp.510

EVESBp. 492

EVESFp. 475

最大と最小の固有値と固有ベクトル

EVAHFp. 508

EVASBp. 490

EVASFp. 473

最大と最小の固有値

EVCHFp. 505

EVCSBp. 487

EVCSFp. 471

全ての固有値と固有値ベクトル

EVLHFp. 502

EVLSBp. 485

EVLSFp. 469

全ての固有値

Hermite完全

対称帯

対称完全

対称と Hermite の固有方程式 Ax = lx

IMSL Fortran Math

Ch. 2 固有システム解析Eigensystem Analysis

Page 65: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

65

www.vnij.com

EPICGp. 467

EPIRGp. 460

EPICGp. 467

EPIRGp. 460

性能指標

EVCCHp. 526

EVCRHp. 522

EVCCGp. 464

EVCRGp. 457

全ての固有値 と

固有ベクトル

EVLCHp. 525

EVLRHp. 455

EVLCGp. 462

EVLRGp. 455

全ての固有値

複素数Hessenberg

実数Hessenberg

複素数一般

実数一般

一般の固有方程式 Ax = lx

GPISPp. 549

GPICGp. 542

GPIRGp. 535

性能指標

GVCSPp. 547

GVCCGp. 540

GVCRGp. 531

全ての固有値と固有ベクトル

GVLSPp. 544

GVLCGp. 537

GVLRGp. 529

全ての固有値

A 対称B 正定値

複素一般

実数一般

一般化固有方程式 Ax = lBx

IMSL Fortran Math

Ch. 2 固有システム解析Eigensystem Analysis

Page 66: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

66

www.vnij.com

! For comparison, compute the singular values. call lin_sol_svd(A, b, x, nrhs=0, s=S)

! Check the results: Magnitude of eigenvalues should equal ! the singular values.

if (sum(abs(abs(D) - S)) <= & sqrt(epsilon(one))*S(1)) then

write (*,*) 'Example 1 for LIN_EIG_SELF is correct.' end if end

use lin_eig_self_intuse lin_sol_svd_intuse rand_gen_int

implicit none

! This is Example 1 for LIN_EIG_SELF.

integer, parameter :: n=64 real(kind(1e0)), parameter :: one=1e0 real(kind(1e0)) :: A(n,n), b(n,0), D(n), S(n), x(n,0), y(n*n)

! Generate a random matrix and from it ! a self-adjoint matrix.

call rand_gen(y) A = reshape(y,(/n,n/)) A = A + transpose(A)

! Compute the eigenvalues of the matrix. call lin_eig_self(A, D)

例:自己随伴行列の固有値を計算(p.434)

A = C + CT (実対称行列とする)

QR法で固有値を計算

特異値と比較

IMSL Fortran Math

Ch. 2 固有システム解析Eigensystem Analysis

Page 67: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

67

www.vnij.comCh. 2 固有システム解析

Eigensystem Analysisuse linear_operators

implicit none

! This is Example 1 (using operators) for LIN_EIG_SELF.

integer, parameter :: n=64 real(kind(1e0)), parameter :: one=1e0 real(kind(1e0)) :: A(n,n), D(n), S(n)

! Generate a random matrix and from it ! a self-adjoint matrix.

A = rand(A); A = A + .t.A

! Compute the eigenvalues of the matrix. D = EIG(A)

! For comparison, compute the singular values and check for ! any error messages for either decomposition.

S = SVD(A)

! Check the results: Magnitude of eigenvalues should equal ! the singular values.

if (norm(abs(D) - S) <= sqrt(epsilon(one))*S(1)) then write (*,*) 'Example 1 for LIN_EIG_SELF (operators) is correct.'

end if end

例:自己随伴行列の固有値を計算(p.1458)

前と同じ問題をジェネリック関数で解く(Ch.10参照)

IMSL Fortran Math

Page 68: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

68

www.vnij.comCh. 3 補間と近似

Interpolation and Approximation

1. 区分多項式 (piecewise polynomial)

2. Spline補間– B-Spline, Cubic Spline,テンソル積Spline

3. 2次補間、散布データ補間、 小2乗、有理Chebyshev近似

( ) ( )( )

1

11

for < 1 !

jki

ji i ij

xp x c x

jx

x x-

+=

-= £

( ) ( )( )

1

1, 1 1 1 2 1 !

ki

i i i i i kic p c c ckx

x x-

+ +

D= = + D + +

-

IMSL Fortran Math

(ζ: breakpoint 単調増加)

( Δζi=ζi+1-ζi )

( ) ( )1

N

j jj

f x c B x=

( ) ( ) ( )1 1

,N M

ij i jj i

f x y c B y B x= =

=åå

( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ,, , , , , ,

1 1 1

, ,y xz

x x y y z z

N NNp q r p q r

nml n k m k l kl m n

s x y z c B x B y B z= = =

=ååå t t t

Page 69: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

69

www.vnij.comCh. 3 補間と近似

Interpolation and Approximation

補間ルーチンの選び方全部で18のルーチン

CSAKMCSCOM

CSPER

CSHER

形 状保存

周期的

導関数

SURF

散布データ2D

BS2INQD2VLQD2DR

BS3INQD3VLQD3DR

テンソル積2D/3D

2D 3D

CSIEZCSINTCSDECSPLEZBSINTQDVALQDDER

補間

単変量多変量

IMSL Fortran Math

汎用ルーチン

Page 70: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

70

www.vnij.comCh. 3 補間と近似

Interpolation and Approximation

数々なSpline補間の例

CSINT : Cubic Spline Not-a-knotCSDEC : Derivative end condition

自然境界条件 Natural SplineCSAKM : Akima 秋間浩の振動を

小にする補間

CSCON : Shape preserving 凸状を

保つ補間

BSINT K=3 : 3次の B-SplineBSINT K=5 : 5次の B-Spline

CSAKM

CSINT CSDEC (natural spline)

CSCON

BSINT with K=3 BSINT with K=5

IMSL Fortran Math

Page 71: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

71

www.vnij.comCh. 3 補間と近似

Interpolation and Approximation

Splineルーチンの関係

CSVALCSDERCSITGCS1GD

BSNAKBSOPK

BSINT

BSLSQBSVLSCONFT

BSCPP

BSVALBSDERBSITGBS1GD

DATA

CSSMHCSSCV

PPVALPPDERPPITGPP1GD

OUT

CSINT

CSHER

CSCONCSPER

CSAKM

CSDEC

IMSL Fortran Math

C* : Cubic Spline

B* : B-Spline

P* : Piecewise

*VAL : evaluate

*DER : differentiate

*ITG : integrate

*1GD : evaluate on grid

Page 72: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

72

www.vnij.comCh. 3 補間と近似

Interpolation and Approximation

例:CSCONとCSINTによる当てはめ (p.604)

USE CSCON_INTUSE UMACH_INTUSE WRRRL_INT

! SpecificationsINTEGER NDATAPARAMETER (NDATA=9)

! INTEGER IBREAK, NOUTREAL BREAK(2*NDATA), CSCOEF(4,2*NDATA), FDATA(NDATA),&

XDATA(NDATA)CHARACTER CLABEL(14)*2, RLABEL(4)*2

! DATA XDATA/0.0, .1, .2, .3, .4, .5, .6, .8, 1./DATA FDATA/0.0, .9, .95, .9, .1, .05, .05, .2, 1./DATA RLABEL/’ 1’, ’ 2’, ’ 3’, ’ 4’/DATA CLABEL/’ ’, ’ 1’, ’ 2’, ’ 3’, ’ 4’, ’ 5’, ’ 6’,&

’ 7’, ’ 8’, ’ 9’, ’10’, ’11’, ’12’, ’13’/! Compute cubic spline interpolant

CALL CSCON (XDATA, FDATA, IBREAK, BREAK, CSCOEF)! Get output unit number

CALL UMACH (2, NOUT)! Print the BREAK points and the! coefficients (CSCOEF) for! checking purposes.

WRITE (NOUT,’(1X,A,I2)’) ’IBREAK = ’, IBREAKCALL WRRRL (’BREAK’, BREAK, RLABEL, CLABEL, 1, IBREAK, 1, &

FMT=’(F9.3)’)CALL WRRRL (’CSCOEF’, CSCOEF, RLABEL, CLABEL, 4, IBREAK, 4, &

FMT=’(F9.3)’)END

IMSL Fortran Math

Page 73: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

73

www.vnij.comCh. 3 補間と近似

Interpolation and Approximation

例:離散1次元データへのBスプラインによる加重 小2乗法当てはめ (p.565)

関数 g(x) = exp(-x2/2)グリッド点 xi = (i-1)⊿x, i = 1, ,, ndata

f(xi) = g(xi), i = 0, ,, ndata自然境界条件 f’’(xi) = g’’(xi),i=0 and ndata

! This is Example 1 for SPLINE_FITTING, Natural Spline Interpolation ! using cubic splines. Use the function exp(-x**2/2) to generate samples.

integer :: i integer, parameter :: ndata=24, nord=4, ndegree=nord-1, &

nbkpt=ndata+2*ndegree, ncoeff=nbkpt-nord, nvalues=2*ndatareal(kind(1e0)), parameter :: zero=0e0, one=1e0, half=5e-1 real(kind(1e0)), parameter :: delta_x=0.15, delta_xv=0.4*delta_x real(kind(1e0)), target :: xdata(ndata), ydata(ndata), &

spline_data (3, ndata), bkpt(nbkpt), & ycheck(nvalues), coeff(ncoeff), & xvalues(nvalues), yvalues(nvalues), diffs

real(kind(1e0)), pointer :: pointer_bkpt(:) type (s_spline_knots) break_pointstype (s_spline_constraints) constraints(2) xdata = (/((i-1)*delta_x, i=1,ndata)/) ydata = exp(-half*xdata**2) xvalues =(/(0.03+(i-1)*delta_xv,i=1,nvalues)/) ycheck= exp(-half*xvalues**2) spline_data(1,:)=xdataspline_data(2,:)=ydataspline_data(3,:)=one

! Define the knots for the interpolation problem. bkpt(1:ndegree) = (/(i*delta_x, i=-ndegree,-1)/) bkpt(nord:nbkpt-ndegree) = xdatabkpt(nbkpt-ndegree+1:nbkpt) = & (/(xdata(ndata)+i*delta_x, i=1,ndegree)/)

! Assign the degree of the polynomial and the knots. pointer_bkpt => bkptbreak_points=s_spline_knots(ndegree, pointer_bkpt)

! These are the natural conditions for interpolating cubic ! splines. The derivatives match those of the interpolating ! function at the ends.

constraints(1)=spline_constraints & (derivative=2, point=bkpt(nord), type='==', value=-one)

constraints(2)=spline_constraints & (derivative=2,point=bkpt(nbkpt-ndegree), type= '==', & value=(-one+xdata(ndata)**2)*ydata(ndata))

coeff = spline_fitting(data=spline_data, knots=break_points,& constraints=constraints)

yvalues=spline_values(0, xvalues, break_points, coeff)

diffs=norm(yvalues-ycheck,huge(1))/delta_x**nord

if (diffs <= one) then write(*,*) 'Example 1 for SPLINE_FITTING is correct.'

end if end

IMSL Fortran Math

Page 74: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

74

www.vnij.comCh. 4 積分と微分

Integration and Differentiation

1. 単変量重み付き積分2. 2次元積分3. 多次元積分4. 微分

– 1次、2次,3次微分

5. Gaussの求積ルールGauss, Gauss-Radau, Gauss-Lobatto

f は2N未満のオーダーの多項式

6. Fejérの求積ルール

( ) ( )b

af x w x dxò

( )( )

( ),

b h x

a g xf x y dy dxò ò

( )1

11 1, ,n

n

b b

n na af x x dx dxò ò

( ) ( ) ( )1

Nb

i iai

f x w x dx f x w=

=åò

( )( )( )( )( )

( ) ( ) ( )( )

( ) ( )

2

2

2

1 1,1 Legendre

1/ 1- 1, 1 Chebyshev 1st kind

1 1, 1 Chebyshev 2nd kind

, Hermite

1 1 1, 1 Jacobi0, Generalized Laguerre

1/ cosh Hyperbolic cosine

x

x

w x

x

x

e

x xe x

x

a b

a

-

-

-

-

- -

-¥ ¥

+ - -¥

-¥ ¥

Interval Name

IMSL Fortran Math

Page 75: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

75

www.vnij.comCh. 4 積分と微分

Integration and Differentiation

REAL FUNCTION F (X)REAL XREAL ALOG, SQRTINTRINSIC ALOG, SQRTF = ALOG(X)/SQRT(X)RETURNEND

OutputComputed = -4.000 Exact = -4.000

Error estimate = 1.519E-04 Error = 2.098E-05

USE QDAGS_INT USE UMACH_INT INTEGER NOUTREAL A, ABS, B, ERRABS, ERREST, ERROR, ERRREL, EXACT, F, &

RESULTINTRINSIC ABSEXTERNAL F

! Get output unit numberCALL UMACH (2, NOUT)

! Set limits of integrationA = 0.0B = 1.0

! Set error tolerancesERRABS = 0.0CALL QDAGS (F, A, B, RESULT, ERRABS=ERRABS, ERREST=ERREST)

! Print resultsEXACT = -4.0ERROR = ABS(RESULT-EXACT)WRITE (NOUT,99999) RESULT, EXACT, ERREST, ERROR

99999 FORMAT (’ Computed =’, F8.3, 13X, ’ Exact =’, F8.3, /, /, &’ Error estimate =’, 1PE10.3, 6X, ’Error =’, 1PE10.3)

END

例:関数の積分と誤差(p.772)

( )1 1/ 2

0ln 4x x dx- = -ò

IMSL Fortran Math

QDAGS : グローバルアダプティブ法による汎用求積ルーチン。21点Gauss-Kronrodルールで区間積分。

誤差の推定は10点Gauss求積ルール

による。

Page 76: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

76

www.vnij.comCh. 4 積分と微分

Integration and Differentiation

Outputresult = -0.3334789

implicit noneinteger, parameter :: ndim=10real(kind(1d0)) :: a(ndim)real(kind(1d0)) :: b(ndim)real(kind(1d0)) :: resultinteger :: Iexternal fcn a = 0.d0b = 1.d0call qmc(fcn, a, b, result)write (*,*) 'result = ', result

end real(kind(1d0)) function fcn(x)

implicit nonereal(kind(1d0)), dimension(:) :: xinteger :: i, jreal(kind(1d0)) :: prod, sum, signsign = -1.d0sum = 0.d0do i=1, size(x)

prod = 1.d0prod = product(x(1:i))sum = sum + (sign * prod)sign = -sign

end dofcn = sum

end function fcn

例:準モンテカルロ法による積分(p.810)

金融分野でよく利用される。

( )1

1 1

0 01 1

1 11 13 2

niwi

j ni j

x d x d x= =

é ùæ ö- = - - -ê úç ÷è øê úë û

å Õò ò

(n=10の場合の例)

QMC:Quasi-Monte Carlo法による求積。

乱数列としてLow-discrepancyの一般化Faure列を用いる。(Stat Ch.18 FAURE_NEXT)

IMSL Fortran Math

Page 77: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

77

www.vnij.comCh. 5 微分方程式

Differential Equations

1. 常微分方程式の解 (ODE)– 初期値問題

• Runge-Kutta, Adams-Moulton, Gear– 境界値問題

• 有限差分法、多重射撃法(multiple shooting)2. 微分代数式の解

• Petzold-Gear法3. 偏微分方程式の解 (PDE)

– 1次元問題• ムービンググリッドによる解• 直線法(method of lines)

– 2次元、3次元問題• 高速Poissonソルバーによる解• PDE2D (別途販売) 選点法

4. Sturm-Liouville問題– 固有値、固有関数、スペクトル密度関数

( ) ( ) ( )1, , , , , , , , 0T

Ng t y y g t y y g t y y¢ ¢ ¢= =é ùë û

( ) ( ),dy t

y f t ydt

¢ = =

IMSL Fortran Math

221 1

1 2 2, , , , , , , , , ,i N Ni N

u u uu uf x t u u

t x x x x¶ ¶ ¶¶ ¶¶ ¶ ¶ ¶ ¶

æ ö= ç ÷

è ø

( )2 2

2 2 ,u u cu f x yx y

¶ ¶¶ ¶

+ + =

( ) ( ) ( ) ( )( ) for in ,d dup x q x u r x u x a bdx dx

l- + =

Page 78: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

78

www.vnij.comCh. 5 微分方程式

Differential Equations

SLEIGSturm-Liouville 問題の固有値、固有関数あるいはスペクトラル密度関数を求める。

-(pu')' + qu =λru,α1u(a)-α2(pu’(a))=λ(α1’u(a)-α2’(pu’(a))β1u(b)+β2(pu'(b))=0

FPS3H高速 Poisson ソルバー各面に u 又はun が与えられた直方体上のuxx + uyy + uzz+cu = f(x,y)

FPS2H高速 Poisson ソルバー各辺に u 又はun が与えられた矩形上のuxx + uyy + cu = f(x,y)

MOLCH直線法(Method of Lines)による解。 3次Hermite多項式で展開し、1次連立ODEを解く。

ut = f(x, t, u, ux, uxx)α1u(a)+β1ux(a) =γ1(t)α2u(b)+β2ux(b) =γ2(t)

DASPG指標0又は1の硬い系の微分代数式ソルバー Petzold-GearのBDF法g(t,y,y')=0y(t0),y'(t0) が与えられる

BVPMSマルチプルシューティング法を使用する境界値問題ソルバー(BVP)

BVPFD有限差分法を使用する境界値問題ソルバー(BVP)y' = f(t,y)h(y(a),y(b)) = 0

IVPRK中程度の精度が必要で硬い系ではないRunge-Kutta-Vernerの5次および6次

IVPAG高精度が必要で硬い系ではない(Adams 法を使用する)

y' = f(t,y)y(t0) = y0

IVPAGA は一般、対称正定値、帯、または対称正定値帯行列 Adams-Moulton法(12次まで)あるいはGearのBDF(後退微分式)Stiff法

Ay' = f(t,y)y(t0) = y0

ルーチン考察問題

IMSL Fortran Math

Page 79: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

79

www.vnij.comCh. 5 微分方程式

Differential Equations

USE IVPRK_INTUSE UMACH_INTINTEGER MXPARM, NPARAMETER (MXPARM=50, N=2)

! SPECIFICATIONS FOR LOCAL VARIABLESINTEGER IDO, ISTEP, NOUTREAL PARAM(MXPARM), T, TEND, TOL, Y(N)

! SPECIFICATIONS FOR SUBROUTINESEXTERNAL FCN

!CALL UMACH (2, NOUT)

! Set initial conditionsT = 0.0Y(1) = 1.0Y(2) = 3.0

! Set error toleranceTOL = 0.0005

! Set PARAM to defaultPARAM = 0.E0

! Select absolute error controlPARAM(10) = 1.0

! Print headerWRITE (NOUT,99999)IDO = 1ISTEP = 0

10 CONTINUEISTEP = ISTEP + 1TEND = ISTEPCALL IVPRK (IDO, FCN, T, TEND, Y, TOL=TOL, PARAM=PARAM)IF (ISTEP .LE. 10) THEN

WRITE (NOUT,’(I6,3F12.3)’) ISTEP, T, Y! Final call to release workspace

IF (ISTEP .EQ. 10) IDO = 3GO TO 10

END IF99999 FORMAT (4X, ’ISTEP’, 5X, ’Time’, 9X, ’Y1’, 11X, ’Y2’)

ENDSUBROUTINE FCN (N, T, Y, YPRIME)

! SPECIFICATIONS FOR ARGUMENTSINTEGER NREAL T, Y(N), YPRIME(N)

!YPRIME(1) = 2.0*Y(1) - 2.0*Y(1)*Y(2)YPRIME(2) = -Y(2) + Y(1)*Y(2)RETURNEND

例:ウサギ r と 狐 f (p.840)r’ = 2r – 2rf ; f’ = -f + rfr(0) = 1, f(0) = 3

IMSL Fortran Math

Page 80: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

80

www.vnij.comCh. 5 微分方程式

Differential Equations

例:ウサギ r と 狐 f (p.840)Lotka-Volterra system捕食-被食の関係式

Runge-Kutta-Vernerの5次および6次の方法による解。

JMSLによる表示例

赤の点が初期値

IMSL Fortran Math

Page 81: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

81

www.vnij.comCh. 6 変換

Transforms

1. 高速 Fourier 変換 (FFT)

– 実・複素

– 1次・2次・3次

2. たたみ込みと相関

3. 逆Laplace 変換

1

ˆ :N

m n nmn

x x w=

( )( )

( )( )

( )( )

( )( )

( )( )

( )

( )

( )( )

-2 -1 1 /

2 -1 1 /

Routine1 1 2

FFTRF cos or sin

1 1 2FFTRB cos or sin

FFTCF exp

FFTCB exp

FSINT sin 1

1 1FCOST cos

12 1

QSINF 2 sin 2

2 1QSINB 4 sin

22 1 1

QCOSF 2 cos 2

QCOSB 4 co

nm

i n m N

i n m N

m nN

m nN

nmN

n mNm n

Nn m

Nm n

N

p

p

wp

p

p

p

p

p

p

-

-

- -

- -

+- -

--

-

- -

( )( )2n-1 1s

2mN

p-

IMSL Fortran Math

“F”: Forward “I” : 初期化 “Q” : Quarter

“B” : Backward “2” : 2nd level ルーチン

Page 82: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

82

www.vnij.comCh. 6 変換

Transforms

use fast_dft_intuse rand_gen_int

implicit none

! This is Example 1 for FAST_DFT.

integer, parameter :: n=1024 real(kind(1e0)), parameter :: one=1e0 real(kind(1e0)) err, y(2*n) complex(kind(1e0)), dimension(n) :: a, b, c

! Generate a random complex sequence. call rand_gen(y) a = cmplx(y(1:n),y(n+1:2*n),kind(one)) c = a

! Transform and then invert the sequence back. call c_fast_dft(forward_in=a, &

forward_out=b) call c_fast_dft(inverse_in=b, &

inverse_out=a)

! Check that inverse(transform(sequence)) = sequence. err = maxval(abs(c-a))/maxval(abs(c)) if (err <= sqrt(epsilon(one))) then

write (*,*) 'Example 1 for FAST_DFT is correct.' end if

end

OutputExample 1 for FAST_DFT is correct.

例:次数1の離散フーリエ変換と逆変換(p.994)

IMSL Fortran Math

Page 83: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

83

www.vnij.comCh. 7 非線形方程式

Nonlinear Equations

1. 多項式のゼロ点 p(z) = anzn + an-1zn-1 + ¼ + a1z + a0

– Jenkins-Traub法

– Laguerre法

2. 関数のゼロ点– Müller法– 補間とバイセクション法

3. 非線形連立方程式の解 fi(x) = 0, for i = 1, 2, ¼, n

– 修正Powellハイブリッド法

– Broydenの更新によるセカント法

IMSL Fortran Math

Page 84: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

84

www.vnij.comCh. 7 非線形方程式

Nonlinear Equations

USE ZPORC_INTUSE WRCRN_INT

! Declare variablesINTEGER NDEGPARAMETER (NDEG=3)

!REAL COEFF(NDEG+1)COMPLEX ZERO(NDEG)

! Set values of COEFF! COEFF = (-2.0 4.0 -3.0 1.0)!

DATA COEFF/-2.0, 4.0, -3.0, 1.0/!

CALL ZPORC (COEFF, ZERO)!

CALL WRCRN (’The zeros found are’, ZERO, 1, NDEG, 1)!

END

OutputThe zeros found are

1 2 3( 1.000, 0.000) ( 1.000, 1.000) ( 1.000,-1.000)

例:p(z) = z3 - 3z2 + 4z -2

のゼロ点をJenkins-Traubの方法で計算。(p.1091)

IMSL Fortran Math

Page 85: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

85

www.vnij.comCh. 8 適化

Optimization

1. 多くの分野で利用されるアルゴリズム– 航空乗組員のスケジュール

– 適在庫計画

– ダンボール裁断計画、など

2. アルゴリズムの選択– 多変量・単変量

– 拘束 ある・なし• 区間/線形/非線形

– 関数の性質• 1次微分/平滑/Jacobian/ 小2乗

( )minnx

f xÎR

IMSL Fortran Math

subject to gi(x) = 0, for i = 1, 2, , m1gi(x) ≧ 0, for i = m1 + 1, , m

subject to li ≦xi ≦ui, for i = 1, 2, , n

subject to Ax = b

Page 86: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

86

www.vnij.comCh. 8 適化

Optimization

nonsmooth

UMCGF no derivative large-size

least squaresno Jacobian

no derivative

nonsmooth

UNLSF

UVMSG

UVMIF

UMCGG

UNLSJ

UMPOL

UMINF

UMINGUMIDH

UVMID UMIAH

no firstderivative

no second

problem

derivative

UNCONSTRAINEDMINIMIZATION

univariate multivariate

smooth

IMSL Fortran Math

Function values only

Gradient is available

Jacobian is available

Gradient is available

f’ & f’’ are available

Jacobian is available

Page 87: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

87

www.vnij.comCh. 8 適化

Optimization

例: LCONF : M.J.D.Powellの方法による線形拘束の一般 適化問題の解法(p.1252)

min f(x) = -x1x2x3

Subject to –x1-2x2-2x3 ≤ 0x1+2x2+2x3 ≤ 720 ≤ x1 ≤ 200 ≤ x2 ≤ 110 ≤ x3 ≤ 42

USE LCONF_INTUSE UMACH_INT

! Declaration of variablesINTEGER NCON, NEQ, NVARPARAMETER (NCON=2, NEQ=0, NVAR=3)

!INTEGER MAXFCN, NOUTREAL A(NCON,NVAR), ACC, B(NCON), OBJ, &

SOL(NVAR), XGUESS(NVAR), XLB(NVAR), XUB(NVAR)EXTERNAL FCN

!DATA A/-1.0, 1.0, -2.0, 2.0, -2.0, 2.0/, B/0.0, 72.0/DATA XLB/3*0.0/, XUB/20.0, 11.0, 42.0/, XGUESS/3*10.0/DATA ACC/0.0/, MAXFCN/400/

!CALL UMACH (2, NOUT)

!CALL LCONF (FCN, NEQ, A, B, XLB, XUB, SOL, XGUESS=XGUESS, &

MAXFCN=MAXFCN, ACC=ACC, OBJ=OBJ)!

WRITE (NOUT,99998) ’Solution:’WRITE (NOUT,99999) SOLWRITE (NOUT,99998) ’Function value at solution:’WRITE (NOUT,99999) OBJWRITE (NOUT,99998) ’Number of function evaluations:’, MAXFCNSTOP

99998 FORMAT (//, ’ ’, A, I4)99999 FORMAT (1X, 5F16.6)

END!

SUBROUTINE FCN (N, X, F)INTEGER NREAL X(*), F

!F = -X(1)*X(2)*X(3)RETURNEND

OutputSolution:20.000000 11.000000 15.000000

Function value at solution:-3300.000000

Number of function evaluations: 5

IMSL Fortran Math

Page 88: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

88

www.vnij.comCh. 8 適化

Optimization

USE NNLPF_INTUSE WRRRN_INTINTEGER IBTYPE, M, MEPARAMETER (IBTYPE=0, M=2, ME=1)

!REAL(KIND(1E0)) FVALUE, X(2), XGUESS(2), XLB(2), XUB(2)EXTERNAL FCN, GRAD

! XLB = -HUGE(X(1))XUB = HUGE(X(1))

!CALL NNLPF (FCN, M, ME, IBTYPE, XLB, XUB, X)

!CALL WRRRN ('The solution is', X)END

SUBROUTINE FCN (X, IACT, RESULT, IERR)INTEGER IACTREAL(KIND(1E0)) X(*), RESULTLOGICAL IERR

! SELECT CASE (IACT)CASE(0)

RESULT = (X(1)-2.0E0)**2 + (X(2)-1.0E0)**2CASE(1)

RESULT = X(1) - 2.0E0*X(2) + 1.0E0CASE(2)

RESULT = -(X(1)**2)/4.0E0 - X(2)**2 + 1.0E0END SELECTRETURNEND

OutputThe solution is1 0.82292 0.9114

( ) ( ) ( )( )( )

2 21 2

1 1 2

2 22 1 2

min 2 1

subject to 2 1 0

/ 4 1 0

F x x x

g x x x

g x x x

= - + -

= - + =

= - - + ³

例:P.Spellucci の方法による非線形 適化(p.1266)NNLP : 逐次2次計画法 (SQP: Sequential Quadratic Programming)

IMSL Fortran Math

Page 89: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

89

www.vnij.comCh. 9 基本的な行列とベクトル演算

Basic Matrix / Vector Operations

1. 行列とベクトルの基本演算

2. BLAS (Basic Linear Algebra Subprograms)http://www.netlib.org/blas/

– Level 1 ベクトルとベクトル・スカラの演算

– Level 2 ベクトルと行列の演算

– Level 3 行列と行列の演算

3. その他– 行列のコピー、変換、演算、ノルム、距離、たたみ

込み

– 4倍精度計算ルーチン

IMSL Fortran Math

BLAS routine

Page 90: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

90

www.vnij.comCh. 9 基本的な行列とベクトル演算

Basic Matrix / Vector Operations BLAS 1

DHPRODSHPRODzi ← xiyi

ZQDOTIZQDOTA

CZDOTICZDOTA

DQDOTIDQDOTA

SDDOTISDDOTA

b + x・ y (*)ACC + b + x ・y

ZQUDOTZQCDOT

CZUDOTCZCDOT

DQDDOTSDSDOTa + x ・y (*)

ZQDOTUZQDOTC

CZDOTUCZDOTC

DSDOTx・ y (*)

ZDOTUZDOTC

CDOTUCDOTC

DDOTSDOTx・y

ZSWAPCSWAPDSWAPSSWAPISWAPyi ⇔xi

ZAXPYCAXPYDAXPYSAXPYyi ←axi + yi

ZSUBCSUBDSUBSSUBISUBxi ←a – xi

ZADDCADDDADDSADDIADDxi ←xi + a

ZVCALZDVCAL

CVCALCSVCAL

DVCALSVCALyi ← axia ∈R

ZSCALZDSCAL

CSCALCSSCAL

DSCALSSCALxi ←axia ∈R

ZCOPYCCOPYDCOPYSCOPYICOPYyi ←xi

ZSETCSETDSETSSETISETxi ← a

DoubleComplex

ComplexDoubleRealIntegerOperation

IMSL Fortran Math

BLAS routine

(*) 高精度ルーチン

Page 91: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

91

www.vnij.comCh. 9 基本的な行列とベクトル演算

Basic Matrix / Vector Operations BLAS 1

IZAMINICAMINIDAMINISAMINi : |xi| = minj |xj|

IDMAXISMAXIIMAXi : xi = maxj xj

IDMINISMINIIMINi : xi = minj xj

DPRDCTSPRDCTПxi

DZNRM2SCNRM2DNRM2SNRM2||x||2

DZASUMSCASUMDASUMSASUMΣ|xi|

DSUMSSUMISUMΣxi

DXYZSXYZΣxiyizi

DoubleComplex

ComplexDoubleRealIntegerOperation

ZDROTMCSROTMDROTMSROTMApply modified Givens transform

DROTMGSROTMGConstruct modified Givens transform

ZDROTCSROTDROTSROTApply a plane rotation

DROTGSROTGConstruct Givens plane rotation

IZAMAXICAMAXIDAMAXISAMAXi : |xi| = maxj |xj|

DoubleComplex

ComplexDoubleRealIntegerOperation

IMSL Fortran Math

BLAS routine

Page 92: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

92

www.vnij.comCh. 9 基本的な行列とベクトル演算

Basic Matrix / Vector Operations BLAS 2

DSYRSSYRRank-One Matrix Update, Symmetric and Real

ZHER2CHER2Rank-Two Matrix Update, Hermitian and Conjugate Transpose

ZHERCHERRank-One Matrix Update, Hermitian and Conjugate Transpose

ZGERCCGERCRank-One Matrix Update, General, Complex, and Conjugate Transpose

ZGERUCGERURank-One Matrix Update, General, Complex and Transpose

DGERSGERRank-One Matrix Update, General and Real

ZTBSVCTBSVDTBSVSTBSVMatrix-Vector Solve, Triangular and Banded

ZTRSVCTRSVDTRSVSTRSVMatrix-Vector Solve, Triangular

ZTBMVCTBMVDTBMVSTBMVMatrix-Vector Multiply, Triangular and Banded

ZTRMVCTRMVDTRMVSTRMVMatrix-Vector Multiply, Triangular

DSBMVSSBMVMatrix-Vector Multiply, Symmetric and Banded

DSYMVSSYMVMatrix-Vector Multiply Symmetric and Real

ZHBMVCHBMVMatrix-Vector Multiply,Hermitian and Banded

ZHEMVCHEMVMatrix-Vector Multiply, Hermitian

ZGBMVCGBMVDGBMVSGBMVMatrix-Vector Multiply, Banded

ZGEMVCGEMVDGEMVSGEMVMatrix-Vector Multiply, General

DoubleComplexComplexDoubleRealOperation

IMSL Fortran Math

Page 93: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

93

www.vnij.comCh. 9 基本的な行列とベクトル演算

Basic Matrix / Vector Operations BLAS 3

ZTRSMCTRSMDTRSMSTRSMMatrix-Matrix solve, Triangular

ZTRMMCTRMMDTRMMSTRMMMatrix-Matrix Multiply, Triangular

ZHER2KCHER2KRank - 2k Update, Hermitian

ZSYR2KCSYR2KDSYR2KSSYR2KRank - 2k Update, Symmetric

ZHERKCHERKRank - k Update, Hermitian

ZSYRKCSYRKDSYRKSSYRKRank - k Update, Symmetric

ZHEMMCHEMMMatrix-Matrix Multiply, Hermitian

ZSYMMCSYMMDSYMMSSYMMMatrix-Matrix Multiply, Symmetric

ZGEMMCGEMMDGEMMSGEMMMatrix--Matrix Multiply, General

DSYR2SSYR2Rank-Two Matrix Update,Symmetric and Real

DoubleComplex

ComplexDoubleRealOperation

IMSL Fortran Math

Page 94: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

94

www.vnij.comCh. 9 基本的な行列とベクトル演算

Basic Matrix / Vector Operations

IMSL Fortran Math

CHBCBHermitian Band

CSBRBSymmetric Band

CHFCGHermitian Full

CSFRGSymmetric Full

CCBCBCCBCGComplex Band

CRBCBCRBRBCRBRGReal Band

CCGCBCCGCGComplex General

CRGRBCRGCGCRGRGReal General

ComplexBand

RealBand

ComplexGeneral

RealGeneral

From

To

行列のコピーと変換

Page 95: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

95

www.vnij.comCh. 9 基本的な行列とベクトル演算

Basic Matrix / Vector Operations

IMSL Fortran Math

行列の積とノルム

MUCBVMURBVMUCRVMURRVVector

MCRCRComplex Rect.

MRRRRReal Rectangular

ComplexBand

RealBand

ComplexRect.

RealRect.

B

AAB

NR2RRFrobenius

NR1CBNR1RBNR1RR1-norm

NRIRR∞-norm

ComplexBand

RealBand

RealRectangular

||A||

1 1

maxn

iji m jA A

¥ £ £ =

= å

1 1 1max

m

ijj n iA A

£ £ =

= å1 2

22

1 1

m n

iji j

A A= =

é ù= ê úë ûåå

Page 96: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

96

www.vnij.comCh. 10 線形代数演算子とジェネリック関数Linear Algebra Operators and Generic Functions

Yes

Yes

Yes

Yes

No

Yes

YesMPI

matmul(B, transpose(A)) matmul(B, conjg(transpose(A)))

BAT , BAHB .xt. A, or B .x. (.t. A) B .xh. A, or B .x. (.h. A)

matmul(transpose (A), B) matmul(conjg(transpose(A)), B)

ATB , AHBA .tx. B, or (.t. A) .x. B A .hx. B, or (.h. A) .x. B

lin_sol_gen lin_sol_lsq

BA-1B .xi. A

lin_sol_gen lin_sol_lsq

A-1BA .ix. B

transpose(A) conjg(transpose(A))

AT , AH.t. A, .h. A

lin_sol_gen lin_sol_lsq

A-1.i. A

matmul(A, B)ABA .x. BAlternative in Fortran 90Matrix OperationDefined Array Operation

IMSL Fortran Math

Page 97: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

97

www.vnij.comCh. 10 線形代数演算子とジェネリック関数Linear Algebra Operators and Generic Functions

TA R R=

( ) , TA QR Q Q I= =

rank(A) = rank

det(A) = determinant

AV = VE), AVD = BVE(AW = WE), AWD = BWE

Matrix Operation

Yes

Yes

Yes

No

Yes

Yes

Yes

Yes

MPI

P=NORM(A[,[type=]i])K=RANK(A)F=DET(A)

U=UNIT(A)

Q=ORTH(A [,R=R])

R=CHOL(A)

E=EIG(A [[,B=B, D=D],V=V, W=W])

S=SVD(A [,U=U, V=V])Defined Array Functions

TA USV=

[ ]1 1 1, / ,u a a= é ùë û

( )

11

12

1=1

max ( )

largest singular value

max ( )

m

j iji

n

i ijhugej

p A a

p A s

p A a

=

¥«

= =

= = =

= =

å

å

IMSL Fortran Math

Page 98: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

98

www.vnij.comCh. 10 線形代数演算子とジェネリック関数Linear Algebra Operators and Generic Functions

( )1 / rank As s

NZ I=

( )1,A diag x=

( )11,x a=

test for NaN, if (L) then …

random numbers, 0 < A < 1, of rank-1,2 and 3

Discrete Fourier Transform for Boxes, Inverse

Discrete Fourier Transform, Inverse

Matrix Operation

No

No

Yes

No

No

No

No

Yes

MPI

L=isNaN(A)

A=RAND(A)

Y=FFT_BOX (X,[WORK=W]);X=IFFT_BOX(Y,[WORK=W])

Y=FFT (X,[WORK=W]);X=IFFT(Y,[WORK=W])

X=DIAGONALS(A)

A=DIAG(X)

Z=EYE(N)

C=COND(A)

Defined Array Functions

IMSL Fortran Math

Page 99: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

99

www.vnij.comCh. 10 線形代数演算子とジェネリック関数Linear Algebra Operators and Generic Functions

use linear_operatorsimplicit none

! This is Example 1 for LIN_SOL_GEN, with operators and functions.

integer, parameter :: n=32 real(kind(1e0)) :: one=1.0e0, err real(kind(1e0)), dimension(n,n) :: A, b, x

! Generate random matrices for A and b: A = rand(A); b=rand(b)

! Compute the solution matrix of Ax = b. x = A .ix. b

! Check the results. err = norm(b - (A .x. x))/(norm(A)*norm(x)+norm(b)) if (err <= sqrt(epsilon(one))) &

write (*,*) 'Example 1 for LIN_SOL_GEN (operators) is correct.' end

例:連立一次式 Ax = b を解く(p.1434):

x=A-1b ; 残差 r=b-Ax

IMSL Fortran Math

Page 100: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

100

www.vnij.comCh. 11 ユーティリティ

Utilities

1. ScaLAPACKユーティリティ

– ファイル入出力:ScaLAPACK用のblock-cyclicフ

ォーマットに変換

2. 乱数生成 (Stat Ch.18参照)

3. オプションマネージャ

4. 印刷、配列の置換・ソート・並替え、検索、文字列操作、時間・日付、素因数分解、常数、単位換算 (Stat Ch.19も参照)

IMSL Fortran Math

Page 101: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran 各章概要

特殊関数Special Functions

IMSL Fortran

Page 102: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

102

www.vnij.com Ch. 1 基本関数 Elementary FunctionsCh. 2 三角関数と双曲線関数

Trigonometric and Hyperbolic Functions

1. 基本関数複素数の偏角 arg(z) =θ= tan-1(y/x) for z = x + iy = |z|eiθ

実・複素数の3乗根 z1/3

実・複素数の (ez – 1)/z 複素数の常用対数 log10z実・複素数の ln(z + 1)

2. 三角関数と双曲線関数tan(z), cot(x), sin(x゜), cos(x゜), sin-1(z), cos-1(z), tan-1(z), tan-1(z1/z2)sinh(z), cosh(z), tanh(z), sinh-1(z), cosh-1(z), tanh-1(z)

IMSL Fortran SFun

Page 103: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

103

www.vnij.comCh. 3 指数積分と関連する関数Exponential Integrals and Related Functions

1. 指数積分 :

IMSL Fortran SFun

Figure 3-1 Plot of exEn(x), E1(x) and Ei(x)

Ei( ) / for 0t

xx e t dt x

¥ -

-= - ¹ò

1( ) / for 0t

xE x e t dt x

¥ -= ¹ò

1( ) for 0x xt n

nE x e e t dt x¥ - -= >ò

Page 104: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

104

www.vnij.comCh. 3 指数積分と関連する関数Exponential Integrals and Related Functions

2. 対数積分:li(x)はx以下の素数の数π(x)に近似

3. 三角関数積分:

4. 双曲線関数積分:

IMSL Fortran SFun

0li( ) for 0 and 1

lnx dtx x x

t= - > ¹ò

0sinSi( )=

x tx dttò 0

1 cosCi( ) lnx

ttx x d

tg -

= + + ò

0

1 cosCin( )x tx dt

t-

= ò

0

sinhShi( )x tx dt

t= ò

0

cosh 1Chi( ) ln for 0x tx x dt x

tg -

= + + >ò

0

cosh 1Cinh( )x tx dt

t-

= ò

γはEulerの定数

γ≒0.57721566....

Page 105: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

105

www.vnij.comCh. 4 ガンマ関数と関連する関数Gamma Function and Related Functions

Gamma関数その他(階乗、二項係数、完全・不完全Γ、Ψ、β、Pochhammerの記号(a)x

FAC n! = Γ(n + 1)

BINOM nCm = n!/m!(n - m)!

GAMMA ( ) 10 , 0, 1, 2,t xx e t dt x¥ - -G = ¹ - -ò

GAMR 1/Γ (x)

ALNGAM ln |Γ (x)|

ALGAMS ln |Γ (x)| and signΓ (x)

GAMI ( ) 10, , 0, 0x a ta x t e dt a xg - -= > ³ò

GAMIC ( ) 1, , 0a txa x t e dt x¥ - -G = >ò

POCH1 ((a)x - 1)/x, if a + x = 0, -1, -2, then a must = 0, -1, -2,

BETA β(x1, x2) = Γ(x1)Γ(x2)/Γ(x1 + x2), x1 > 0 and x2 > 0

CBETA β(z1, z2) = Γ(z1)Γ(z2)/Γ(z1 + z2), z1 > 0 and z2 > 0

ALBETA ln β(a, b), a > 0, b > 0

BETAI Ix(a, b) = βx(a, b)/β(a, b), 0 <x <1, a > 0, b > 0

IMSL Fortran SFun

x ≠0, -1, -2, …

GAMIT γ*(a, x) = (x-a/Γ(a))γ(a, x)

PSI Ψ(x) = Γ’(x)/Γ(x)

POCH (a)x = Γ(a + x)/Γ(a), if a + x = 0, -1, -2, then a must = 0, -1, -2,

x ≠0, -1, -2, …

x ≧0

Page 106: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

106

www.vnij.comCh. 5 誤差関数と関連する関数Error Function and Related Functions

誤差関数

補誤差関数 erfc(x) = 1 – erf(x)

ex2erfc(x), e-z2

erfc(-iz), erf-1(x), erfc-1(x)

Dawson関数

Fresnel積分

2

0

2erf ( )x tx e dt

p-= ò

2 2

0

xx te e dt- ò

2

0( ) cos

2x

C x t dtpæ ö= ç ÷è øò 2

0( ) sin

2x

S x t dtpæ ö= ç ÷è øò

1( ) ( ) erf (1 )2 2

iC z iS z i zpæ ö++ = -ç ÷ç ÷

è ø

IMSL Fortran SFun

Page 107: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

107

www.vnij.comCh. 6 ベッセル関数

Bessel Functions

ベッセル関数とその列

BSKESBSK1EBSK0Ee-|x|Kv (x)

CBKSBSKSBSK1BSK0Kv (x)

BSIESBSI1EBSI0Ee-|x|Iv (x)

CBISBSINSBSISBSINSBSI1BSI0Iv (x)

CBYSBSYSBSY1BSY0Yv(x)

CBJSBSJNSBSJSBSJNSBSJ1BSJ0Jv(x)

RealIntegerrealinteger10FunctionOrderOrder

Complex ArgumentReal Argument

1種

変形2種

2種

変形1種

変形1種

変形2種

IMSL Fortran SFun

Page 108: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

108

www.vnij.com

Ch.7 Kelvin関数とそれらの導関数

• 1種、2種

• 0次、1次

Ch.8 Airy関数とそれらの導関数と指数スケール

• 1種、2種

Ch. 7 ケルビン関数 Kelvin FunctionsCh. 8 エアリ関数 Airy Functions

3 / 4ber bei ( )iv v vx i x J xe p+ =

/ 2 / 4ker kei ( )i iv v vx i x e K xenp p-+ =

( ) 3 3 / 21/ 320

1 1 2Ai cos3 33

xx xt t dt K xp p

¥ æ ö æ ö= + =ç ÷ ç ÷è ø è øò

( ) 3 3

0 0

1 1 1 1Bi exp sin3 3

x xt t dt xt t dtp p

¥ ¥æ ö æ ö= - + +ç ÷ ç ÷è ø è øò ò

IMSL Fortran SFun

Page 109: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

109

www.vnij.com Ch. 9 楕円積分 Elliptic IntegralsCh. 10 楕円関数 Elliptic and RelatedFunctions

Ch.9 楕円積分• 1種、2種完全

• Carlsonの不完全楕円積分1種、2種、3種、特殊

Ch.10 楕円関数• Weierstrass

• Jacobi sn(x,m) = sinφ, cn(x,m) = cosφ、 ここでφは

( ) ( )1/ 2/ 2 2

01 sinK m m d

pq q

-

= -ò ( ) ( )1/ 2/ 2 2

01 sinE m m d

pq q= -ò

( )( ) ( )( ) 1/ 20

1, ,2F

dtR x y zt x t y t z

¥=

+ + +é ùë ûò

( )( )( )( )

1/ 20 3

3, ,2D

dtR x y zt x t y t z

¥=

é ù+ + +ë ûò

( )( )( )( )( )

1/ 20 2

3, , ,2J

dtR x y zt x t y t z t

rr

¥=

é ù+ + + +ë ûò

( )1

20 21 sin

dxm

f q

q=

IMSL Fortran SFun

( )( ) ( )

1/ 20 2

1,2C

dtR x yt x t y

¥=

é ù+ +ë ûò

Page 110: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

110

www.vnij.com Ch. 11確率分布関数とその逆関数Probability Distribution Functions and Inverses(Stat Ch.17も参照)

1. 離散確率変数:分布関数と確率関数• 二項分布• 超幾何分布• Poisson分布

2. 連続確率変数:分布関数とその逆関数• 標準正規(Gauss)分布、 2変量(係数ρ)

• ベータ分布• χ2分布、 非中心• F 分布• Γ 分布• Studentのt 分布、 非中心• Kolmogorov-SmirnovのD+,D-適合度検定統計値の分布関数、

1および2 標本

• ユーザ指定

IMSL Fortran SFun

( ) ( )2 2

22

1 2, exp2 12 1

x y u uv vF x y du dvrrp r -¥ -¥

æ ö- +ç ÷= -ç ÷-- è ø

ò ò

Page 111: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

111

www.vnij.com Ch. 12 マシュウ関数 Mathieu FunctionsCh. 13 その他の関数 Misc Functions

Ch.12 Mathieu関数

• Mathieuの方程式楕円座標系でのLaplaceの式

• 固有値:周期kπになる分離常数a• 偶・奇周期Mathieu関数

Ch.13 その他の関数

• Spenceの二重対数関数(dilogarithm)

• Chebyshev級数

( )2

2 2 cos 2 0d y a q v ydv

+ - =

( )0

ln 1x ys x dy

y-

= -ò

IMSL Fortran SFun

Page 112: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran 各章概要

統計解析Statistics

Page 113: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

113

www.vnij.comCh. 1 基本統計

Basic Statistics

1. 度数分布表 (frequency table)– 1元、2元、多変量データ (Stat Ch.5も参照)

2. 単変量データの統計値 (平均、標準偏差など)

3. 順位(rank)と順序(order)統計量

4. 母数推定(parametric estimate)と検定(test)– 2つの標本に対する t 検定、F 検定

– 正規分布・二項分布・Poisson分布のパラメータの推定

5. グループ化されたデータの統計量

6. テーブル内の連続データの統計量 (Stat Ch.5も参照)

IMSL Fortran Stat

Page 114: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

114

www.vnij.comCh. 1 基本統計

Basic Statistics

USE TWOMV_INTINTEGER IPRINTREAL CONPRV, STAT(25), X(7), Y(9)

! DATA X/72., 75., 77., 80., 104., 110., 125./Y/111., 118., 128., &

138., 140., 150., 163., 164., 169./!

IPRINT = 2CONPRV = 0.0CALL TWOMV (X, Y, STAT, IPRINT=IPRINT, CONPRV=CONPRV)END

OutputMean Inferences Assuming Equal VariancesPooled Variance 434.633t Value -4.804Probability of a Larger t in Abs. Value 0.000Degrees of Freedom 14.000Lower Confidence Limit Difference in Means -73.010Upper Confidence Limit Difference in Means -27.942

例:2つの標本(テストの成績)の平均の検定(p.44)• グループXはグループYよ

り平均は低いか?

• 2つの母集団の分散は同じとして t 検定を行う。

• 帰無仮説 μx<μyは5%

の有意水準で棄却される。

(1/ ) (1/ )x y

x yts n n

-=

+

IMSL Fortran Stat

Page 115: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

115

www.vnij.comCh. 2 回帰

Regression

1. 単純線形回帰分析

2. 多変量一般線形モデル分析– モデルの当てはめ

– 統計的推論と診断

– 分類変数のためのユーティリティ

3. 変数の選択– Furnival-Wilsonの 良の多重線形回帰モデル

– Efryomson-Goodnightの前進・後退・ステップワイズによる多重線形回帰モデル

4. 多項式回帰分析

5. 非線形回帰分析

6. 小2乗以外での線形モデルへの当てはめ– 小絶対値(LAV, L1)、Lpノルム 、 小 大値(Minimax,L∞ )

IMSL Fortran Stat

1 1,2, ,i i iy x i nob b e= + + =

1 1 2 2 ... 1,2,...,i i i k ik iy x x x i nob b b b e= + + + + + =

21 2 .... 1, 2, ,k

i i i k i iy x x x i nob b b b e= + + + + + =

Y = XB + e

( ; ) 1,2, ,i i iy f x i nq e= + =

( )1/

pn pi ii

y y=

Page 116: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

116

www.vnij.comCh. 2 回帰

Regression

USE RLSE_INTUSE WRRRN_INTUSE UMACH_INTINTEGER INTCEP, LDX, NCOEF, NIND, NOBSPARAMETER (INTCEP=1, NIND=3, NOBS=9, LDX=NOBS, &

NCOEF=INTCEP+NIND)!

INTEGER NOUTREAL B(NCOEF), SSE, SST, X(LDX,NIND), Y(NOBS)

!DATA (X(1,J),J=1,NIND)/ 7.0, 5.0, 6.0/, Y(1)/ 7.0/DATA (X(2,J),J=1,NIND)/ 2.0, -1.0, 6.0/, Y(2)/-5.0/DATA (X(3,J),J=1,NIND)/ 7.0, 3.0, 5.0/, Y(3)/ 6.0/DATA (X(4,J),J=1,NIND)/-3.0, 1.0, 4.0/, Y(4)/ 5.0/DATA (X(5,J),J=1,NIND)/ 2.0, -1.0, 0.0/, Y(5)/ 5.0/DATA (X(6,J),J=1,NIND)/ 2.0, 1.0, 7.0/, Y(6)/-2.0/DATA (X(7,J),J=1,NIND)/-3.0, -1.0, 3.0/, Y(7)/ 0.0/DATA (X(8,J),J=1,NIND)/ 2.0, 1.0, 1.0/, Y(8)/ 8.0/DATA (X(9,J),J=1,NIND)/ 2.0, 1.0, 4.0/, Y(9)/ 3.0/

!

!CALL RLSE (Y, X, B, SST=SST, SSE=SSE)CALL WRRRN (’B’, B)CALL UMACH (2, NOUT)WRITE (NOUT,*)WRITE (NOUT,99999) ’SST = ’, SST, ’ SSE = ’, SSE

99999 FORMAT (A7, F7.2, A7, F7.2)END

OutputB

1 7.7332 -0.2003 2.3334 -1.667

SST = 156.00 SSE = 4.00

例: 小2乗による多重線形回帰(p.108)yi= b0 + b1xi1 + b2xi2 + b3xi3 + ei i = 1,2, ¼, 9

2

1

ˆSSE ( )n

i ii

y y=

= -å 2

1SST ( )

n

ii

y y=

= -å

IMSL Fortran Stat

Page 117: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

117

www.vnij.comCh. 2 回帰

Regression

INTEGER LDR, NOBS, NPARMPARAMETER (NOBS=15, NPARM=2, LDR=NPARM)

!INTEGER IRANK, NOUTREAL DFE, R(LDR,NPARM), SSE, THETA(NPARM)EXTERNAL EXAMPL

!DATA THETA/60.0, -0.03/CALL UMACH (2, NOUT)

!CALL RNLIN (EXAMPL, THETA, R=R, IRANK=IRANK, DFE=DFE, SSE=SSE)WRITE (NOUT,*) ’THETA = ’, THETAWRITE (NOUT,*) ’IRANK = ’, IRANK, ’ DFE = ’, DFE, ’ SSE = ’, &

SSECALL WRRRN (’R’, R)END

!SUBROUTINE EXAMPL (NPARM, THETA, IOPT, IOBS, FRQ, WT, E, DE, &

IEND)INTEGER NPARM, IOPT, IOBS, IENDREAL THETA(NPARM), FRQ, WT, E, DE(1)

!INTEGER NOBSPARAMETER (NOBS=15)REAL EXP, XDATA(NOBS), YDATA(NOBS)INTRINSIC EXP

!DATA YDATA/54.0, 50.0, 45.0, 37.0, 35.0, 25.0, 20.0, 16.0, 18.0, &

13.0, 8.0, 11.0, 8.0, 4.0, 6.0/DATA XDATA/2.0, 5.0, 7.0, 10.0, 14.0, 19.0, 26.0, 31.0, 34.0, &

38.0, 45.0, 52.0, 53.0, 60.0, 65.0/

例:非線形回帰モデル(p.306) 修正Levenberg-Marquardtの非線形 小2乗法による。

IMSL Fortran Stat

21 1,2, ,15ix

i iy e iqq e= + =

IF (IOBS .LE. NOBS) THENWT = 1.0E0FRQ = 1.0E0IEND = 0E = YDATA(IOBS) - THETA(1)*EXP(THETA(2)*XDATA(IOBS))

ELSEIEND = 1

END IFRETURNEND

OutputTHETA = 58.6045 -3.95835E-02IRANK = 2 DFE = 13.0000 SSE = 49.4593

Page 118: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

118

www.vnij.comCh. 2 回帰

Regression

PARAMETER (NCOEF=2, NCOL=2, NOBS=7, LDX=NOBS)!

INTEGER IIND, INDIND(1), IRANK, IRSP, ITER, NOUT, &NRMISS

REAL B(NCOEF), AEMAX, X(LDX,NCOL)CHARACTER CLABEL(1)*4, RLABEL(1)*4

!DATA (X(1,J),J=1,NCOL)/0.0, 0.0/DATA (X(2,J),J=1,NCOL)/1.0, 2.5/ ,,,DATA (X(7,J),J=1,NCOL)/5.0, 5.0/

!IIND = -1IRSP = 2

!CALL RLMV (X, IIND, INDIND, IRSP, B, IRANK=IRANK, AEMAX=AEMAX, &

ITER=ITER, NRMISS=NRMISS)!

CALL UMACH (2, NOUT)RLABEL(1) = ’B =’CLABEL(1) = ’NONE’CALL WRRRL (’ ’, B, RLABEL, CLABEL, 1, NCOEF, 1, FMT=’(F6.2)’)WRITE (NOUT,*) ’IRANK = ’, IRANKWRITE (NOUT,*) ’AEMAX = ’, AEMAXWRITE (NOUT,*) ’ITER = ’, ITERWRITE (NOUT,*) ’NRMISS = ’, NRMISSEND

OutputB = 1.00 1.00IRANK = 2AEMAX = 1.00000ITER = 3NRMISS = 0

例:LMV(least max value, minimax)による多重線形回帰(p.335)

IMSL Fortran Stat

1ˆmax i ii n

y y£ £

- を 小にする

Page 119: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

119

www.vnij.comCh. 3 相関

Correlation

1. 相関行列 (correlation matrix)– 相関– 共分散行列 (covariance matrix)– 偏相関係数 (partial correlations)– 相関行列のロバスト推定 (M-estimate)

2. 分割表の相関測度(correlation measure)– r x c 分割表 (contingency table)– 4分相関係数 (tetrachoric correlation)

3. 分類変数を伴う二分変数 (dichotomous variable)

4. 順位(rank)に基づく測度(measure)– Kendallの一致係数 (coefficient of concordance)– Kendallの順位相関係数τ

IMSL Fortran Stat

Page 120: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

120

www.vnij.comCh. 3 相関

Correlation

INTEGER LDCOV, LDINCD, LDX, NVARPARAMETER (LDCOV=5, LDINCD=1, LDX=150, NVAR=5)

!INTEGER INCD(LDINCD,1), NMISS, NOBS, NOUT, NROW, NVREAL COV(LDCOV,NVAR), SUMWT, X(LDX,NVAR), XMEAN(NVAR)

!CALL GDATA (3, X, NOBS, NV)

!CALL UMACH (2, NOUT)NROW = 50

!CALL CORVC (NVAR, X, COV, NROW=NROW, XMEAN=XMEAN, INCD=INCD,

& NOBS=NOBS, NMISS=NMISS, SUMWT=SUMWT)!

CALL WRRRN (’XMEAN’, XMEAN, 1, NVAR, 1, 0)CALL WRRRN (’COV’, COV)CALL WRIRN (’INCD’, INCD)WRITE (NOUT,*) ’ NOBS = ’, NOBS, ’ NMISS = ’, NMISS, ’ SUMWT = ’, &

SUMWTEND

OutputXMEAN

1 2 3 4 51.000 5.006 3.428 1.462 0.246

COV1 2 3 4 5

1 0.0000 0.0000 0.0000 0.0000 0.00002 0.0000 0.1242 0.0992 0.0164 0.01033 0.0000 0.0992 0.1437 0.0117 0.00934 0.0000 0.0164 0.0117 0.0302 0.00615 0.0000 0.0103 0.0093 0.0061 0.0111

INCD 50

NOBS = 50 NMISS = 0 SUMWT = 50.0000

例:分散、共分散、相関行列の計算

(p.343)

Fisherのiris データの 初の50個

(あやめ3種、50個づつ、花弁とがくの大きさ2種)

1

1

r

r

ni i i ki

k ni i i

f w xx

f w=

=

= åå

標本平均

標本共分散

標本相関行列

( )1

1

( )( )

1

ni i i ji j ki k

jk nii

f w x x x xs

f=

=

- -=

-

åå

jkjk

jj kk

sr

s s=

IMSL Fortran Stat

Page 121: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

121

www.vnij.comCh. 4 分散分析

Analysis of Variance

1. 一般解析– 1元配置モデル(one-way classification model)– 乱塊法(randomized block design)、2元配置法– 釣合い型不完備ブロック計画、格子計画(lattice design)– ラテン方格法(Latin square design)– 釣合い型n元配置モデル

– 釣合い型完備実験計画法(固定効果・変量効果・混合モデル)– ランダムなネストされたモデル

2. 平均と分散の推定– コントラスト(平均の線形結合)の推定と平方和– 同時信頼区間(simultaneous confidence interval)の計算

• Tukey, Tukey-Kramer, Dunn-Sidak, Bonferroni, Scheffe, Fisher’s LSDの方法

– Student-Newman-Keulsの多重比較検定(multiple comparison test)– 分散に関する信頼区間の計算

• GraybillあるいはBrossの方法

3. 釣合い型実験計画からデータを再配置

IMSL Fortran Stat

Page 122: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

122

www.vnij.comCh. 4 分散分析

Analysis of Variance

USE AONEW_INTINTEGER NGROUP, NOBSPARAMETER (NGROUP=3, NOBS=6)

!INTEGER IPRINT, NI(NGROUP)REAL AOV(15), Y(NOBS)

!DATA NI/3, 2, 1/DATA Y/101.0, 105.0, 94.0, 84.0, 88.0, 32.0/

!IPRINT = 3CALL AONEW (NI, Y, AOV, IPRINT=IPRINT)END

OutputDependent R-squared Adjusted Est. Std. Dev. Coefficient ofVariable (percent) R-squared of Model Error Mean Var. (percent)Y 98.028 96.714 4.83 84 5.751

* * * Analysis of Variance * * *Sum of Mean Prob. of

Source DF Squares Square Overall F Larger FAmong Groups 2 3480 1740.0 74.571 0.0028Within Groups 3 70 23.3Corrected Total 5 3550

Group StatisticsStandard

Group N Mean Deviation1 3 100 5.5682 2 86 2.8283 1 32 NaN

例:1元配置モデルの分析(p.394)

3タイプの植物6個の重量

yij = mi + eij i = 1, 2, ¼, k; j = 1, 2, ¼, ni

8810594

3284101

AberrantOff-TypeNormal

Type of Plant

IMSL Fortran Stat

Page 123: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

123

www.vnij.comCh. 5 カテゴリ・データと離散データの解析

Categorical and Discrete Data Analysis

1. 2元分割表(two-way contingency table)の統計量の計算– 2x2分割表の統計量

• Pearsonχ2 、χ2の 尤推定量、自由度、Yates係数、Fisherの正確な検定、φ、P、γ、Kendallのτb、Stuartのτc、SomerのD、積率係数、Spearmanの順位係数、GoodmanとKruskalのτ、不確定性係数、Kruskal-Wallis統計、その他

– r x c 分割表のχ2解析– 全体枚挙法(total enumeration method)による正確な計算– ネットワークアルゴリズムによるFisherの正確な計算

2. 対数線形モデル(log-linear model)3. 無作為検定(randomization test)

– 層別分割表のMantel-Haenszel統計

4. カテゴリデータ(categorical data)の解析– 一般化線形モデル

• ロジスティック、Probit、Poisson、Log-logその他のモデル

5. 重み付き 小2乗法分析

IMSL Fortran Stat

Page 124: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

124

www.vnij.comCh. 5 カテゴリ・データと離散データの解析

Categorical and Discrete Data Analysis

USE CTTWO_INTINTEGER IPRINT, LDCHIC, LDEXPE, LDSTAT, LDTABLPARAMETER (IPRINT=1, LDCHIC=3, LDEXPE=3, LDSTAT=24,

LDTABL=2)!

REAL CHICTR(LDCHIC,3), CHISQ(15), EXPECT(LDEXPE,3), &STAT(LDSTAT,5), TABLE(LDTABL,2)

!DATA TABLE/4, 1, 16, 21/

!CALL CTTWO (TABLE, EXPECT, CHICTR, CHISQ, STAT,

IPRINT=IPRINT)END

OutputTABLE

1 21 4.00 16.002 1.00 21.00

Expected valuesCol 1 Col 2 Marginal

Row 1 2.3810 17.6190 20.0000Row 2 2.6190 19.3810 22.0000Marginal 5.0000 37.0000 42.0000

Contributions to chi-squaredCol 1 Col 2 Total

Row 1 1.1010 0.1488 1.2497Row 2 1.0009 0.1353 1.1361Total 2.1018 0.2840 2.3858

CHISQ1

Pearson chi-squared 2.3858p-value 0.1224Degrees of freedom 1.0000Likelihood ratio 2.5099p-value 0.1131etc

STATStatistic Std err. Std err. 0 t-value p-value

Gamma 0.6800 0.3135 0.4395 1.5472 0.1218Kendall’s tau B 0.2383 0.1347 0.1540 1.5472 0.1218Stuart’s tau C 0.1542 0.0997 NaN 1.5472 0.1218Somers’ D row 0.1545 0.0999 0.0999 1.5472 0.1218etcYule’s Y 0.3923 0.2467 0.2385 1.6450 0.1000Ratio 5.2500 NaN NaN NaN NaNLog ratio 1.6582 1.1662 0.9540 1.7381 0.0822Linear trend -0.1545 0.1001 NaN -1.5446 0.1224Kappa 0.1600 0.1572 0.1600 1.0000 0.3173McNemar 13.2353 1.0000 NaN 0.0000 0.0003

例:母乳とミルクの幼児の歯の比較(p.483)2 x 2 分割表の統計量の計算

IMSL Fortran Stat

Page 125: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

125

www.vnij.comCh. 6 ノンパラメトリック統計

Nonparametric Statistics

1. 1標本又は配偶標本 (matched sample)– 位置の検定(location test)

• 符号検定 (sign test)• Wilcoxonの符号付き順位検定(signed rank test)

– 傾向の検定(trend test)• Noetherの検定

• Cox-Stuartの傾向の検定(trends test)– 同順位統計(tie statistics)

2. 2標本– Wilcoxonの順位和検定(rank sum test)– 包含検定(includance test)

3. 3つ以上の標本– 位置の1元配置検定

• Kruskal-Wallis検定• BhapkarのV検定

– 位置の2元配置検定• Friedman検定• CochranのQ検定

– 傾向の検定

IMSL Fortran Stat

Page 126: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

126

www.vnij.comCh. 6 ノンパラメトリック統計

Nonparametric Statistics

USE SIGNT_INTUSE UMACH_INTINTEGER NOBSREAL P, QPARAMETER (NOBS=19, P=0.75, Q=0.0)

!INTEGER NMISS, NOUT, NPOS, NTIEREAL PROB, X(NOBS)

!DATA X/92.0, 139.0, -6.0, 10.0, 81.0, -11.0, 45.0, -25.0, -4.0, &

22.0, 2.0, 41.0, 13.0, 8.0, 33.0, 45.0, -33.0, -45.0, -12.0/! Perform sign test

CALL SIGNT (X, Q, P, NPOS, NTIE, PROB, NMISS)! Print output

CALL UMACH (2, NOUT)WRITE (NOUT,99996) NPOSWRITE (NOUT,99997) NTIEWRITE (NOUT,99998) PROBWRITE (NOUT,99999) NMISS

!99996 FORMAT (’ Number of positive differences = ’, I2)99997 FORMAT (’ Number of ties = ’, I2)99998 FORMAT (’ PROB = ’, F6.3)99999 FORMAT (’ Number of missing values = ’, I2)

END

OutputNumber of positive differences = 12Number of ties = 0PROB = 0.923Number of missing values = 0

例:符号検定 (p.593)帰無仮説 H0 : Pr(X £ Q) £ P

対立仮説 H1 : Pr(X £ Q) > P

PROBが0.95以下なので、5%の優位水準でH0(少なくとも75%(P=0.75)は負(Q=0))を棄却できない。

IMSL Fortran Stat

Page 127: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

127

www.vnij.comCh. 7 適合度検定とランダム度の検定

Test of Goodness of Fit and Randomness

1. 特定の分布に対する適合度検定(goodness-of-fit)– Kolmogorov-Smirnov検定

– χ2検定

– Shapiro-WilkのW検定

– Lillieforsの検定

– Mardiaの検定

2. 2標本検定– Kolmogorov-Smirnov検定

3. ランダム度の検定– 連検定(run test)– ペア検定(Goodの系列検定 serial test)– d2検定

– 3重項検定(triplet test)

IMSL Fortran Stat

Page 128: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

128

www.vnij.comCh. 7 適合度検定とランダム度の検定

Test of Goodness of Fit and Randomness

USE RNSET_INTUSE RNUN_INTUSE KSONE_INTUSE UMACH_INTINTEGER ISEED, NOBSPARAMETER (ISEED=123457, NOBS=100)

!INTEGER NMISS, NOUTREAL CDF, PDIF(6), X(100)EXTERNAL CDF

! Generate the sampleCALL RNSET (ISEED)CALL RNUN (X)

!CALL KSONE (CDF, X, PDIF, NMISS=NMISS)

!CALL UMACH (2, NOUT)WRITE (NOUT,99999) NMISS, PDIF

99999 FORMAT (’NMISS = ’, I4/’ D = ’, F8.4/’ D+ = ’, F8.4/ &’ D- = ’, F8.4/’ Z = ’, F8.4/’ Prob greater D’, &’ one-sided = ’, F8.4/’ Prob greater D two-sided = ’, &F8.4)

END

! The CDF!

REAL FUNCTION CDF (X)REAL X

!REAL AMEAN, STDPARAMETER (AMEAN=0.50, STD=0.2886751)

!REAL ANORDF, ZEXTERNAL ANORDF

! StandardizeZ = (X-AMEAN)/STD

! Get the probabilityCDF = ANORDF(Z)

!RETURNEND

OutputNMISS = 0D = 0.1471D+ = 0.0810D- = 0.1471Z = 1.4708Prob greater D one-sided = 0.0132Prob greater D two-sided = 0.0264

例:Kolmogorov-Smirnovの適合度検定(p.635) 100個の乱数は平均0.5, 分散1/12の正規分布か?

IMSL Fortran Stat

Page 129: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

129

www.vnij.comCh. 8 時系列解析と予測Time Series Analysis and Forecasting

1. 一般的な手法

– 時系列データの変換• Box-Cox変換

• 時系列の差分 (backward difference)

– 標本相関関数(sample correlation function)• 自己相関関数(autocorrelation function)• 偏自己相関関数(partial autocorrelation function)• 相互相関関数(cross-correlation function)• 多チャンネル相互相関関数

IMSL Fortran Stat

( ) 10

ln ( ) 0

t

t

t

ZX

Z

lxl

lx l

ì + -¹ï= í

ï + =îl = POWER, x = SHIFT

observations {Zt}

Page 130: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

130

www.vnij.comCh. 8 時系列解析と予測Time Series Analysis and Forecasting

2. 時間領域での手法(time domain methodology)– 非季節的(nonseasonal)時系列モデルの推定

• ARMA(Autoregressive Moving Average)パラメータのモーメント法、 小2乗法および 尤推定法による推定

• GARCH(Generalized Autoregressive Conditional Heteroskedastic)モデルの推定

• Wienerの予測演算子

• Box-Jenkins予測

– 伝達関数(transfer function)モデル• インパルス反応と雑音列の推定

• パラメータの予備的推定

– 多チャンネル時系列• パラメータの 小2乗予測

• 多チャンネルのWienerフィルタの予測

• Kalmanフィルタ

– 自動的なモデルの選択• 単変量・多変量のARモデルの自動選択(AIC, FPEを 小に)

– Bayes季節調整モデル

– 適なコントローラの設計– 不適合度の検定(lack of fit test)

IMSL Fortran Stat

Page 131: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

131

www.vnij.comCh. 8 時系列解析と予測Time Series Analysis and Forecasting

3. 周波数領域での手法(frequency domain methodology)– 平滑化関数(smoothing function)

• Dirichletの核関数(kernel function)• Fejérの核関数

– スペクトル密度の推定(spectral density estimation)• ARMAの合理的スペクトル推定

• 高速Fourier変換を用いたピリオドグラム(periodogram)の計算

• 時系列データあるいはピリオドグラムが与えられたスペクトル・ウィンドウを使用

• 時系列データあるいはピリオドグラムが与えられた重み系列を使用

– 相互スペクトル密度の推定(cross-spectral density estimation)• 高速Fourier変換を用いた相互ピリオドグラムの計算

• 時系列データあるいはピリオドグラムが与えられたスペクトル・ウィンドウを使用

• 時系列データあるいはピリオドグラムが与えられた重み系列を使用

IMSL Fortran Stat

Page 132: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

132

www.vnij.comCh. 8 時系列解析と予測Time Series Analysis and Forecasting

*AR*ARMA*SEA*E*F*FFT*P*D

AutoregressiveAutoregressive, Moving AverageSeasonal Modeling EstimationForecastFast Fourier TransformPeriodogramData

*P**UNI**MUL**FPE**MM**LS**BJ**SW**WE*

PreliminaryUnivariateMultivariateFinal Prediction ErrorMethod of MomentsLeast-SquaresBox-JenkinsSpectral WindowWeights

BAY*NS*TF*MAX*M*P*CP*S*AUTO*CS*

BayesianNonseasonal ARMATransfer FunctionMaximum LikelihoodMultichannelPeriodogramCross PeriodogramSpectral DensityAutomatic Model SelectionCross-Spectral Density

AbbreviationMeaning

Naming Conventions in Chapter 8

f(B)(Wt - m) = q(B)At t Î Z, BkWt=Wt-k backward shift op.

f(B) = 1 - f1B - f2B2 - ¼ - fpBp p ³ 0q(B) = 1 - q1B - q2B2 - ¼ - qqBq q ³ 0

自己回帰移動平均モデルARMA(p,q) autoregressive moving average

ARIMA(p,d,q) autoregressive integrated moving averageWt = ÑdZt : d 階の階差 Ñd = (1 - B)d

2 ln( ) 2AIC L p= - × +

,

2( 1) ˆ( 1)p pN pFPEN p

s+ +=

- -

単変量時系列データ (p ラグ)

Akaike’s Information Criterion 赤池の情報量基準

Final Prediction Error終予測誤差

多変量時系列データ( ) ( )( )ˆ( ) ln( ) 2 ln 2 1pAIC N p K N p p= - × S + × + - +

11ˆ

11

m

p pm

pmNMFPE

pmN

+æ ö+ç ÷è ø= S

+æ ö-ç ÷è ø

IMSL Fortran Stat

Page 133: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

133

www.vnij.comCh. 8 時系列解析と予測Time Series Analysis and Forecasting

• GARCH(p,q)(Generalized Autoregressive Conditional Heteroskedastic)

時系列データ {wt} に対する時間とともに変化する標準偏差、相関をモデル化し予測するので、このようなモデルを必要とするあらゆる分野、例えば金融工学、品質管理、環境工学、生体システムなどにも応用可能です。

ここで zt は標準正規分布に従う乱数で、β(GARCH係数)およびα(ARCH係数)は

尤法によりパラメータを推定する。長さmの対数尤度log-likelihood は

赤池の情報量基準(Akaike Information Criterion) AIC = - 2 log (L) + 2(p+q+1)この 小値問題(α、β、σの制限付き)をSpellucciの非線形 適化の手法で解く。

2 2 2 2

1 1

,

t t tp q

t i t i i t ii i

w z

w

s

s s b s a- -= =

=

= + +å å

( )

2

1

2 1 1

0 2 , 0, 0 and

1.

i ip q p q

i ii i i

SIG MAX

x i

s b a

b a+ +

= = =

< < ³ ³

= + <å å å

IMSL Fortran Stat

2 2 2

1 1

2 2 2 2

1 1

1 1log( ) log(2 ) / log ,2 2 2

.

m m

t t tt t

p q

t i t i i t ii i

mL y

where w

p s s

s s b s a

= =

- -= =

= - - -

= + +

å å

å å

Page 134: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

134

www.vnij.comCh. 8 時系列解析と予測Time Series Analysis and Forecasting

IMSL Fortran Stat

例:Kalmanフィルターと移動平均モデル (PV-WAVEによる表示例)

Page 135: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

135

www.vnij.comCh. 8 時系列解析と予測Time Series Analysis and Forecasting

例:1770年から100年間の太陽黒点数のデータ:ARMAモデルのパラメータを正確な尤推定法(maximum likelihood estimation)で計算 (p.742)

USE MAX_ARMA_INTUSE GDATA_INTUSE NSPE_INTIMPLICIT NONE

! SPECIFICATIONS FOR LOCAL VARIABLESINTEGER I, NOUTREAL(KIND(1E0)) PAR(2), PMA(1), AVAR, FREAL(KIND(1E0)) X(176,2)REAL(KIND(1E0)) CONSTINTEGER NCOL, NROW

! Get Wolfer Sunspot DataCALL GDATA(2,X,NROW,NCOL)

! Get preliminary PAR and PMA estimatesCALL NSPE(X(22:,2),CONST, PAR, PMA, AVAR, NOBS=100)

! TEST #1: DOCUMENT EXAMPLECALL MAX_ARMA(x(22:,2), PAR, PMA, nobs=100, MAXIT=12000, &

AVAR=AVAR, F=F)

WRITE(*,99994) SIZE(PAR)WRITE (NOUT,99996) (PAR(I),I=1,SIZE(PAR))WRITE(NOUT,99995) SIZE(PMA)WRITE(NOUT,99996) (PMA(I),I=1,SIZE(PMA))WRITE(NOUT,*) "-2*LN(MAXIMUM LOG LIKELIHOOD) = ", FWRITE(NOUT,*) "WHITE NOISE VARIANCE = ", AVAR

99994 FORMAT(//1H ,5('-'),2X,'FINAL PAR(I)',2X,'NPAR=',I3,2X,5('-'))99995 FORMAT(//1H ,5('-'),2X,'FINAL PMA(I)',2X,'NPMA =',I3,2X,5('-'))99996 FORMAT(1H ,5E20.10,/(1H ,5E20.10))

ENDOutput----- FINAL PAR(I) NPAR= 2 -----

0.1224243164E+01 -0.5600821972E+00----- FINAL PMA(I) NPMA = 1 -----

-0.3847315013E+00-2*LN(MAXIMUM LOG LIKELIHOOD) = 539.5841WHITE NOISE VARIANCE = 214.50406

1 2 11.22 0.56 0.38t t t t tw w w a am - - -- = - + +1 1 2 2 1 1t t t t tw w w a am f f q- - -- = + - +

IMSL Fortran Stat

Page 136: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

136

www.vnij.comCh. 8 時系列解析と予測Time Series Analysis and Forecasting

use bay_sea_intuse wrrrl_int

! SPECIFICATIONS FOR PARAMETERSinteger, parameter :: focast=12, nobs=132, nyears=11real(kind(1e0)) :: b(nobs)

! U.S. Labor Statistics ! unemployment for women ! over 20 years of age

data b/ 2968D0,3009D0,2962D0,2774D0,3040D0,3165D0,& !1991

integer :: ireal(kind(1e0)) :: abicmreal(kind(1e0)) :: trend(nobs+focast), season(nobs+focast)real(kind(1e0)) :: irreg(nobs), smooth(nobs+focast)character :: months(focast)*3, years(nyears+2)*4

call bay_sea(b, trend=trend, seasonal=season, &comp=irreg, abic=abicm, iorder=2, isorder=1,&nfocast=focast, smoothed=smooth)

write(nout,*) 'ABIC = ', abicmcall wrrrl('TREND with last 12 values forecasted',trend,months, &

years, nra=12,nca=nyears+1,lda=12)call wrrrl('SEASONAL with last 12 values forecasted',season,&

months,years, nra=12,nca=nyears+1, lda=12)call wrrrl('IRREGULAR=Original data-TREND-SEASONAL',irreg, &

months,years, nra=12,nca=nyears,lda=12)end

例:Bayesian季節調整モデル。1991-2001の米国での20歳以上

無職女性数のデータからトレンドを予測。 (p.805)

赤池(1980)のBayesianアルゴリズム:

Wt = Tt + St + At

IMSL Fortran Stat

Page 137: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

137

www.vnij.comCh. 多変量解析

Multivariate Analysis

• 多変量解析各個体についていくつかの変量の組が観測されている時、そのデータを解析すること。

個体の数N, 変量の数p, 観測値(データ行列)X=[x1,,,xp]

• 主成分分析xの変動を出来るだけ少数の変換された変数y(主成分)で説明することが目的。 y = Ax

• 因子分析多くの変量の変動を少数の仮説的変量(因子)で説明すること。 主成分分析とは異なり、数学的モデル( x = μ+Λf + U )を基礎とする。 (μ 母平均、f 共通因子、Λ factor loading行列、U 独自因子)

• 判別分析N個の個体がいくつかのグループに分類されている時、ある個体がどのグループに属するか判定するのが目的

• クラスター分析多くの観測データを類似性あるいは差異性を表す測度を用いていくつかの群(クラスター)に分類すること。 判別分析のようにあらかじめ分類方式が決まっているものではない。

• 相関分析2つのベクトル変量 x1=(x1,,,xk), x2=(xk+1,,,xp) の間の相関関係を簡明に表現するのが目的。

• 回帰分析互いに相関のあるいくつかの(目的)変量Yを少数の(説明)変量Xで説明することを目的とする。 Y = XΞ + U , Ξ 未知の母数行列(回帰行列)、U 誤差行列

• 分散分析N元配置モデル等において各個体について複数の変量が観測される場合のデータに対するモデル。

IMSL Fortran Stat

Page 138: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

138

www.vnij.comCh. 9 共分散構造と因子分析Covariance Structures and Factor Analysis

1. 主成分分析(principal component analysis)

2. 因子分析(factor analysis)– 因子抽出(extraction)– 因子回転(rotation)と要約(summarization)– 因子得点(score)– 残差相関(residual correlation)

3. 正準相関分析(canonical correlation analysis)– 独立性の検定

– 正準相関分析

IMSL Fortran Stat

Page 139: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

139

www.vnij.comCh. 9 共分散構造と因子分析Covariance Structures and Factor Analysis

Steps in a Factor Analysis

Step 1 Calculate Covariance (Correlation) Matrixroutine CORVC (page 314)

Step 2 Initial Factor ExtractionFACTR, page 909

Step 3 Factor Rotation

Prior Info.

Promax or Procrustesrotation FPRMX, page 927

No Prior Info.

Promax or Procrustes rotation FPRMX, page 927

Direct oblimin rotationFDOBL, page 924

Harris-kaiser rotationFHARR, page 932

Generalized Crawford-Ferguson rotation FGCRF, page 936

Prior Info.

Procrustesrotation FOPCS, page 921

No Prior Info.

Orthomax rotation FROTA, page 918

ObliqueOrthogonal

Step 3a

Image Transformation Matrix

FIMAG, page 940

Step 3b

Factor VariancesFRVAR, page 942

Step 4

Factor CoefficientsFCOEF, page 944

Step 5

Factor ScoresFSCOR, page 949

IMSL Fortran Stat

(Models : Least square, Maximum likelihood, Image analysis, Alpha factor analysis)

(Models : Regression, Least square, Barlett, Anderson-Rubin, Image score)

Page 140: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

140

www.vnij.comCh. 10 判別分析

Discriminant Analysis

1. パラメトリック判別– 1次または2次の判別関数分析

– Fisherの線形判別関数分析(discriminant score)

2. ノンパラメトリック判別– k 近傍判別分析(nearest neighbor discrimination)

IMSL Fortran Stat

Page 141: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

141

www.vnij.comCh. 10 判別分析

Discriminant Analysis

USE GDATA_INTUSE DSCRM_INTINTEGER IGRP, IMTH, IPRINT, LDCLAS, LDCOEF, LDCOV, LDD2, &

LDPROB, LDX, LDXMEA, NCOL, NGROUP, NROW, NVARPARAMETER (IGRP=1, IMTH=3, IPRINT=1, LDCOV=4, NCOL=5, &

NGROUP=3, NROW=150, NVAR=4, LDCLAS=NGROUP, &LDCOEF=NGROUP, LDD2=NGROUP, LDPROB=NROW, &LDX=NROW, LDXMEA=NGROUP)

!INTEGER ICLASS(NROW), IND(4), NI(NGROUP), NOBS, NRMISS, NVREAL CLASS(LDCLAS,NGROUP), COEF(LDCOEF,NVAR+1), &

COV(LDCOV,LDCOV,1), D2(LDD2,NGROUP), PRIOR(3), &PROB(LDPROB,NGROUP), STAT(6+2*NGROUP), X(LDX,5), &XMEAN(LDXMEA,NVAR)

!DATA IND/2, 3, 4, 5/, PRIOR/0.3333333, 0.3333333, 0.3333333/

!CALL GDATA (3, X, NOBS, NV)

!CALL DSCRM (NROW, NVAR, X, NGROUP, COV, COEF, ICLASS, PROB, &

CLASS, D2, STAT, IND=IND, IGRP=IGRP, IMTH=IMTH, &IPRINT=IPRINT, PRIOR=PRIOR, NI=NI, XMEAN=XMEAN, &NRMISS=NRMISS)

!END

例:線形判別(p.985) Fisherのirisデータ

IMSL Fortran Stat

OutputPRIOR, the prior probabilities

1 2 30.3333 0.3333 0.3333

NI, the number in each group1 2 3

50 50 50

CLASS, the classification table1 2 3

1 50.00 0.00 0.002 0.00 48.00 2.003 0.00 1.00 49.00

D2, the distances between group means1 2 3

1 0.0 89.9 179.42 89.9 0.0 17.23 179.4 17.2 0.0

Mahalanobisの距離D2の計算 (S:共分散行列)

( ) ( )2 1T

ij i j i jD x x S x x-= - -

Page 142: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

142

www.vnij.comCh. 11 クラスタ分析

Cluster Analysis

1. 階層的(hierarchical)クラスタ分析– 距離(distance)、類似度行列(similarity matrix)の計算

– 階層的クラスタ分析

2. K-means法– 次の距離の和を 小にする分類を見つける

( )2

, ,1 1 1

i

im im im im

npK

v v v j v j iji j m

f w x xf d= = =

= -å å å

IMSL Fortran Stat

νim : 観測値行列xのi番のクラスタのm番の観測値の行番号

ni : xの中のグループiの行数 f : 観測の頻度 w : 重み

δ:観測値がNaNの場合はゼロ、それ以外は1 K :クラスタ数

:グループiの変量jの平均値 p : 観測値の数

ijx

ijx

Page 143: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

143

www.vnij.comCh. 11 クラスタ分析

Cluster Analysis

USE IMSL_LIBRARIESINTEGER IPRINT, K, LDCM, LDSWT, LDX, NCOL, NOBS, NV, NVAR

PARAMETER (IPRINT=0, K=3, NCOL=5, NOBS=150, NV=5, NVAR=4, &LDCM=K, LDSWT=K, LDX=NOBS)

!INTEGER IC(NOBS), IND(NVAR), NC(K), NXCOL, NXROWREAL CM(K,NVAR), SWT(K,NVAR), WSS(K), X(NOBS,NV)

!DATA IND/2, 3, 4, 5/

!CALL GDATA (3, X, NXROW, NXCOL)

! Copy the cluster seeds into CMCALL SCOPY (NVAR, X(1:,2), LDX, CM(1:,1), LDCM)CALL SCOPY (NVAR, X(51:,2), LDX, CM(2:,1), LDCM)CALL SCOPY (NVAR, X(101:,2), LDX, CM(3:,1), LDCM)

!CALL KMEAN (X, CM, SWT, IC, NC, WSS, IND=IND)

!CALL WRRRN (’CM’, CM)CALL WRRRN (’SWT’, SWT)CALL WRIRN (’IC’, IC, 1, NOBS, 1)CALL WRIRN (’NC’, NC, 1, K, 1)CALL WRRRN (’WSS’, WSS, 1, K, 1)END

OutputCM

1 2 3 41 5.006 3.428 1.462 0.2462 5.902 2.748 4.394 1.4343 6.850 3.074 5.742 2.071

SWT1 2 3 4

1 50.00 50.00 50.00 50.002 62.00 62.00 62.00 62.003 38.00 38.00 38.00 38.00

IC1 2 3 ,,, 50 51 52 53 54 55 ,,, 149 1501 1 1 1 2 2 3 2 2 3 2

NC1 2 3

50 62 38

WSS1 2 3

15.15 39.82 23.88

例:K-means (p.1021) Fisherのirisデータ

あやめ3種、50個づつ、花弁とがくの大きさ2種

IMSL Fortran Stat

Page 144: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

144

www.vnij.comCh. 11 クラスタ分析

Cluster Analysis

IMSL Fortran Stat

例:クラスタ分析の例(JMSLによる表示)

HR図(Hertzsprung-Russell diagram)

Page 145: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

145

www.vnij.comCh. 12 標本分析

Sampling

1. 単純(simple)および層別(stratified)ランダムサンプリング

– 比例(proportion)の計算

– 比推定(ratio estimate)、回帰推定(regression estimate)

2. 1段クラスタサンプリング

3. 2段サンプリング

4. 単純ランダムサンプリング

5. 層別ランダムサンプリング

IMSL Fortran Stat

Page 146: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

146

www.vnij.comCh. 12 標本分析

Sampling

USE UMACH_INTUSE SMPPR_INTINTEGER NINT, NOUT, NPOP, NSAMPREAL CONPER, SQRT, STAT(10), STDP, STDTINTRINSIC SQRT

!CALL UMACH (2, NOUT)NINT = 38NSAMP = 200NPOP = 3042CONPER = 0.0CALL SMPPR (NINT, NSAMP, NPOP, CONPER, STAT)STDP = SQRT(STAT(3))STDT = SQRT(STAT(4))WRITE (NOUT,99999) STAT(1), STAT(2), STDP, STDT, STAT(9)

99999 FORMAT (’ Estimate of proportion bad: ’, F5.3, /,&’ Estimate of total bad: ’, F5.0, /, &’ Standard deviation estimate, proportion: ’, F5.3, /, &’ Standard deviation estimate, total: ’, F5.1, /, &’ Coefficient of variation: ’, F5.1, &’%’)

END

OutputEstimate of proportion bad: 0.190Estimate of total bad: 578.Standard deviation estimate, proportion: 0.027Standard deviation estimate, total: 81.8Coefficient of variation: 14.1%

例:名前・住所のデータ3042から200を単純無作為抽出、38が住所の間違い。全部でい

くつ間違いデータがあるか。(p.1027)

IMSL Fortran Stat

Page 147: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

147

www.vnij.comCh. 13 生存解析Survival Analysis, Life Testing and Reliability

1. 生存解析(survival analysis)– Kaplan-Meier(積極限法 Product-limit)の生存率の推定

– Greenwoodの分散の推定

– Turnbullの一般化Kaplan-Meier推定

– Coxの比例ハザードモデル(proportional hazards model)

– 一般化線形モデル(generalized linear model)– 様々なパラメトリックモデル

2. 保険数理表(actuarial table)– コーホート生命表(cohort life table)

IMSL Fortran Stat

Page 148: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

148

www.vnij.comCh. 13 生存解析Survival Analysis, Life Testing and Reliability

USE KAPMR_INTUSE WRRRL_INTUSE UMACH_INTINTEGER ICEN, IFRQ, IGRP, IRT, ISRT,

LDSPRO, LDX, NCOL, NOBSPARAMETER (ICEN=3, IFRQ=4, IGRP=2, IRT=1,

ISRT=0, LDSPRO=33, &LDX=33, NCOL=6, NOBS=33)

!INTEGER NOUT, NRMISSREAL SPROB(LDSPRO,2), X(LDX,NCOL)CHARACTER XLABEL(7)*6, YLABEL(1)*6EQUIVALENCE (X(1,5), SPROB)

!DATA XLABEL/’OBS’, ’TIME’, ’GROUP’, ’CENSOR’,

’FREQ’, ’S-HAT’, &’SE’/

DATA YLABEL/’NUMBER’/DATA X/143, 164, 188, 190, 192, 206, 209, 213, 216,

220, 227, &230, 234, 246, 265, 304, 216, 244, 142, 156, 163,

198, 205, &232, 233, 239, 240, 261, 280, 296, 323, 204, 344,

18*5, &15*7, 16*0, 2*1, 13*0, 4*1, 2, 20*1, 2, 4, 3*1, 2*2,

3*1, &66*0/

CALL KAPMR (X, IRT, SPROB, IFRQ=IFRQ, ICEN=ICEN, IGRP=IGRP, &NRMISS=NRMISS)

!CALL WRRRL (’X/SPROB’, X, YLABEL, XLABEL, FMT=’(W10.6)’)CALL UMACH (2, NOUT)WRITE (NOUT,’(//’’ NRMISS = ’’, I5)’) NRMISSEND

OutputX/SPROB

OBS TIME GROUP CENSOR FREQ S-HAT SE1 143.000 5.000 0.000 1.000 0.947 0.0512 164.000 5.000 0.000 1.000 0.895 0.0703 188.000 5.000 0.000 2.000 0.789 0.0944 190.000 5.000 0.000 1.000 0.737 0.101

31 323.000 7.000 0.000 1.000 0.051 0.04932 204.000 7.000 1.000 1.000 0.810 0.08633 344.000 7.000 1.000 1.000 NaN NaN

NRMISS = 0

例:Kaplan-Meierの生存率の推定(p.1065)

ラットのがんと2つの治療法別の生存率

IMSL Fortran Stat

Page 149: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

149

www.vnij.comCh. 14 多次元尺度法

Multidimensional Scaling

1. 多次元尺度法(MDS)のルーチン

– 個人差MDSの計算

2. ユーティリティルーチン

– 距離行列(distance matrix)の計算

– 入力データの標準化

– 非類似性行列(dissimilarity matrix)から正規化された積率行列(2重中心 double center)を計算

– 初期推定

– 様々なストレス基準

IMSL Fortran Stat

Page 150: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

150

www.vnij.comCh. 14 多次元尺度法

Multidimensional Scaling

USE PGOPT_INTUSE MSIDV_INTINTEGER IPRINT, ISTRS, LDCFL, LDW, LNX, NDIM, NSTIM,

NSUB, IPAGEPARAMETER (IPRINT=2, ISTRS=1, LDCFL=10, LNX=45,

NDIM=2, &NSTIM=10, NSUB=1)

!REAL A(1), B(1), CFL(LDCFL,NDIM), DIST(45), RESID(LNX), &

STRS(1), STRSS, WT(1), X(45,1)!

DATA X/4, 22, 13, 8, 15, 12, 34, 31, 11, 24, 6, 21, 29, 18, 39, &10, 9, 27, 25, 42, 20, 35, 32, 16, 28, 2, 44, 43, 36, 30, &19, 33, 17, 45, 40, 7, 3, 5, 26, 23, 37, 14, 1, 41, 38/

! Call PGOPT to set page length for! the plotting

IPAGE =50CALL PGOPT (-2, IPAGE)

!CALL MSIDV (NSTIM, X, NDIM, DIST, CFL, A, B, WT, STRS, &

STRSS, RESID, ISTRS=ISTRS, IPRINT=IPRINT)!

END

OutputInitial parameter estimates.

CFL1 2

1 -0.762 0.1242 -0.451 -0.3493 0.496 0.0734 -0.151 0.6515 1.237 0.3926 -1.114 0.5887 -1.077 -0.5668 1.461 0.0349 1.321 -0.614

10 -0.961 -0.333

Iteration historyIter Source Stress Stress change Maximum Change1 INIT STRSS 0.3755E-021 CONFIG STRSS 0.3399E-02 0.3559E-03 0.8062E-1 LINES STRSS 0.3142E-02 0.2564E-03 0.8062E2 CONFIG STRSS 0.3068E-02 0.7382E-04 0.1022E-2 LINES STRSS 0.3047E-02 0.2156E-04 0.1022E

例:米国の都市間の距離のランク(対称非類似性行列)からユークリッド距離モデルで2次元の尺度を計算(p.1134)

IMSL Fortran Stat

Page 151: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

151

www.vnij.comCh. 15 密度関数とハザードの推定

Density and Hazard Estimation

1. 密度関数の推定– 罰則付き尤度法(penalized likelihood)による推定

– 核関数法(kernel function)による推定

– 高速Fourier変換によるGauss核関数の推定

– 点推定(point estimate)

2. ハザード比(hazard rate)の各関数法による尤度推定(likelihood estimate)

– 平滑化パラメータ(smoothing parameter)の推定

– ハザード関数の推定

IMSL Fortran Stat

Page 152: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

152

www.vnij.comCh. 15 密度関数とハザードの推定

Density and Hazard Estimation

PARAMETER (NOBS=10, NODE=13)INTEGER NOUTREAL BNDS(2), DENS(NODE), STAT(4), X(NOBS)

!DATA BNDS/-3., 3./DATA X/-.9471, -.7065, -.2933, -.1169, .2217, .4425,

.4919, .5752, 1.1439, 1.3589/!

CALL DESPL (X, NODE, BNDS, DENS, STAT)!

CALL UMACH (2, NOUT)WRITE (NOUT,’(’’ DENS = ’’,9F7.4, /, 9X, 4F7.4)’) DENSWRITE (NOUT,’(’’ Log-likelihood term = ’’, F7.3, /, && ’’ Log-penalty term = ’’, F7.3, /, && ’’ Mean = ’’, F7.3, /, && ’’ Variance = ’’, F7.3)’) STATEND

OutputDENS = 0.0000 0.0014 0.0356 0.1111 0.2132 0.3040 0.3575

0.3565 0.2947 0.1986 0.0986 0.0288 0.0000Log-likelihood term = -11.968Log-penalty term = -1.303Mean = 0.217Variance = 1.042

例:1次元ランダムサンプルデータから区間線形密度関数を推定(p.1173)

IMSL Fortran Stat

αはペナルティ係数(10がデフォルト)

Page 153: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

153

www.vnij.comCh. 16 ラインプリンタ作図

Line Printer Graphics

• 現在はほとんど使われていない

• 旧バージョンとの互換性のために残されているルーチン– ヒストグラム

– 散布図

– ボックスプロット

– 幹葉図

– 累積分布図

– 2分木図

IMSL Fortran Stat

Fisher Iris Data:: * **

2.4 -: * 2: **** * * * *: * * *:: **** * *: **** * *: *2 * *: 32 * 2* * * *:: * *

P 1.6 -: * * * *e : * 5** 2**t : * 2 *2* *a :l : * 3222***

: ** * * *w : * **i : 2 2 * **d :t :h 0.8 -:

:: *:: *: * 3** *: 23* *:* 24875* *:: * 22

0.0 -::...............................................................: : : : : : :1. 2. 3. 4. 5. 6. 7.

Petal length

散布図の例: Fisherのあ

やめの花びらのデータ

Page 154: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

154

www.vnij.com Ch. 17 確率分布関数とその逆関数Probability Distribution Functions and Inverses(特殊関数SFunのCh.11も参照)

1. 離散変数– 二項分布– 超幾何分布– Poisson分布

2. 連続変数– Kolmogorov-Smirnovの片側統計分布関数– Kolmogorov-Smirnovの両側統計分布関数– 標準正規(Gauss)分布

– ベータ分布– 2変量正規分布– χ2 分布– F 分布– Γ 分布– Studentのt 分布

3. 一般の連続確率変数

IMSL Fortran Stat

Page 155: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

155

www.vnij.comCh. 18 乱数生成

Random Number Generation

1. ユーティリティ– 一様乱数発生器のタイプの選択など– シードの初期化など– シャッフルされた乱数発生器の初期化など– GFSR乱数発生器の初期化など– 複数の独立な乱数列生成のためのシード

2. 一様分布(1,0)– 次ページ参照(擬似乱数、準乱数)– ユーザ指定の乱数生成

3. 単変量離散分布– 二項分布– 一般離散分布– 幾何分布– 超幾何分布– 対数分布– 負の二項分布– Poisson分布– 離散一様分布

4. 単変量連続分布– ベータ分布– χ2 分布– Cauchy分布

– 指数分布– 2つの指数分布– Γ 分布

– 一般連続分布– 対数正規分布– 標準正規分布– 安定分布– Studentのt 分布

– 三角分布– Von Mises分布– Weibull分布

IMSL Fortran Stat

Page 156: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

156

www.vnij.comCh. 18 乱数生成

Random Number Generation

5. 多変量分布– 直交行列と相関行列– 多変量分布(data-based multivariate)– 多項分布– 多変量正規分布– 円、球上の分布– 2元配置表(two-way table)

6. 順序統計(order statistics)– 正規分布– 一様分布

7. 確率過程– ARMAモデル– 非斉次(nonhomogeneous)Poisson過程

8. 標本と順列– ランダム順列(permutation)– ランダム標本(sampling)

9. 低不適合度の列(LDS : Low Discrepancy Sequence)– シャッフルされたFaure列 (準乱数)

IMSL Fortran Stat

Page 157: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

157

www.vnij.com Ch. 18 乱数生成Random Number Generation(擬似乱数 pseudo random number)

1. 乗算合同法 (multiplicative congruential generator)xi = cxi-1 mod(231-1) (周期 231-2≒2.15x109)

c = 75 = 16807 (minimal standard generator)c = 2x72x4053103 = 397204094c = 23x118838297 = 950706376

2. シャッフルされた乗算合同法

3. 伏見正則(1990)のGFSR (Generalized Feedback Shift Register) xi = xi-1563 .XOR. xi-96 (周期 2521≒6.86x10156)

– 初期化に時間がかかるが、乗算合同法と同程度の速さ

IMSL Fortran Stat

Page 158: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

158

www.vnij.com Ch. 18 乱数生成Random Number Generation(準乱数 quasi random number)

use faure_intimplicit nonetype (s_imsl_faure), pointer :: statereal(kind(1e0)) :: x(3)integer,parameter :: ndim=3integer :: k

! CREATE THE STRUCTURE THAT HOLDS! THE STATE OF THE SEQUENCE.

call faure_init(ndim, state)! GET THE NEXT POINT IN THE SEQUENCE

do k=1,5call faure_next(state, x)write(*,'(3F15.3)') x(1), x(2) , x(3)

enddo! FREE DATA ITEMS STORED IN! state STRUCTURE

call faure_free(state)end

Output0.334 0.493 0.0640.667 0.826 0.3970.778 0.270 0.1750.111 0.604 0.5090.445 0.937 0.842

例:3次元(単位立方体)中での一般化Faure列を5点求める。(p.1406)

IMSL Fortran Stat

Page 159: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

159

www.vnij.comCh. 18 乱数生成

Random Number Generation

USE UMACH_INTUSE RNISD_INT

INTEGER ISEED1, ISEED2, ISEED3, ISEED4, NOUT!

CALL UMACH (2, NOUT)ISEED1 = 123457CALL RNISD (ISEED1, ISEED2)CALL RNISD (ISEED2, ISEED2)CALL RNISD (ISEED2, ISEED3)CALL RNISD (ISEED3, ISEED3)CALL RNISD (ISEED3, ISEED4)CALL RNISD (ISEED4, ISEED4)WRITE (NOUT,99999) ISEED1, ISEED2, ISEED3, ISEED4

!99999 FORMAT (’ Seeds for four separate streams: ’, /, ’ ’, 4I11)!

ENDOutputSeeds for four separate streams:

123457 2016130173 85016329 979156171

例:4つのオーバーラップしない乱数列を発生 (p.1315)

これらのシードによる4つの乱数列は200,000個離れており、オーバーラップは無い。

IMSL Fortran Stat

Page 160: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

160

www.vnij.comCh. 18 乱数生成他社の乱数との比較:(Intelのホームページより)

IMSLの乱数は Intel MKLやNAGと比べて精度が高く、計算速度はNAGの2倍

速い結果が出ている。

Performance Comparison: Black-Scholes Option-Pricing Modelhttp://www.intel.com/cd/software/products/asmo-na/eng/220054.htm

IMSL Fortran Stat

Relative Error Ratio

Call Put Call Put Call Put16.7291 7.2184 0.0050 -0.0005

0.030 -0.007 4.55 -5.0016.7366 7.2164 -0.0025 0.0015

-0.015 0.021 -2.27 15.0016.7330 7.2178 0.0011 0.0001

0.007 0.001 1 116.7394 7.2162 -0.0053 0.0017

-0.032 0.024 -4.82 17.00

Exact Value 16.7341 7.2179 (Intel Xeon)

Option Value(Exact Value)

Absolute Error(Relative Error %)

Time(seconds)

Speedup(timesfaster)

7.246 4.09

MCG59 7.625 3.88

Library BasicGenerator

IMSL* MinimalStandard

Intel® MKL MCG31m1

29.63 1

NAG* Original 61.306 0.48

Page 161: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

161

www.vnij.comCh. 19 ユーティリティ

Utilities (Math Ch.11も参照)

1. 印刷

2. ソート

3. 並べ替え

4. 検索

5. 文字列処理

6. 時間、日付、バージョン

7. 幾つかの標準データセットの読み込み

IMSL Fortran Stat

Page 162: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL Fortran ライブラリ

並列処理と性能

Page 163: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

163

www.vnij.com

並列処理の形態

IMSL Fortran

Memory Memory Memory Memory Memory

P P P P P P P

Single Thread 共有メモリ並列 分散メモリ並列

逐次処理

逐次処理

並列可能

Thread 生成

同期処理

Multi Thread Message Passing

同期

時間

Page 164: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

164

www.vnij.com

IMSL Fortranライブラリのパラレル化

• IMSL Fortranは2種類のパラレル化に対応– OpenMP

• BLASの並列処理による上位ルーチンの並列化

• IMSL自身でもOpenMPディレクティブにより並列化。線形方程式、固有値解析、変換などが対応

• OSによって対応しているルーチンは異なる

• ユーザプログラムはパラレル化を意識してプログラミングする必要はない

– MPI• 行列操作関数、線形方程式、固有値解析、変換などが対応

• 全てのOS版のIMSL Fortranライブラリで同一のルーチンが対応

• ユーザープログラムでMPIの指定が必要、ただし通常のMPIの指定に比べて非常に簡便

IMSL Fortran

Page 165: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

165

www.vnij.com

OpenMPのパラレル化方法

1. コンパイル・リンク時にOpenMP用の環境変数を指定

$F90 -o 実行モジュール名 $F90FLAGS ソース名 $LINK_F90_SMP(スタティックリンク時は$LINK_F90_STATIC_SMP)

2. 実行時に環境変数で使用スレッド数を指定

setenv OMP_NUM_THREADS スレッド数

※ ユーザープログラムでは特にパラレル化を意識する必要はない

IMSL Fortran

Page 166: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

166

www.vnij.com

OpenMP対応ルーチン

• 多くの数学・統計ルーチンが直にOpenMPディレクティブを用いて並列化をサポートしています。

– 線形システム– 固有システム解析– 補間と近似– 微分方程式– 変換– 適化– 行列とベクトル演算– 回帰– カテゴリデータと離散データの解析– 時系列解析と予測– 共分散と因子分析– 判別分析– 多次元尺度法– 乱数

IMSL Fortran

Page 167: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

167

www.vnij.com

C IMSL Name: L2TRG/DL2TRG (Single/Double precision version)C Purpose: Compute the LU factorization of a real general matrix.

SUBROUTINE DL2TRG (N, A, LDA, FAC, LDFAC, IPVT, SCALE)・

C update columns j of L and j+1 of AC$OMP PARALLEL DO PRIVATE(I) IF(N - J .GT. 29)

DO 30 I=J + 1, NFAC(I,J) = FAC(I,J)*TFAC(I,J+1) = FAC(I,J+1) + T1*FAC(I,J)

30 CONTINUEC$OMP END PARALLEL DO・

IMSL ソース内での

OpenMPパラレル化指定例

IMSL Fortran

Page 168: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

168

www.vnij.comExample of OpenMP Performance(SGI Altix : Itanium2, Red Hat Linux)

LIN_SOL_LSQ : solves linear equation by least square method.LQRRR : QR decomposition using Householder transformationsDLQRRV :Least square solution using Householder transformation

IMSL Fortran Library 5.0 OpenMP Performanceon SGI Altix 3700 data size = 1000x1000

0

5

10

15

20

25

30

1 2 4 8

CPU

Ela

psed

Tim

e (

sec)

lin_sol_lsq

l2rrr(lqrrr)

dlqrrv

IMSL Fortran Library 5.0 OpenMP Performanceon SGI Altix 3700 data size = 1000x1000

0

2

4

6

8

10

12

1 2 4 8

CPU

Spe

edu

p ra

tio t

o 1

CP

U

lin_sol_lsq

l2rrr(lqrrr)

dlqrrv

IMSL Fortran

Page 169: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

169

www.vnij.comExample of OpenMP Performance(Fujitsu PRIMEPOWER : UltraSPARC, Solaris)

LFTRG:LU factorization of real general matrix

LQRRV:Least square solution using Householder transformation

LFTCG:LU factorization of complex general matrix

IMSL Fortran

4

8

LFTRG

LQRRV

LFTCG

0.00

1.00

2.00

3.00

4.00

5.00

6.00

7.00

LFTRG

LQRRV

LFTCG

(Matrix Size 1000x1000)

Page 170: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

170

www.vnij.com

MPIのパラレル化方法

1. IMSLのMPIインターフェースルーチン、MP_SETUP等を

使用して並列処理のソースを作成

2. コンパイル・リンク$MPIF90 -o 実行モジュール名 $F90FLAGS ソース名 $LINK_MPI

3. 実行

mpirun -np プロセス数 ./実行モジュール名

IMSL Fortran

Page 171: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

171

www.vnij.com

MPI対応ルーチン一覧

オペレータ・関数名 機能

PARALLEL_NONNEGATIVE_LSQ 小2乗法による連立方程式の解 (Ax=b, x≧0)

PARALLEL_BOUNDED_LSQ 小2乗法による連立方程式の解 (Ax=b, α≦x≦ β).x. 行列とベクトルまたは行列の積 (AB)

.tx. 転置行列とベクトルまたは行列の積 (ATB)

.xt. 行列とベクトルまたは行列の転置の積 (ABT)

.hx. エルミート共役行列とベクトルまたは行列の積 (AHB)

.xh. ベクトルまたは行列とエルミート共役行列の積 (ABH)

.i. 逆行列あるいは一般化逆行列の計算 (A-1)

.ix. 逆行列とベクトルまたは行列の積 (A-1B)

.xi. ベクトルまたは行列と逆行列の積 (AB-1)CHOL 行列のコレスキー分解を計算COND 行列の条件数を計算DET 行列式を計算EIG (一般化)固有値・固有ベクトルを計算FFT_BOX 複素または実の離散フーリエ変換IFFT_BOX 複素または実の離散逆フーリエ変換NORM 階数1、又は階数2の配列のノルムを計算ORTH 階数2、又は階数3の配列の直交化RANK 階数2、又は階数3の階数を計算SVD 行列の特異値分解SCALAPACK_READ ファイルから行列データを読み込み、2次元のBLOCK-CYCLIC形式に変換するSCALAPACK_WRITE ファイルに行列データを書く

IMSL Fortran

Page 172: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

172

www.vnij.com IMSL ソース内でのMPIパラレル化指定例

! SUBROUTINE d_parallel_nonnegative_lsq (A,B,X,RNORM,W,INDEX,IPART,IOPT)! COMPUTE AN N-VECTOR, X, THAT SOLVES THE LEAST SQUARES PROBLEM! A * X = B SUBJECT TO X >= 0

USE MPI_SETUP_INT

! Send local parts of dual from nodes to root for summary output.DO L=1,MP_NPROCS-1

IF(MP_RANK == L) THENCALL MPI_SEND(W(IPART(1,L+1):),max(0,IPART(2,L+1)-IPART(1,L+1)+1), &

MPI_DOUBLE_PRECISION ,0,L,MP_LIBRARY_WORLD,IERROR)END IFIF(MP_RANK == 0) THEN

CALL MPI_RECV(W(IPART(1,L+1):),max(0,IPART(2,L+1)-IPART(1,L+1)+1), &MPI_DOUBLE_PRECISION , L, L, MP_LIBRARY_WORLD, STATUS, IERROR)

END IFEND DO

! Broadcast the dual to all nodes at the end.IF(MP_NPROCS > 1) &

CALL MPI_BCAST(W, N, MPI_DOUBLE_PRECISION , 0, MP_LIBRARY_WORLD, IERROR)

IMSL Fortran

Page 173: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

173

www.vnij.com

IMSL Fortran MPI使用方法(1/3)

• IMSLのMPIインターフェースルーチンMP_SETUPで簡単にMPIパラレルを開始&終了

– MP_SETUP() MPIを初期化

MPI_NODE_INTを初期化

– MP_SETUP(n)• MPI_SETUP()と同様の処理

• n x nのマトリックスを作成し、各ノードでマトリックスの乗算を計算して各ノードの性能を測定

• ノード番号を性能の良い順に配列MPI_NODE_PRIORITYに設定 → ユーザープログラム上で性能の良いノードをコントロール可能

– MP_SETUP(‘Final’)• IMSLのエラーメッセージを出力

• MPIの終了処理

IMSL Fortran

Page 174: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

174

www.vnij.com

IMSL Fortran MPI使用方法(2/3)

IMSLのMPIインターフェースモジュール:– MPI_SETUP_INT

MP_SETUPを呼びだす時、指定が必要なモジュールMPI_NODE_INTを呼び出している

– MPI_NODE_INT MPI_SETUP_INTから呼び出されるため、MPI_SETUP_INTを使用しているとき

は特にユーザープログラムで指定する必要はない。下記変数を定義している

MP_SETUP() または MP_SETUP(n) で下記のデータを設定する

IMSL Fortran

MODULE MPI_NODE_INTINTEGER, ALLOCATABLE :: MPI_NODE_PRIORITY(:) ノードの実行優先順序

INTEGER, SAVE :: MP_LIBRARY_WORLD = huge(1) MPIのコミュニケータ

LOGICAL, SAVE :: MPI_ROOT_WORKS = .TRUE. ROOTノードでの実行の有無

INTEGER, SAVE :: MP_RANK = 0, MP_NPROCS =1 ノード番号、全ノード数

END MODULE

Page 175: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

175

www.vnij.com

IMSL Fortran MPI使用方法(3/3)

ボックスデータタイプの使用:データを3次元に割り当て、3次元目はCPU数で割って、各CPUに割り当てる。

例:Dimension (6,6,4) A, B, Xx = A .ix. B

特にプログラム上で指定しない限りは、 4CPUで実行した場合はルートノードのデータが次のように自動的に各スレッドに割り付けられ、各ノードで.ix.の計算が行われる。

A(*,*, 4:4)B(*,*, 4:4)X(*,*, 4:4)

A(*,*, 3:3)B(*,*, 3:3)X(*,*, 3:3)

A(*,*, 2:2)B(*,*, 2:2)X(*,*, 2:2)

A(*,*,1:1)B(*,*,1:1)X(*,*,1:1)

変数

3210MP_RANK

※MP_RANK=スレッドのランク番号

計算終了後、結果はルートノードに送られ、ルート以外のノードの結果データエリアには 1 がセットされる

IMSL Fortran

Page 176: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

176

www.vnij.com

MPI例題

use linear_operators 例:MATH User’s Guide P.1468 use mpi_setup_intimplicit none

integer, parameter :: n=32, nr=4real(kind(1e0)) :: one=1e0real(kind(1e0)), dimension(n, n, nr) :: A, b, x, err(nr)

MP_NPROCS=MP_SETUP() → MPIの初期化、MPI_NODE_INTA = rand(A); b=rand(b) 設定、並列処理開始x = A .ix. B → ボックスデータを各スレッドに割り付け: 計算結果はルートノードに送られるMP_NPROCS=MP_SETUP(‘Final’) → MPI終了、メッセージの確認:

その他の例題は別紙参照

n=32

n=32 A,b,x

IMSL Fortran

Page 177: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

177

www.vnij.comMPI Performance(TITECH TSUBAME)(Sun X4600 Opteron SuSE Linux)

IMSL Fortran 5.0 MPI PerformanceTITECH Tsubame, Sun X4600 Cluster

AMD Opteron, SuSE Linux, Data size 500x500x256

1

10

100

1000

2 4 8 16 32 64 128 256

CPU

Ela

psed

tim

e (se

c)

det

cond

eig

.hx.

.x.

orth

rank

svd

norm

IMSL Fortran Library MPI Performance

AMD Opteron SuSE Linux, Data size 500x500x256

0

10

20

30

40

50

60

70

80

90

2 4 8 16 32 64 128 256

CPU

Spe

edu

p ra

tio t

o 2

CP

U det

cond

eig

.hx.

.x.

orth

rank

svd

Page 178: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

178

www.vnij.com

IMSL Fortran 6.0 MPI PerformanceIntel Xeon cluster (4x2 Xeon dual core)

Windows CCS 2003, IVF 10.0, MKLEigenvalue analysis

0

20

40

60

80

100

120

1 2 4 8

Proc

Ela

pse

d T

ime (se

c)

500x500x8

1000x1000x8

IMSL Fortran 6.0 MPI PerformanceIntel Xeon cluster (4x2 Xeon dual core)

Windows CCS 2003, IVF 10.0, MKLEigenvalue analysis

0

1

2

3

4

5

6

7

1 2 4 8

Proc

Speed

up r

atio

to 1

core

500x500x8

1000x1000x8

IMSL MPI 並列処理性能例Windows CCS system

Page 179: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

179

www.vnij.com

ScaLAPACKユーティリティ

• ScaLAPACKユーティリティ– ScaLAPACK_READ 行列データを読み込み、Block-cyclic形式に変換

– ScaLAPACK_WRITE Block-cyclic形式のデータを行列データとしてファイルに書き出す

• モジュールファイル– ScaLAPACK_Support 下のモジュールの全体

• ScaLAPACK_int ScaLAPACKインターフェース

• PBLAS_int 並列BLAS,PBLASのインターフェース

• BLACS_int BLACSへのインターフェース

• Tools_int 補助ルーチンへのインターフェース

• LAPACK_int LAPACKへのインターフェース

• ScaLAPACK_IO_int ScaLAPACK_READ,ScaLAPACK_WRITEルーチンの全インターフェース

• MPI_Node_int MPIコミュニケータモジュール

IMSL Fortran

Page 180: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

180

www.vnij.com

IMSL C ライブラリ (CNL)

• 1990年にFortranライブラリをベースにファーストリリース。

• MATHとSTAT

• 各関数毎に単精度版と倍精度版。

• 一部ルーチンはベンダーライブラリとの置き換え可能

• オプション引数の使用

Page 181: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

181

www.vnij.com

IMSL Cライブラリ ディレクトリ構成

/usr/local/imsl||- license|-imsl -cnl600 –linux64 - bin

|- examples|- lib|- include|- help

IMSL C福岡工業大学

Page 182: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

182

www.vnij.com

IMSL Cライブラリ環境設定

環境設定はFortranと共通

C シェルユーザ

source /usr/local/imsl/imsl.cshBシェルまたはKシェルユーザ

. /usr/local/imsl.sh• 環境変数の設定は、ログイン毎の自動セットアップをお

勧めします。– 下記ファイルに上記のコマンドを追加

• .cshrc (C shell)• .profile (sh, ksh).

IMSL Fortran,C福岡工業大学

Page 183: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

183

www.vnij.com

IMSL Cライブラリの環境変数

• $CTT_CC_COMPILER コンパイラバージョン• $CTT_EXAMPLES 例題のディレクトリ• $CTT_OS_VERSION OSバージョン• $CC Cコンパイラ• $CFLAGS Cのコンパイルオプション• $LINK_CNL_SHARED Cのリンクパス(Sharedリンク)• $LINK_CNL_STATIC Cのリンクパス(Staticリンク)• $LINK_CNL Cのリンクパス(デフォルト)• $VNI_LICENSE_NUMBER 製品のライセンス番号• $IMSLERRPATH Cのエラーメッセージ環境のパス

: 等

IMSL C

Page 184: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

184

www.vnij.com

IMSL Cライブラリのコンパイル・リンク

$CC -o <実行モジュール> $CFLAGS <メインソース> $LINK_CNL

$CFLAGS : IMSL Cのコンパイルオプションとインクルードパス

$LINK_CNL : IMSL Cライブラリへのリンクパス

ダイナミックリンクの時は$LINK_CNLスタティックリンクの時は$LINK_CNL_STATICを使用

IMSL C福岡工業大学

Page 185: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

185

www.vnij.com

IMSL Cライブラリ 例題

・$CNL_EXAMPLES/validate ディレクトリ

CNLに付属する例題

cmath.ccstat.c

MATH、 STAT双方の動作検証用プログラム

詳細は同ディレクトリのREADME参照

IMSL C

Page 186: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL C ライブラリ (CNL)v6.0 仕様

Page 187: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

187

www.vnij.com

IMSL C ライブラリ構成

• シェアード (WindowsではDLL) と スタティック

• C/MATH(数学)とC/STAT(統計)

IMSL C

Page 188: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

188

www.vnij.com

IMSL C ライブラリ命名規則

• C Math Libraryデータタイプ 接頭辞

単精度 imsl_f_倍精度 imsl_d_整数 imsl_i_単精度複素数 imsl_c_倍精度複素数 imsl_z_

• C Stat Libraryデータタイプ 接頭辞

単精度 imsls_f_倍精度 imsls_d_整数 imsls_i_

IMSL C

Page 189: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

189

www.vnij.com IMSL Cライブラリの

インクルードファイル

• インクルードファイルの使用方法 :• IMSLの関数を使用しているプログラムの先頭

に指定– C/MATH - #include <imsl.h>– C/STAT - #include <imsls.h>

IMSL C

Page 190: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

190

www.vnij.com

IMSL Cライブラリの引数規則

• オプション引数の使用

• 引数の 後は必ず0

オプション引数

例: 必須の引数 オプション引数の値

x=imsl_f_lin_sol_gen(n, a, b, IMSL_INVERSE, &p_inva, 0);

引数の 後は0

IMSL C

Page 191: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

191

www.vnij.com IMSL Cライブラリの

メモリーアロケーション

• 多くの関数での戻り値は結果の行列のポインタ– 関数はポインタを初期化して答をそこに格納する

• オプション引数

IMSL_RETURN_USER, float a[]– ユーザ提供の配列に答えが格納される。関数の

戻り値のポインタはユーザ提供の配列

IMSL C

Page 192: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

192

www.vnij.com IMSL Cライブラリの

メモリーアロケーション例

• lin_sol_gen(連立一次方程式 Ax=b の解を求める)

– ポインタにアドレスを返すfloat *x;float a[] = {…float b[] = {…x = imsl_f_lin_sol_gen (n, a, b, 0);

– ユーザ提供の行列に値を返すfloat x[3];float a[] = {…float b[] = {…Imsl_f_lin_sol_gen (n, a, b, IMSL_RETURN_USER, x, 0);

IMSL C

Page 193: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

193

www.vnij.com IMSL Cライブラリの

エラーハンドリング

IMSL C

根本的なエラー終了印字IMSL_TERMINAL

WARNINGと同じ。メッセージ

出力のタイミングが即時継続印字IMSL_WARNING_IMMEDI

ATEFATALと同じ。メッセージ出力

のタイミングが即時終了印字IMSL_FATAL_IMMEDIATE

プログラムを修正終了印字IMSL_FATAL

条件によってはプログラムを修正

継続印字IMSL_WARNINGアンダーフローの発生継続無IMSL_ALERT

エラーの可能性継続無IMSL_NOTE

エラーの内容プログラムの終了

メッセージの印字

エラーレベル

• 7種類のエラータイプ、各エラータイプごとにエラー後の処理のデフォルトを持つ

Page 194: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

194

www.vnij.com

IMSL Cエラーハンドリング関数(1/4)

#include <imsl.h>

void imsl_error_options (IMSL_SET_PRINT, Imsl_error_type, int setting, /*プリント制御の指定*/IMSL_SET_STOP, Imsl_error_type, int setting, /*ストップ制御の指定*/IMSL_SET_TRACEBACK, Imsl_error_type, int setting,

/*トレースバック設定*/IMSL_FULL_TRACEBACK, int setting, /*トレースバック設定2*/IMSL_GET_PRINT, Imsl_error_type, int *psetting,/*プリント制御の確認*/IMSL_GET_STOP, Imsl_error_type, int *psetting, /*ストップ制御の確認*/IMSL_GET_TRACEBACK, Imsl_error_type, int *psetting,

/*トレースバック制御の確認*/

IMSL C

Page 195: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

195

www.vnij.com

IMSL Cエラーハンドリング関数(2/4)

IMSL_SET_ERROR_FILE, FILE *file, /*エラー出力ファイルの指定*/IMSL_GET_ERROR_FILE, FILE **pfile,

/*エラー出力ファイルの確認*/IMSL_ERROR_MSG_PATH, char *path,

/*エラーメッセージファイルのパスの指定*/IMSL_ERROR_MSG_NAME, char *name,

/*エラーメッセージファイル名の指定*/IMSL_ERROR_PRINT_PROC, Imsl_error_print_proc print_proc,

/*ユーザ作成のエラープリント関数の指定*/IMSL_SET_SIGNAL_TRAPPING, int setting,

/*パラレル時の信号割り込みの指定*/0);

IMSL C

Page 196: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

196

www.vnij.com

IMSL Cエラーハンドリング関数(3/4)

<引数例>imsl_error_options

(IMSL_SET_PRINT, Imsl_error_type, int setting,0);Imsl_err_type 0(ゼロ。全タイプ)

IMSL_NOTE IMSL_ALERTIMSL_WARNING IMSL_WARNING_IMMEDIATEIMSL_FATAL IMSL_FATAL_IMMEDIATEIMSL_TERMINAL

int setting -1:変更なし 1:出力あり

0:出力なし 2:既定値にもどす

<例> FATALエラーの時処理を続行し、ALERTエラーの時メッセージを印字する

imsl_err_options(IMSL_SET_STOP, IMSL_FATAL, 0,IMSL_SET_PRINT, IMSL_ALERT, 1, 0);

IMSL C

Page 197: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

197

www.vnij.com

IMSL Cエラーハンドリング関数(4/4)

<使用例2>ユーザ作成のエラー出力関数を使用する。

imsl_error_options(IMSL_ERROR_PRINT_PROC, print_proc, 0);

void print_proc(Imsl_error type, long code, char *function_name)

{printf(“Error message type%d¥n”, type);printf(“Error code%d¥n”, code); printf(“Error function %s¥n”,function_name);printf(“%s¥n”,message);

}

IMSL C

Page 198: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

198

www.vnij.com

IMSL Cエラー情報の取得

●エラーコード取得関数

imsl_error_code( )

<使用例>

x = imsl_f_lin_sol_nonnegdef(n, a, b, 0);If (imsl_error_code() ==IMSL_NOT_NONNEG_DEFINITE)

{エラー処理

}

IMSL C

Page 199: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

199

www.vnij.com

IMSL Cエラーハンドリングの注意事項

Cライブラリのエラーハンドリングは、MATH、STATのルーチンで別々に処理される

<例>

MATHのルーチンに対するエラーハンドリング

#include <imsl.h>imsl_err_options (IMSL_SET_PRINT, …, 0);

STATのルーチンに対するエラーハンドリング

#include <imsls.h>imsls_err_options (IMSLS_SET_PRINT, …, 0);

IMSL C

Page 200: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

200

www.vnij.com

IMSL Cのマルチスレッドでの使用

• IMSL Cライブラリ は100%のスレッドセーフを保証

• POSIXスレッドと WIN32 スレッドをサポート– マルチスレッドのアプリケーションからCNLを呼ぶ場合、

IMSLの信号処理をオフにする

– 各スレッドそれぞれでIMSL Cエラーハンドラの オプション

をセット。

IMSL C

Page 201: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

201

www.vnij.com IMSL Cのマルチスレッドでのエラーハンドリング(1/3)

<例>複数スレッドでのエラー処理include <stdio.h> C/MATH Library User’s Guide P.823#include "imsl.h"void *ex1(void* arg);void *ex2(void* arg);void main( ){

pthread_t thread1; pthread_t thread2;

/* スレッド作成前にIMSLの信号処理をオフにする */imsl_error_options(IMSL_SET_SIGNAL_TRAPPING, 0, 0);

/* 2つのスレッドを作成 */if (pthread_create(&thread1, NULL ,ex1, (void *)NULL) != 0)

perror("pthread_create"), exit(1);if (pthread_create(&thread2, NULL ,ex2, (void *)NULL) != 0)perror("pthread_create"), exit(1);

(次ページに続く)

IMSL C

Page 202: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

202

www.vnij.com IMSL Cのマルチスレッドでのエラーハンドリング(2/3)

/*スレッドの終了待ち */ (前ページからの続き)

if (pthread_join(thread1, NULL) != 0)perror(“pthread_join”),exit(1);

if (pthread_join(thread2, NULL) != 0)perror("pthread_join"),exit(1);

}void *ex1(void* arg) {

float res; /* ターミナルエラーで終了しない */imsl_error_options(IMSL_SET_STOP, IMSL_TERMINAL, 0, 0); res = imsl_f_beta(-1.0, .5); /* 例として故意に誤った引数を指定 */

}void *ex2(void* arg)

{ float res; /* ターミナルエラーで終了しない・トレースバックの出力を指定 */imsl_error_options(IMSL_SET_STOP, IMSL_TERMINAL, 0,

IMSL_SET_TRACEBACK, IMSL_TERMINAL, 1, 0); res = imsl_f_beta(-1.0); /* 例として故意に誤った引数を指定 */

}

IMSL C

Page 203: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

203

www.vnij.com IMSL Cのマルチスレッドでのエラーハンドリング(3/3)

Output

*** TERMINAL Error from imsl_f_beta. Both "x" = -1.000000e+00 and "y" = *** 5.000000e-01 must be greater than zero. ← ex1のエラー

*** TERMINAL Error from imsl_f_gamma. The argument for the function can not *** be a negative integer. Argument “x” = -1.000000e+00.

↑ex2のエラー

Here is a traceback of the calls in reverse order. Error Type Error Code Routine ← ex2トレースバック

---------- ---------- -------IMSL_TERMINAL IMSL_NEGATIVE_INTEGER imsl_f_gamma

USER

※エラーのスレッドごとの出力順序は順不同。

IMSL C

Page 204: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

204

www.vnij.com

アンダーフローとオーバーフロー

アンダーフロー• IMSLライブラリはアンダーフローによって計算が影響されないように作成さ

れている

• システムはレジスタを0にする

• エラーはIMSL_ALERTレベル

オーバーフロー• IMSL のコードはオーバーフローを回避するように作成されている

• 発生時はプログラムミスのチェックが必要

• エラーはIMSL_FATALレベル

• エラーコード例:

IMSL_LARGE_ARG_OVERFLOWIMSL_ZERO_ARG_OVERFLOWIMSL_SMALL_ARG_OVERFLOW 等

IMSL Fortran,C

Page 205: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

205

www.vnij.com

欠測値

• IMSL Fortran と C の多くのルーチンは欠測値の取り扱いが可能

• 欠測値は “Not a Number” または NaN として特別な

値として取り扱う

• 実際の欠測値の値は、機種により異なる

– 次のサブルーチン・関数で参照可能• IMSL Fortran ライブラリ:AMACH または DMACH• IMSL C ライブラリ : imsl_f_machine

IMSL Fortran,C

Page 206: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

206

www.vnij.com

IMSL C 行列格納モード

• 一般モード 正方 n x n 行列

• 矩形モード m x n 行列

• 対称モード AT = Aのような正方 n x n 行列

• エルミートモード

AH = ATのような正方 n x n 行列

• 疎行列対応座標格納モード

疎行列の非ゼロ要素の座標と値

• 帯格納モード

非ゼロ要素が主対角項に近い m x n 行列

• 圧縮した疎の列(CSC)フォーマット

IMSL C

Page 207: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

207

www.vnij.com

サポートリソース: Cマニュアル

- 英語版4冊

『IMSL C Library V6.0 Function Catalog』

『User’s guide C Math Library』

『 User’s guide C Stat Library 』各2冊

- 日本語版2冊

『IMSL Cライブラリ V6.0関数カタログ』関数一覧

『IMSL C/Mathライブラリ V5.0日本語マニュアル』

『 IMSL C/Statライブラリ V5.0日本語マニュアル』各1冊

日本語マニュアルはCNL5.0英語ドキュメントの抜粋

各章の説明と主な関数の詳細

IMSL C

Page 208: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

208

www.vnij.com

IMSL C マニュアル構成

• 各章の構成– 各章の先頭にその章全体の説明と注意事項

– 1ルーチン毎に引数、オプション引数、注意事項、エラーメッセージ等の記述

– 全てのルーチンに1つ以上のプログラム例

• 巻末・参考資料

エラーハンドリング・複素数関数– Appendix A : References– Appendix B : Alphabetical Summary of Routines

IMSL C

Page 209: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

209

www.vnij.com

その他サポートリソース

• オンラインドキュメント(PDF・英語マニュアルと同じ)

http://www.vnij.com/products/imsl/documentation/index.html• TIPS データベース

http://www.vni.com/tech/imsl/tips.html• ホワイトペーパー

http://www.vni.com/company/whitepapers• Cross-language Technical Report (Calling Fortran from C,

Report # 8902)http://www.vni.com/tech/imsl/tn.html

IMSL Fortran,C

Page 210: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

210

www.vnij.com

サポート連絡先

下記お問い合わせフォームよりご連絡下さい。

http://www.vnij.com/forms/tech_sprt_request.html

緊急時はメール・電話・FAXでのお問い合わせも承ります。

日本ビジュアルニューメリックス㈱

• サポート時間 土日、祭日を除く 10:00 ~ 17:00• Phone Number (03)5211-7760• Fax Number (03)5211-7769• E-mail support@vnij.co.jp

Page 211: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL C ライブラリ

各章概要

Page 212: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

212

www.vnij.com

IMSL C Math

1章: 線形システム2章: 固有システム解析3章: 補間と近似4章: 求積5章: 微分方程式6章: 変換7章: 非線形方程式8章: 適化9章: 特殊関数10章: 統計と乱数生成11章:印刷関数12章:ユーティリティ

IMSL C

Page 213: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

213

www.vnij.com

IMSL C Stat

1章: 基本統計

2章: 回帰

3章: 相関と共分散

4章: 分散分析と実験計画法

5章: カテゴリデータと離散データの解析

6章: ノンパラメトリック統計

7章: 適合度の検定

8章: 時系列解析と予測

9章: 多変量解析

10章: 生存と信頼性解析

11章: 確率分布関数と逆関数12章: 乱数生成13章: ニューラルネットワーク14章: 印刷関数15章: ユーティリティ

IMSL C

Page 214: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

214

www.vnij.comCh. 1 線形システム

Linear Systems

1. 連立方程式の解法: Ax=b を解く

2. 行列の分解、逆行列、行列式の計算など– 様々なタイプの行列をカバー

– 実・複素、対称、正定値、帯・三角、一般・疎など

3. 反復解法– 小残差法(GMRES : Generalized Minimum Residual method)– 共役勾配法(CG : Conjugate Gradient method)

4. 線形 小2乗法と分解:– 線形 小2乗法、QR分解 Ax≅b を解く

– 特異値分解(SVD : Singular Value Decomposition)– Moore-Penroseの一般逆行列の計算

IMSL C Math

A+ = VS+ UT

A = USVT

( )1 11,1 ,, , , 0, , 0i iS diag s s+ - -=

Page 215: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

215

www.vnij.comCh. 1 線形システム

Linear Systems

IMSL C Math

#include <imsl.h>

main(){

int n = 3;float *x;float a[] = {1.0, 3.0, 3.0,

1.0, 3.0, 4.0,1.0, 4.0, 3.0};

float b[] = {1.0, 4.0, -1.0};/* Solve Ax = b for x */

x = imsl_f_lin_sol_gen (n, a, b, 0);/* Print x */

imsl_f_write_matrix ("Solution, x, of Ax = b", 1, 3, x, 0);}

OutputSolution, x, of Ax = b

1 2 3-2 -2 3

例:連立方程式の解法 (p.33) lin_sol_gen :

LU分解で Ax = b を解く。

Aは一般実行列。

その他の機能:

ATx = b を解く

Aの逆行列を求める

LU分解のみ行う

与えられたLUでxを求める

条件数L1の推定

x1 + 3x2 + 3x3 = 1x1 + 3x2 + 4x3 = 4x1 + 4x2 + 3x3 = -1

Page 216: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

216

www.vnij.comCh. 1 線形システム

Linear Systems

IMSL C Math

#include <imsl.h>void amultp (float*, float*);void precond (float*, float*);

main(){

float b[] = {10.0, 7.0, 45.0, 33.0, -34.0, 31.0};int n = 6;float *x;int maxit = 1000;x = imsl_f_lin_sol_gen_min_residual (n, amultp, b,

IMSL_MAX_ITER, &maxit,IMSL_PRECOND, precond,0);

imsl_f_write_matrix ("Solution, x, to Ax = b", 1, n, x, 0);printf ("¥nNumber of iterations taken = %d¥n", maxit);

}

/* Set z = Ap */void amultp (float *p, float *z){

static Imsl_f_sparse_elem a[] = {0, 0, 10.0,1, 1, 10.0,1, 2, -3.0,1, 3, -1.0,(略)

例:GMRES法による反復解法(p.101) 前処理行列 M=diag(A)

/* Solve Mz = r */void precond (float *r, float *z){

static float diagonal_inverse[] ={0.1, 0.1, 1.0/15.0, 0.1, 1.0, 1.0/6.0};

int n = 6;int i;

for (i=0; i<n; i++)z[i] = diagonal_inverse[i]*r[i];

}Output

Solution, x, to Ax = b1 2 3 4 5 61 2 3 4 5 6

Number of iterations taken = 5

Page 217: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

217

www.vnij.comCh. 1 線形システム

Linear Systems

IMSL C Math

#include <imsl.h>static void amultp (float*, float*);static void precond (float*, float*);static Imsl_f_sparse_elem *a;static int n = 2500;static int c = 50;static int nz;

void main(){(略)

/* Generate coefficient matrix *//* Set a predetermined answer and diagonal *//* Get right hand side *//* Solve with jacobi preconditioning */

x = imsl_f_lin_sol_def_cg (n, amultp, b,IMSL_MAX_ITER, &maxit, IMSL_JACOBI, diagonal,0);

/* Find max absolute error, print results *//* Solve same system, with different preconditioner */

x = imsl_f_lin_sol_def_cg (n, amultp, b,IMSL_MAX_ITER, &maxit, IMSL_PRECOND, precond,0);

printf ("iterations = %d, norm = %e¥n", maxit, norm);}

例:CG法による反復解法(p.107)

2つの前処理行列 :

(1) Jacobi : M=diag(A)

(2) Aの三重対角

Outputiterations = 115, norm = 1.382828e-05iterations = 75, norm = 7.319450e-05

Page 218: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

218

www.vnij.comCh. 1 線形システム

Linear Systems

IMSL C Math

#include <imsl.h>main() {

int nra = 4; int nca = 3;int ncon = 1; float *x; float a[] = {3.0, 2.0, 1.0,

4.0, 2.0, 1.0, 2.0, 2.0, 1.0, 1.0, 1.0, 1.0};

float b[] = {3.3, 2.3, 1.3, 1.0}; float c[] = {1.0, 1.0, 1.0}; float xlb[] = {0.0, 0.0, 0.0}; float xub[] = {0.5, 0.5, 0.5}; int con_type[] = {1}; float bc[] = {1.0};x = imsl_f_lin_lsq_lin_constraints (nra, nca, ncon, a, b, c,

bc, bc, con_type, xlb, xub, 0);imsl_f_write_matrix ("Solution", 1, nca, x, 0); }

OutputSolution

1 2 30.5 0.3 0.2

例:線形拘束のある 小2乗問題の解法 (p.119)Ax ≅ b

条件: bl ≤ Cx ≤ bu

xl ≤ x ≤ xu

アルゴリズム:R.Hanson (VNI社) のペナ

ルティ法

3x1 + 2x2 + x3 = 3.34x1 +2x2 + x3 = 2.22x1 + 2x2 + x3 = 1.3x1 + x2 + x3 = 1.0

Subject tox1 = x2 + x3 ≤ 10 ≤ x1 ≤ 0.50 ≤ x2 ≤ 0.50 ≤ x3 ≤ 0.5

Page 219: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

219

www.vnij.comCh. 2 固有システム解析

Eigensystem Analysis

1. 固有値と固有ベクトルの計算 Ax=λx2. 一般化固有値問題 Ax=λBx3. 様々なタイプの行列をカバー

– 実・複素、対称、正定値 など

IMSL C Math

Page 220: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

220

www.vnij.comCh. 2 固有システム解析

Eigensystem Analysis

IMSL C Math

#include <imsl.h>

main() {int n = 3;float a[] = {8.0, -1.0, -5.0,

-4.0, 4.0, -2.0,18.0, -5.0, -7.0};

f_complex *eval;f_complex *evec;

/* Compute eigenvalues of A */eval = imsl_f_eig_gen (n, a,

IMSL_VECTORS, &evec,0);

/* Print eigenvalues and eigenvectors */imsl_c_write_matrix ("Eigenvalues", 1, n, eval, 0);imsl_c_write_matrix ("Eigenvectors", n, n, evec, 0);

}

OutputEigenvalues

1 2 3( 2, 4) ( 2, -4) ( 1, 0)

Eigenvectors1 2 3

1 ( 0.3162, 0.3162) ( 0.3162, -0.3162) ( 0.4082, 0.0000)2 ( 0.0000, 0.6325) ( 0.0000, -0.6325) ( 0.8165, 0.0000)3 ( 0.6325, 0.0000) ( 0.6325, 0.0000) ( 0.4082, 0.0000)

例:固有値と固有ベクトルの計算(p.143)

eig_gen :

Ax=λx Aは一般実行列

Page 221: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

221

www.vnij.comCh. 2 固有システム解析

Eigensystem Analysis

IMSL C Math

#include <imsl.h>main() {

int n = 3; float a[] = {1.1, 1.2, 1.4,

1.2, 1.3, 1.5, 1.4, 1.5, 1.6};

float b[] = {2.0, 1.0, 0.0, 1.0, 2.0, 1.0, 0.0, 1.0, 2.0};

/* Solve for eigenvalues and eigenvectors */ eval = imsl_f_eig_symgen (n, a, b, IMSL_VECTORS, &evec,

0);/* Print eigenvalues and eigenvectors */

imsl_f_write_matrix ("Eigenvalues", 1, n, eval, 0); imsl_f_write_matrix ("Eigenvectors", n, n, evec, 0);

}OutputEigenvalues

1 2 3 1.386 -0.058 -0.003Eigenvectors

1 2 3 1 0.6431 -0.1147 -0.6817 2 -0.0224 -0.6872 0.7266 3 0.7655 0.7174 -0.0858

例:一般化固有値問題Ax=λBxの解法 (p.154)

A,Bは実対称、Bは正定値

Page 222: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

222

www.vnij.comCh. 3 補間と近似

Interpolation and Approximation

1. Cubic Spline– 補間、積分計算など

2. 小2乗近似と平滑化

3. 散布データ補間– 秋間浩のsurface fitting法(5次)

– radial base関数による 小2乗近似

IMSL C Math

Page 223: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

223

www.vnij.com

x

( )2

1

0 1

n m

i i j j ii j

w f a B x-

= =

é ù-ê ú

ë ûå å

IMSL C Math

例: Cubic Spline fit to noisy Least square Spline approximation routineImsl_f_spline_least_squares (p.221)

Default : min

( ) ( )1 1

, ,0 0

,n m

i i j j k ii j

F a w f a B x- -

= =

é ù= -ê ú

ë ûå å tt

Optimize knot locations : min

Ch. 3 補間と近似Interpolation and Approximation

Page 224: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

224

www.vnij.comCh. 4 求積

Quadrature

1. 1次元積分

2. 2次元積分

3. 多次元積分– Gaussの公式

– 一般化Faure列によるMonte Carlo法

4. 微分– 1次、2次,3次微分

5. Gaussの求積ルールGauss, Gauss-Radau, Gauss-Lobatto

f は2N未満のオーダーの多項式

( ) ( )b

af x w x dxò

( )( )

( ),

b h x

a g xf x y dy dxò ò

( )1

11 1, ,n

n

b b

n na af x x dx dxò ò

( ) ( ) ( )1

Nb

i iai

f x w x dx f x w=

=åò

( )( )( )( )( )

( ) ( ) ( )( )

( ) ( )

2

2

2

1 1, 1 Legendre

1/ 1- 1, 1 Chebyshev 1st kind

1 1, 1 Chebyshev 2nd kind

, Hermite

1 1 1, 1 Jacobi0, Generalized Laguerre

1/ cosh Hyperbolic cosine

x

x

w x

x

x

e

x xe x

x

a b

a

-

-

-

-

- -

-¥ ¥

+ - -¥

-¥ ¥

Interval Name

IMSL C Math

Page 225: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

225

www.vnij.comCh. 4 求積

Quadrature

IMSL C Math

#include <imsl.h>#include <math.h>

float fcn(int ndim, float x[]);

main(){

int k, ndim = 10;float q, a[10], b[10];

for (k = 0; k < ndim; k++) {a[k] = 0.0;b[k] = 1.0;

}

q = imsl_f_int_fcn_qmc (fcn, ndim, a, b, 0);printf ("integral=%10.3f¥n”, q);

}

float fcn (int ndim, float x[]){

int i, j;float prod, sum = 0.0, sign = -1.0;

for (i = 0; i < ndim; i++) {prod = 1.0;for (j = 0; j <= i; j++) {

prod *= x[j];}sum += sign * prod;sign = -sign;

}return sum;

}

Output

q = -0.333

例:準モンテカルロ法による積分(p.307)(n=10の場合の例)

QMC:Quasi-Monte Carlo法による求積。乱数列としてLow-discrepancyの一般化Faure列を

用いる。

( )1

1 1

0 01 1

1 11 13 2

niwi

j ni j

x d x d x= =

é ùæ ö- = - - -ê úç ÷è øê úë û

å Õò ò

Page 226: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

226

www.vnij.comCh. 5 微分方程式

Differential Equations

1. 常微分方程式の解 (ODE)– 初期値問題

• Runge-Kutta法、Adams-Gear法– 境界値問題

• 有限差分法

2. 微分代数式の解– Petzold-Gear法

3. 偏微分方程式の解 (PDE)– ムービンググリッドによる解法(1D)– 直線法(method of lines)による解法 ut = f(x, t, u, ux, uxx)

– 2次元Laplace, Poisson, Helmholtz 方程式の高速Poisson解法

IMSL C Math

( )1, 1, ,,..., ...ii Ni

dyy t y y i N

dtf¢ == =

( )2 2

2 2,u u cu f x y

x y¶ ¶¶ ¶

+ + =

( ) ( ) ( )1, , , , , , , , 0T

Ng t y y g t y y g t y y¢ ¢ ¢= =é ùë û

( ) 0, , , ,t L R

uu f u x t x x x t tt

¶º = < < >¶

Page 227: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

227

www.vnij.comCh. 5 微分方程式

Differential Equations

IMSL C Math

#include <imsl.h>

void fcn(int neq, float t, float y[], float yprime[]);

main(){

int neq = 2;float t = 0.0; /* Initial time */float tend; /* Final time */float y[2] = {1.0, 3.0}; /* Initial conditions */int k;int nstep;void *state;

/* Initialize the ODE solver */imsl_f_ode_runge_kutta_mgr(IMSL_ODE_INITIALIZE, &state,

IMSL_TOL, 0.0005,IMSL_NSTEP, &nstep,IMSL_NORM, 1,0);

printf("¥n Start End Density of Density of Number of" );printf("¥n Time Time Rabbits Foxes Steps¥n¥n");

for (k = 0; k < 10; k++) {tend = k + 1;imsl_f_ode_runge_kutta (neq, &t, tend, y, state, fcn);printf("%3d %12.3f %12.3f %12.3f %12d¥n", k, t, y[0], y[1], nstep);

}imsl_f_ode_runge_kutta_mgr(IMSL_ODE_RESET, &state, 0);

}

void fcn (int neq, float t, float y[], float yprime[]){

/* Density change rate for Rabbits: */yprime[0] = 2*y[0]*(1 - y[1]);

/* Density change rate for Foxes: */yprime[1] = -y[1]*(1 - y[0]);

}

例: 捕食-被食の関係式 (p.324)

Lotka-Volterra system :r’ = 2r-2rff’ = -f+rfr(0) = 1, f(0) = 3

r : ウサギの数

f : 狐の数

(JMSLによる表示)

Page 228: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

228

www.vnij.comCh. 5 微分方程式

Differential Equations

IMSL C Math

#include <imsl.h> #include <math.h>main() {

void cnut(int, float, float, float *, float *, float *, float *); /* other lines are omitted *//* Set breakpoints and initial conditions */

for (i = 0; i < nx; i++) { xbreak[i] = (float) i / (float) (nx - 1); y[i] = sin(pi * xbreak[i]); y[nx + i] = 0.0; deriv[i] = pi * cos(pi * xbreak[i]); deriv[nx + i] = 0.0;

}/* Initialize the solver */

tol = sqrt(imsl_f_machine(4)); imsl_f_pde_method_of_lines_mgr(IMSL_PDE_INITIALIZE, &state,

IMSL_TOL, tol, IMSL_INITIAL_VALUE_DERIVATIVE, deriv, 0);

while (j <= nstep) { j++; tend += 0.01;

/* Solve the problem */imsl_f_pde_method_of_lines(npdes, &t, tend, nx, xbreak, y,

state, fcnut, fcnbc);

/* Look at output at steps of 0.01 and compute errors */

for (i = 0; i < nx; i++) { error[i] = y[i] - sin(pi * xbreak[i]) *

cos(pi *tend); erru = imsl_f_max(erru, fabs(error[i]));

} }

printf("Maximum error in u(x,t) = %e¥n", erru);}

OutputMaximum error in u(x,t) = 6.228203e-04

例:弦の振動 utt = uxx(p.419)初期条件:u(x,0)=sin(πx)境界条件:両端固定

解:u(x,t)=sin(πx)cos(πt)

Page 229: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

229

www.vnij.comCh. 5 微分方程式

Differential Equations

IMSL C Math

#include <stdio.h>#include <math.h>#include "imsl.h"(略)imsl_d_pde_1d_mg_mgr (IMSL_PDE_INITIALIZE, &state,

IMSL_TIME_SMOOTHING, tau,IMSL_MAX_BDF_ORDER, max_bdf_order,IMSL_INITIAL_CONDITIONS, initial_conditions, 0);

fprintf (file1, "%f¥n", t0);tout = delta_t;do{

imsl_d_pde_1d_mg (npdes, ngrids, &t0, tout, u, xl,xr, state, pde_systems, boundary_conditions,IMSL_RELATIVE_TOLERANCE, rtol,IMSL_ABSOLUTE_TOLERANCE, atol, 0);

t0 = tout;if (t0 <= tend){

fprintf (file1, "%f¥n", tout);for (i = 0; i < npdes + 1; i++){

for (j = 0; j < ngrids; j++){

fprintf (file1, "%16.10f ", U (i, j));if (((j + 1) % 4) == 0)

fprintf (file1, "¥n");}fprintf (file1, "¥n");

}}tout = MIN ((tout + delta_t), tend);

} (略)

例:pde_1d_mgによる2つの波の干渉の計算(p.376) PV-WAVEで表示

( ) ( )( ) [ ]

( ) ( )( ) [ ]

100 ,100 ,

0.5 0.5,0 0.5

,0 0.5 1 10 , 0.3, 0.1 ,and

0,otherwise,

,0 0.5 1 10 0.1,0.3 ,and

0,otherwise,0 at both ends, t 0

t x

t x

u u uvv v uv

x tu x cos x x

v x cos x x

u v

p

p

= - -= -

- £ £ £ £

= + Î - -

=

= + Î

== = ³

Page 230: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

230

www.vnij.comCh. 6 変換

Transforms

1. 高速 Fourier 変換 (FFT)– 実・複素

– cos, sin 変換

– 2次元複素FFT

2. たたみ込みと相関

3. 逆Laplace 変換

IMSL C Math

Page 231: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

231

www.vnij.comCh. 6 変換

Transforms

IMSL C Math

#include "imsl.h" #include <math.h>#define NFLTR 5 #define NY 100

/* Define function */#define F1(A) exp(A) main() {

int i, k, nz; float fltr[NFLTR], fltrer, origer, total1, total2, twopi,

x, y[NY], *z, *noise;/* Set up the filter */

for (i = 0; i < NFLTR; i++) fltr[i] = 0.2;/* Set up y-vector for the nonperiodic case */

twopi = 2.0*imsl_f_constant ("Pi", 0); imsl_random_seed_set(1234579); noise = imsl_f_random_uniform(NY, 0);for (i = 0; i < NY; i++) {

x = (float)(i) / (NY - 1); y[i] = F1(x) + 0.5 *noise[i] - 0.25;

} /* Call the convolution routine for the

nonperiodic case. */z = imsl_f_convolution(NFLTR, fltr, NY, y, &nz, 0);

/* * Call test routines to check z & zhat here. Print results */for (i = 0; i < NY; i++) {

if (i >= NY-2)k = i - NY + 2;

else k = i + 2; x = (float)(i) / (float) (NY - 1); origer = fabs(y[i] - F1(x)); fltrer = fabs(z[i+2] - F1(x));

total1 += origer; total2 += fltrer;

} printf(" Average absolute error before filter: /*omitted */);

}OutputNonperiodic Case

x F1(x) Original Error Filtered Error 0.0000 1.0000 0.0811 0.3523

/* omitted */1.0000 2.7183 0.0154 1.1255 Average absolute error before filter: 0.12481 Average absolute error after filter: 0.06785

例:簡単なデジタルフィルター (p.457) 非周期的たたみ込みの計算

Page 232: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

232

www.vnij.comCh. 7 非線形方程式

Nonlinear Equations

1. 多項式のゼロ点– Jenkins-Traub法

2. 関数のゼロ点– Müller法

3. 非線形連立方程式の解– 修正Powellハイブリッド法

IMSL C Math

Page 233: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

233

www.vnij.comCh. 7 非線形方程式

Nonlinear Equations

IMSL C Math

#include <imsl.h>float fcn(float x);main() {

float xguess[ ] = {4.6, 0.0, -193.3};int nroot = 3;float eps = 1.0e-5;float err_abs = 1.0e-5;float err_rel = 1.0e-5;float eta = 1.0e-2;int max_itn = 100;float *x;

/* Solve fcn(x)=0 for x */x = imsl_f_zeros_fcn (fcn,

IMSL_XGUESS, xguess,IMSL_ERR_REL, err_rel,IMSL_ERR_ABS, err_abs,IMSL_ETA, eta,IMSL_EPS, eps,IMSL_NUM_ROOTS, nroot,IMSL_MAX_ITN, max_itn,0);

/* Print x */imsl_f_write_matrix ("x", 1, 3, x, 0);

}

float fcn(float x) {return x * x * x + 3.0 * x * x - 4.0 * x - 6.0;

}Output

x1 2 3

1.646 -1.000 -3.646

例:3次多項式の3つのゼロ点を求める。 (p.483) Müller’s method (空丸 ○ が初期推定値)

Plot of x3 + 3x2 - 4x - 6

Warning ErrorsIMSL_NO_CONVERGE_MAX_ITER Failure to converge within max_itn iterations for at least one of the nroot roots.

Page 234: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

234

www.vnij.comCh. 8 適化

Optimization

• 拘束の無い場合– 単変量関数

• 関数値のみを使う• 関数値と1回微分を使う

– 多変量関数• 準Newton法• 修正Levengerg-Marquardt法による非線形 小2乗

• 線形拘束の場合– MPSファイルの読み込みルーチン– Kroghのアクティブセット法による高速な線形計画法– 改定Simplex法による線形計画法– Powellの手法による2次計画法– Powellの一般の目的関数の 小化法– 修正Levengerg-Marquardt法による区間拘束のある場合の非線形 小2乗

• 非線形拘束の場合– 一般の非線形プログラミング解法(Spellucciの方法)

IMSL C Math

( )minnx

f xÎR

( )

1 1

min

subject to nx

f x

A x bÎ

=R

( )

( )( )

1

1

min

subject to 0 for 1, 2, ...,

0 for 1, ...,

nx

i

i

f x

g x i m

g x i m m

Î

= =

³ = +

R

min subject to n

Tl x u

x

l u

c x b A b

x x xÎ

£ £

£ £R

Page 235: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

235

www.vnij.comCh. 8 適化

Optimization

IMSL C Math

#include <stdio.h> #include <imsl.h>void main() {

int i, n=2; float *result, fx; static float rosbrk(int, float[]);

/* Minimize Rosenbrock function */result = imsl_f_min_uncon_multivar(rosbrk, n, 0); fx = rosbrk(n, result);

/* Print results */printf(" The solution is "); for (i = 0; i < n; i++) printf("%8.3f", result[i]); printf(“¥n¥n The function value is %8.3f¥n", fx);

} /* end of main */

static float rosbrk(int n, float x[]) {

float f1, f2;f1 = x[1] - x[0]*x[0]; f2 = 1.0 - x[0];return 100.0 * f1 * f1 + f2 * f2; }

/* end of function */OutputThe solution is 1.000 1.000The function value is 0.000

例:Rosenbrock関数 f(x) = 100(x2-x1

2)2 + (1-x1)2 の 小化(p.506) 初期推定 x=(-1.2,1.0)

Page 236: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

236

www.vnij.comCh. 8 適化

Optimization

IMSL C Math

#include <imsl.h>

main(){

int m = 4; /* constraints */int n = 6; /* variables */double a[ ] = {1.0, 1.0, 1.0, 0.0, 0.0, 0.0,

1.0, 1.0, 0.0, -1.0, 0.0, 0.0,1.0, 0.0, 0.0, 0.0, 1.0, 0.0,0.0, 1.0, 0.0, 0.0, 0.0, 1.0};

double b[ ] = {1.5, 0.5, 1.0, 1.0};double c[ ] = {-1.0, -3.0, 0.0, 0.0, 0.0, 0.0};double *x;

/* Solve the LP problem */

x = imsl_d_linear_programming (m, n, a, b, c, 0);/* Print x */

imsl_d_write_matrix ("x", 1, 6, x, 0);}

Outputx

1 2 3 4 5 60.5 1.0 0.0 1.0 0.5 0.0

例:線形計画法 (p.529)F.Krogh(VNI社)のActive set strategy法による高速解法ルーチン

min f(x) = -x1 - 3x2

subject to

x1+x2+x3 = 1.5

x1+x2 -x4 = 0.5

x1 +x5 = 1.0

x2 +x6 = 1.0

0≦xi for i = 1,,,6

min subject to n

Tl x u

x

l u

c x b A b

x x xÎ

£ £

£ £R

Page 237: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

237

www.vnij.com Ch. 8 適化 OptimizationNetlib benchmark problemshttp://www-fp.mcs.anl.gov/otc/Guide/TestProblems/LPtest/

IMSL C Library vs LSSOL (Fortran)

IMSL C library solves 100% but other LP can solve 60%

0.1

1.0

10.0

100.0

CAPRI

GRO

W7

ISRA

EL

SH

ARE1B

VTP_BAS

EB

RA

ND

YSC

ORPIO

NLO

TFI

SCSD

1E226

SCTAP1

BA

ND

MFIT

1D

SCFXM

1STAIR

STAN

DATA

AG

G3

AG

GAG

G2

ETA

MA

CR

OS

CSD

6FI

NN

ISSH

IP04S

SH

ELL

SCFXM

2G

FR

D-P

NC

STAN

DM

PS

GAN

GES

SH

IP04L

PIL

OT4

SH

IP08S

SIE

RRA

WO

OD

1PSH

IP12S

BN

L1S

HIP

08L

25FV47

CZPRO

BPE

RO

LDS

HIP

12L

PIL

OTN

OV

FIT

2D

BN

L2M

ARO

S-R

7

Rel

ativ

e Tim

e

IMSL Leading Dense LP Optimizer

IMSL C library performance is about 10 times faster than other

Page 238: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

238

www.vnij.comCh. 8 適化

Optimization

IMSL C Math

#include "imsl.h"main() {

void fcn(int, float *, float *); int neq = 2; int ncon = 2; int nvar = 5;float a[] = {1.0, 1.0, 1.0, 1.0, 1.0,

0.0, 0.0, 1.0, -2.0, -2.0}; float b[] = {5.0, -3.0}; float xlb[] = {0.0, 0.0, 0.0, 0.0, 0.0}; float xub[] = {10.0, 10.0, 10.0, 10.0, 10.0}; float *x;x = imsl_f_min_con_gen_lin(fcn, nvar, ncon, neq, a, b, xlb, xub,

0);imsl_f_write_matrix("Solution", 1, nvar, x, 0);

}void fcn(int n, float *x, float *f) {

*f = x[0]*x[0] + x[1]*x[1] + x[2]*x[2] + x[3]*x[3] + x[4]*x[4] - 2.0*x[1]*x[2] - 2.0*x[3] * x[4] - 2.0*x[0];

} OutputSolution 1 2 3 4 5 1 1 1 1 1

例:線形拘束のある一般の目的関数の 小化 (p.546) M.J.D.Powellの方法によ

る線形拘束問題の解法

min f(x) = x12+x2

2+x32+x4

2+x52

-2x2x3-2x4x5-2x1

subject to

x1+x2+x3+x4+x5 = 5

x3-2x4-2x5 = -3

0≦x≦10

Page 239: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

239

www.vnij.comCh. 8 適化

Optimization

IMSL C Math

include "imsl.h"#define M 2#define ME 1#define N 2void grad(int n, float x[], int iact, float result[]);void fcn(int n, float x[], int iact, float *result, int *ierr);void main(){int ibtype = 0;float *x, ans[2];static float xlb[N], xub[N];xlb[0] = xlb[1] = imsl_f_machine(8);xub[0] = xub[1] = imsl_f_machine(7);x = imsl_f_constrained_nlp(fcn, M, ME, N, ibtype, xlb, xub, 0);imsl_f_write_matrix ("The solution is", 1, N, x, 0);

}/* Himmelblau problem 1 */

void fcn(int n, float x[], int iact, float *result, int *ierr){float tmp1, tmp2;tmp1 = x[0] - 2.0e0;tmp2 = x[1] - 1.0e0;switch (iact) {case 0:*result = tmp1 * tmp1 + tmp2 * tmp2;break;

case 1:*result = x[0] - 2.0e0 * x[1] + 1.0e0;break;

例: P.SpellucciのSQP(sequential quadratic programming)法による非線形 適化 (p.563)

( ) ( ) ( )( )( )

2 21 2

1 1 2

22 1 2

min 2 1

subject to 2 1 02 / 4 1 0

F x x x

g x x x

g x x x

= - + -

= - + =

= - - + ³

case 2:*result = -(x[0]*x[0]) / 4.0e0 - x[1]*x[1] + 1.0e0;break;

default: ;break;

}*ierr = 0;return;

}

OutputThe solution is

1 20.8229 0.9114

Page 240: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

240

www.vnij.comCh. 9 特殊関数

Special Functions

• 誤差関数

• ベータ関数

• ガンマ関数

• Bessel関数

• 楕円積分

• Fresnel積分

• Airy関数

• Kelvin関数

• 金融関数

• 債権関数

• 確率分布関数と逆関数

– 標準正規分布

– χ2分布

– F分布

– Studentのt 分布

– Γ分布

– 2項分布

– 超幾何分布

– Poisson分布

– β分布

– 2変量正規分布

IMSL C Math

Page 241: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

241

www.vnij.com Ch. 10 統計と乱数生成Statistics and Random Number Generation

(Stat Ch.11, 12 参照)

• 単変量統計量の計算

• 1元度数分布表

• χ2適合度検定

• 分散-共分散、相関行列

• 線形回帰モデル

• 順位(rank)計算

• 擬似乱数の生成– 乗算合同法

• 一様分布

• 標準正規分布

• Poisson分布

• Γ分布

• β分布

• 指数分布

• 準乱数– シャッフルされたFaure列

IMSL C Math

Page 242: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

242

www.vnij.com Ch. 11 印刷 Printing FunctionsCh.12 ユーティリティ Utilities

1. 印刷と設定

2. 出力ファイルの指定

3. 時間と日付

4. エラー操作

5. 定数、マシン定数

6. ソート

7. ベクトルのノルム

8. 線形代数演算のサポート– 行列の演算、ノルム

– テスト用行列の生成

IMSL C Math

Page 243: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

243

www.vnij.comCh. 1 基本統計

Basic Statistics

1. 単変量の統計値 (平均、分散など)の計算

2. 1または2の正規母集団からの標本を用いて

平均と分散を推定

3. 1元または2元の度数分布表 (frequency table)を作成

4. 多変量データのソートと度数分布表作成

5. 順位(rank)と順序(order)統計量

IMSL C Stat

Page 244: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

244

www.vnij.comCh. 1 基本統計

Basic Statistics

IMSL C Stat

#include <imsls.h>main(){#define N1_OBSERVATIONS 7#define N2_OBSERVATIONS 9

int df;float diff_means, lower_limit, upper_limit, t, p_value, sp2;float x1[N1_OBSERVATIONS] = {

72.0, 75.0, 77.0, 80.0, 104.0, 110.0, 125.0};float x2[N2_OBSERVATIONS] = {

111.0, 118.0, 128.0, 138.0, 140.0, 150.0, 163.0, 164.0, 169.0};

/* Perform analysis */diff_means = imsls_f_normal_two_sample(N1_OBSERVATIONS, x1,

N2_OBSERVATIONS, x2, IMSLS_POOLED_VARIANCE, &sp2,IMSLS_CI_DIFF_FOR_EQUAL_VARS, &lower_limit, &upper_limit,IMSLS_T_TEST_FOR_EQUAL_VARS, &df, &t, &p_value,0);

/* Print results */printf("¥nx1_mean - x2_mean = %5.2f¥n", diff_means);printf("Pooled variance = %5.2f¥n", sp2);printf("95%% CI for x1_mean - x2_mean is (%5.2f,%5.2f)¥n",

lower_limit, upper_limit);printf("df = %3d¥n", df);printf("t = %5.2f¥n", t);printf("p-value = %8.5f¥n", p_value);

}Outputx1_mean - x2_mean = -50.48Pooled variance = 43

例:2つの標本(テストの成績)の平均の検定 (p.17)• グループXはグループYより平

均は低いか?

• 2つの母集団の分散は同じとして t 検定を行う。

• 帰無仮説 μx<μyは5%の有意

水準で棄却される。

(1/ ) (1/ )x y

x yts n n

-=

+

Page 245: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

245

www.vnij.comCh. 2 回帰

Regression

1. 多変量線形回帰分析– モデルの当てはめ

• 一般線形モデル

• 小2乗による多変量線形回帰モデル

– 統計的推論と診断• 回帰モデルの要約統計値、予測値

• 多変量線形仮説の検定

2. 変数の選択• Furnival-Wilsonの 良の線形回帰モデル

• Efroymson-Goodnightのステップワイズによる線形回帰モデル

3. 多項式回帰と非線形回帰• 多項式回帰モデル

• 改良Levenberg-Marquardt法による非線形回帰モデル yi = f(xi;q) + ei i = 1, 2, , n• PowellのSQP(Successive Quadratic Programming)による非線形回帰モデル

4. 小2乗以外での線形回帰モデルの当てはめ• 小絶対値(LAV, L1)、Lpノルム、 小 大値(Minimax, L∞)

IMSL C Stat

yi = b0 + b1xi + ei i = 1, 2, ..., n

1 1 2 2 ... 1, 2,...,i i i k ik iy x x x i nob b b b e= + + + + + =

21 2 .... 1, 2, ,k

i i i k i iy x x x i nob b b b e= + + + + + =

Page 246: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

246

www.vnij.comCh. 2 回帰

Regression

IMSL C Stat

#include <imsls.h>#include <math.h>#define N_INDEPENDENT 2#define N_COEFFICIENTS N_INDEPENDENT + 1#define N_OBSERVATIONS 4main(){

int i;float *coefficients, w[N_OBSERVATIONS], anova_table[15],

power;float x[][N_INDEPENDENT] = {

-2.0, 0.0, -1.0, 2.0, 2.0, 5.0,7.0, 3.0};

float y[] = {-3.0, 1.0, 2.0, 6.0};char *anova_row_labels[] = {

“degrees of freedom for regression”, (omitted)"coefficient of variation (in percent)"};

/* Calculate weights */power = 0.0;for (i = 0; i < N_OBSERVATIONS; i++) {

power += 1.0;w[i] = 1.0 / (power*power);

}/*Perform analysis */

coefficients = imsls_f_regression(N_OBSERVATIONS, N_INDEPENDENT, (float *) x, y,IMSLS_WEIGHTS, w, IMSLS_ANOVA_TABLE_USER, anova_table,0);

例: Weighted least square fit (p.72)

yi = b0 + b1xi1 + b2xi2 + ei i = 1,2,,, 4

wi = 1/i2

Error sum of squares :

/* Print results */imsls_f_write_matrix("Least Squares Coefficients", 1,

N_COEFFICIENTS, coefficients, 0);imsls_f_write_matrix("* * * Analysis of Variance * * *¥n", 15,

1, anova_table,IMSLS_ROW_LABELS, anova_row_labels,IMSLS_WRITE_FORMAT, "%10.2f", 0);

}

OutputLeast Squares Coefficients

1 2 3-1.431 0.658 0.748

* * * Analysis of Variance * * *

degrees of freedom for regression 2.00 (omitted)

( )4

2

=1

ˆSSE= i i ii

w y y-å

Page 247: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

247

www.vnij.comCh. 2 回帰

Regression

IMSL C Stat

#include <imsls.h>#include <stdio.h>void main(){

float xx[] = {1.0, 4.0, 2.0, 2.0, 3.0, 3.0, 4.0, 5.0};float yy[] = {1.0, 5.0, 0.0, 2.0, 1.5, 2.5, 2.0, 3.0};float p, tolerance, convergence_eps, square_of_scale, df_error,&

Lp_norm_residual;float R_matrix[4], residuals[8];int i, irank, iter, nrmiss;int n_row=2;int n_col=2;float *coefficients = NULL;tolerance = 100*imsls_f_machine(4);convergence_eps = 0.001;p = 1.0;for(i=0; i<4; i++){ coefficients = imsls_f_Lnorm_regression(8, 1, xx, yy,

IMSLS_METHOD_LLP, p,IMSLS_EPS, convergence_eps,IMSLS_RANK, &irank,IMSLS_ITERATIONS, &iter,IMSLS_N_ROWS_MISSING, &nrmiss,IMSLS_R_USER, R_matrix,IMSLS_DEGREES_OF_FREEDOM, &df_error,IMSLS_RESIDUALS_USER, residuals,IMSLS_SCALE, &square_of_scale,IMSLS_RESIDUALS_LP_NORM, &Lp_norm_residu0); (略)

p += 0.5;}

}

例:Lpノルムでの線形回帰モデル (p.178)p = 1, 1.5, 2, 2.5

1/1

0

ˆpn

Pi i

iy y

-

=

æ ö-ç ÷

è øåLp =

Page 248: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

248

www.vnij.comCh. 3 相関と共分散

Correlation and Covariance

1. 分散共分散行列、相関行列の計算

2. 偏共分散(partial covariance)、偏相関(partial correlation)の計算

3. プールされた共分散行列の計算

4. 共分散行列のロバスト推定 (robust estimate)

– HuberおよびStahelの方法

IMSL C Stat

Page 249: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

249

www.vnij.comCh. 3 相関と共分散

Correlation and Covariance

IMSL C Stat

include <imsls.h>#include <stdlib.h>main(){

int nobs = 150;int nvar = 4;int n_groups = 3;float percentage = 2.0;int igrp = 0;int ifrq = -1;int iwt = -1;int ind[4] = {1, 2, 3, 4};float *x, cov[16], rbcov[16];x = imsls_f_data_sets(3, 0);imsls_f_pooled_covariances(nobs, nvar, x, n_groups,

IMSLS_RETURN_USER, cov,IMSLS_X_INDICES, igrp, ind, ifrq, iwt, 0);

imsls_f_write_matrix("Pooled Covariance with No Outliers", nvar, nvar,cov, IMSLS_COL_NUMBER_ZERO,IMSLS_ROW_NUMBER_ZERO,IMSLS_PRINT_UPPER, 0);

imsls_f_robust_covariances(nobs, nvar, x, n_groups, IMSLS_RETURN_USER, rbcov,IMSLS_PERCENTAGE, percentage,IMSLS_X_INDICES, igrp, ind, ifrq, iwt, 0);

imsls_f_write_matrix("Robust Covariance with No Outliers", nvar, nvar, rbcov,

IMSLS_COL_NUMBER_ZERO,IMSLS_ROW_NUMBER_ZERO,IMSLS_PRINT_UPPER, 0);

/* Add Outliers */x[1] = 100.0;x[19] = 100.0;x[497] = -100.0;

imsls_f_pooled_covariances(nobs, nvar, x, n_groups, IMSLS_RETURN_USER, cov,IMSLS_X_INDICES, igrp, ind, ifrq, iwt, 0);

imsls_f_write_matrix("Pooled Covariance with Outliers", nvar, nvar, cov,

IMSLS_COL_NUMBER_ZERO,IMSLS_ROW_NUMBER_ZERO,IMSLS_PRINT_UPPER, 0);

imsls_f_robust_covariances(nobs, nvar, x, n_groups, IMSLS_RETURN_USER, rbcov,IMSLS_PERCENTAGE, percentage,IMSLS_X_INDICES, igrp, ind, ifrq, iwt, 0);

imsls_f_write_matrix("Robust Covariance with Outliers", nvar, nvar, rbcov,

IMSLS_COL_NUMBER_ZERO,IMSLS_ROW_NUMBER_ZERO,IMSLS_PRINT_UPPER, 0);

free(x);}

例:共分散行列のロバスト推定(p.210) Fisherのirisデータのうち3個をoutlier外れ値

としたものと比較。

Page 250: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

250

www.vnij.comCh. 3 相関と共分散

Correlation and Covariance

IMSL C Stat

Output

Pooled Covariance with No Outliers0 1 2 3

0 0.2650 0.0927 0.1675 0.03841 0.1154 0.0552 0.03272 0.1852 0.04273 0.0419

Robust Covariance with No Outliers0 1 2 3

0 0.2474 0.0872 0.1535 0.03601 0.1073 0.0538 0.03222 0.1705 0.04123 0.0401

例:共分散行列のロバスト推定 (p.210) (続き)

pooled_covariances と robust_covariances の出力の比較

ロバスト推定は外れ値があってもそれ程影響を受けない。

Pooled Covariance with Outliers0 1 2 3

0 60.43 0.30 0.13 -1.561 70.53 0.17 -0.172 0.19 0.073 66.38

Robust Covariance with Outliers0 1 2 3

0 0.2555 0.0876 0.1553 0.03591 0.1127 0.0545 0.03222 0.1723 0.04123 0.0424

Page 251: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

251

www.vnij.comCh. 4 分散分析と実験計画法Analysis of Variance and Designed Experiments

1. 一般的な分散分析 ANOVA– 1元配置モデル(one-way analysis)– 釣合い要因(balanced factorial design)の分析

– ランダムなネストされたモデルの分析– 固定効果・変量効果または混合モデルの分析

2. 実験計画法– 無作為またはブロック要因実験– ラテン方格子(Latin-square)実験– 格子(lattice)実験– split-plot(分割区法)またはsplit-split-plot実験– strip-plot(細分区法)またはstrip-split-plot実験

3. ユーティリティ– BartlettおよびLeveneの等分散性(homogeneity of variance)検定– 平均の多重比較検定(multiple comparisons of means)– Yatesの欠損値の推定

IMSL C Stat

Page 252: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

252

www.vnij.comCh. 5 カテゴリ・データと離散データの解析

Categorical and Discrete Data Analysis

1. 2元分割表(two-way contingency table)の統計量の計算

– r x c 分割表のχ2検定、McNemar検定などの統計値の

計算

– 全体枚挙法(total enumeration method)による正確な計算

– ネットワークアルゴリズムによるFisherの正確な計算

2. 一般化カテゴリモデル– 一般化線形モデル(generalized linear model)

• ロジスティック、probit、Poisson、log その他のモデル

IMSL C Stat

Page 253: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

253

www.vnij.comCh. 5 カテゴリ・データと離散データの解析

Categorical and Discrete Data Analysis

IMSL C Stat

#include <stdio.h>#include <imsls.h>

void main(){

int n_rows = 3;int n_columns = 5;float p;float table[15] = {20, 20, 0, 0, 0,

10, 10, 2, 2, 1,20, 20, 0, 0, 0};

double a, b;

printf("Asymptotic Chi-Squared p-value¥n");p = imsls_f_contingency_table(n_rows, n_columns, table, 0);

(略)printf("¥nNetwork Algorithm with Approximation¥n");a = imsls_ctime();p = imsls_f_exact_network(n_rows, n_columns, table, 0);

printf("¥nNetwork Algoritm without Approximation¥n");a = imsls_ctime();p = imsls_f_exact_network(n_rows, n_columns, table,

IMSLS_NO_APPROXIMATION, 0);

printf("¥nTotal Enumeration Method¥n");a = imsls_ctime();p = imsls_f_exact_enumeration(n_rows, n_columns, table, 0);

}

OutputAsymptotic Chi-Squared p-valuep-value = 0.0323

Network Algorithm with Approximationp-value = 0.0601Execution time = 0.0400

Network Algorithm without Approximationp-value = 0.0598Execution time = 0.4300

Total Enumeration Methodp-value = 0.0597Execution time = 3.1400

例:2元分割表のχ2分析といくつかの正確な手法での計算の比較(p.419)CPU時間(秒)に大きな差が出ている。

Page 254: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

254

www.vnij.comCh. 6 ノンパラメトリック統計

Nonparametric Statistics

1. 1標本– 符号検定 (sign test)

• Wilcoxonの符号付き順位検定(signed rank test)– 傾向の検定(trend test)

• Noetherの循環傾向(cyclical trend)の検定• Cox-Stuartの傾向の検定

– 同順位統計(tie statistics)2. 2つ以上の標本

– Wilcoxonの順位和検定(rank sum test)– 同一母集団の中央値に対するKruskal-Wallis検定– 完備型ブロック計画(complete block design)に対するFriedman検定– 関連する観測に対するCochranのQ検定– 順序付けられた標本に対するk標本トレンド検定

IMSL C Stat

Page 255: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

255

www.vnij.comCh. 7 適合度の検定

Test of Goodness of Fit

1. 一般的な適合度の検定(goodness-of-fit)– χ2適合度検定

– Shapiro-WilkあるいはLillieforsの正規性(normality) に対するW検定

– Kolmogorov-Smirnovの1および2標本検定

– Mardiaの多標本の正規性検定

2. ランダム度の検定• 連(run)検定、ペア検定、d2あるいは3重項検定

IMSL C Stat

Page 256: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

256

www.vnij.comCh. 7 適合度の検定

Test of Goodness of Fit

IMSL C Stat

#include <imsls.h>#include <stdio.h>void main(){

float *statistics=NULL, *diffs = NULL, *x=NULL, *y=NULL;int nobsx = 100, nobsy = 60, nmissx, nmissy;imsls_random_seed_set(123457);x = imsls_f_random_uniform(nobsx, 0);y = imsls_f_random_uniform(nobsy, 0);statistics = imsls_f_kolmogorov_two(nobsx, x, nobsy, y,

IMSLS_N_MISSING_X, &nmissx,IMSLS_N_MISSING_Y, &nmissy,IMSLS_DIFFERENCES, &diffs,0);

printf("D = %8.4f¥n", diffs[0]);printf("D+ = %8.4f¥n", diffs[1]);

printf("D- = %8.4f¥n", diffs[2]);printf("Z = %8.4f¥n", statistics[0]);

printf("Prob greater D one sided = %8.4f¥n", statistics[1]);printf("Prob greater D two sided = %8.4f¥n", statistics[2]);printf("Missing X = %d¥n", nmissx);printf("Missing Y = %d¥n", nmissy);

}

OutputD = 0.1800D+ = 0.1800D- = 0.0100Z = 1.1023Prob greater D one sided = 0.0720Prob greater D two sided = 0.1440Missing X = 0Missing Y = 0

例:Kolmogorov-Smirnovの2標本検定(p.492)一様乱数から100個

および60個の標本を取り、それらの累積分布関数CDFが等

しいかを検定

(Ref. Fortran Stat Ch.7 KSONE)

Page 257: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

257

www.vnij.comCh. 8 時系列解析と予測

Time Series Analysis and Forecasting

1. ARIMAモデル(Autoregressive Integrated Moving Average)– モーメント法、 小2乗法、 尤推定法によるARMAパラメータの推定– 単変量のARMAモデルの自動的な選択とフィティング

– データ前処理、外れ値の検出と推定– Auto_ARIMAモデル– 時系列の差分– ARモデルの季節変動パラメータの推定

2. モデルの構築と評価のユーティリティ– Box-Cox変換– 標本自己相関関数(autocorrelation function)– 標本偏自己相関関数(partial autocorrelation function)– 標本相互相関関数(cross-correlation function)– 多チャンネル相互相関関数– 不適合度検定(lack_of_fit)– 欠測値の推定

3. GARCHモデル(Generalized Autoregressive Conditional Heteroskedasticmodel)

4. 周波数モデル– Kalmanフィルター

IMSL C Stat

Page 258: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

258

www.vnij.comCh. 8 時系列解析と予測

Time Series Analysis and Forecasting

IMSL C Stat

#include <imsls.h>void main(){

int p = 2;int q = 1;int i;int n_observations = 100;int max_iterations = 0;float w[176][2];float z[100];float *parameters;float relative_error = 0.0;

imsls_f_data_sets(2, IMSLS_X_COL_DIM, 2, IMSLS_RETURN_USER, w, 0);

for (i=0; i<n_observations; i++) z[i] = w[21+i][1];

parameters = imsls_f_arma(n_observations, &z[0], p, q,IMSLS_RELATIVE_ERROR, relative_error,IMSLS_MAX_ITERATIONS, max_iterations,0);

printf("AR estimates are %11.4f and %11.4f.¥n", parameters[1], parameters[2]);

printf("MA estimate is %11.4f.¥n", parameters[3]);}

モーメント法のOutput

AR estimates are 1.2443 and -0.5751.MA estimate is -0.1241.

例:1770年から100年間の太陽黒点数のデータ:ARMA(2,1)のパラメータを推定(p.519)

0 0 1 2 2 1 1t t t t tz z z A A- - -= q + f + f -q +

小2乗法のOutput

*** WARNING Error IMSLS_LEAST_SQUARES_FAILED from imsls_f_arma. Least*** squares estimation of the parameters has failed to converge.

AR estimates are 1.3926 and -0.7329.MA estimate is -0.1375.

Page 259: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

259

www.vnij.comCh. 8 時系列解析と予測

Time Series Analysis and Forecasting

IMSL C Stat

#include <stdlib.h>#include <stdio.h>void main(void){float *parameters = NULL, *outlier_forecast = NULL;int *outlier_stat = NULL;int n_obs, n_predict, i, num_outliers;float aic, res_sigma;int model[4];float forecast_table[24];float x[141] = {

12.8,12.2,11.9,10.9,10.6,11.3,11.1,10.4,10.0,9.7,9.7,9.7,(略)n_predict = 6;n_obs = 135;parameters = imsls_f_auto_arima(n_obs, times, x, IMSLS_MODEL, model,

IMSLS_AIC, &aic,IMSLS_MAX_LAG, 5,IMSLS_CRITICAL, 4.0,IMSLS_NUM_OUTLIERS, &num_outliers,IMSLS_OUTLIER_STATISTICS, &outlier_stat,IMSLS_RESIDUAL_SIGMA, &res_sigma,IMSLS_NUM_PREDICT, n_predict,IMSLS_OUTLIER_FORECAST, &outlier_forecast,0);

(略)

OutputMethod 1: Automatic ARIMA model selection, no differencingModel chosen: p=5, q=0, s=1, d=0Number of outliers: 6Outlier statistics:

例:1994年1月から2005年9月までの米国の失業率のデータ:2004年1月から2005年3月のデータを解析、2005年4月から9月までの6ヶ月を推定。 (p.563)

Auto_ARIMA Forecast

6

7

8

9

10

11

12

Months

Unem

plo

yment

Rat

e Actual

Method 1 : noseasonal adjust

Method 2 : withseasonal adjust

Method 3 : Method2 + outlierdetection

Page 260: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

260

www.vnij.comCh. 8 時系列解析と予測

Time Series Analysis and Forecasting

IMSL C Stat

例:AutoARIMAの例(PV-WAVEによるGUI)

Page 261: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

261

www.vnij.comCh. 8 時系列解析と予測

Time Series Analysis and Forecasting

IMSL C Stat

#include <stdio.h>#include <imsls.h>#define NB 1#define NOBS 4#define NY 1void main(){

int nb = NB, nobs = NOBS, ny = NY;int ldcovb, ldcovv, ldq, ldr, ldt, ldz;int i, iq, it, n, nout;float alndet, b[NB], covb[NB][NB], covv[NY][NY],

q[NB][NB], r[NY][NY], ss,t[NB][NB], tol, v[NY], y[NY], z[NY][NB];

float ydata[] = {4.4, 4.0, 3.5, 4.6};z[0][0] = 1.0;r[0][0] = 1.0;q[0][0] = 4.0;t[0][0] = 1.0;b[0] = 4.0;covb[0][0] = 16.0;/* Initialize arguments for initial call to imsls_f_kalman. */n = 0;ss = 0.0;alndet = 0.0;printf("k/j b covb n ss alndet v covv¥n");for (i = 0; i < nobs; i++) {/* Update */y[0] = ydata[i];imsls_f_kalman(nb, b, (float*)covb, &n, &ss, &alndet,

IMSLS_UPDATE, ny, y, z, r, IMSLS_V_USER, v, IMSLS_COVV_USER, covv, 0);

printf("%d/%d %8.3f %8.3f %d %8.3f %8.3f %8.3f %8.3f¥n", i, i, b[0], covb[0][0], n, ss, alndet, v[0], covv[0][0]);

/* Prediction */imsls_f_kalman(nb, b, (float*)covb, &n, &ss, &alndet,

IMSLS_T, t,IMSLS_Q, q,0);

printf("%d/%d %8.3f %8.3f %d %8.3f %8.3f %8.3f %8.3f¥n", i+1, i, b[0], covb[0][0], n, ss, alndet, v[0], covv[0][0]);

}}

Outputk/j b covb n ss alndet v covv0/0 4.376 0.941 1 0.009 2.833 0.400 17.0001/0 4.376 4.941 1 0.009 2.833 0.400 17.0001/1 4.063 0.832 2 0.033 4.615 -0.376 5.9412/1 4.063 4.832 2 0.033 4.615 -0.376 5.9412/2 3.597 0.829 3 0.088 6.378 -0.563 5.8323/2 3.597 4.829 3 0.088 6.378 -0.563 5.8323/3 4.428 0.828 4 0.260 8.141 1.003 5.8294/3 4.428 4.828 4 0.260 8.141 1.003 5.829

例:Kalmanフィルター(p.633)

フィルターされた推定と1段階先の予測の誤差を計算

Page 262: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

262

www.vnij.comCh. 8 時系列解析と予測

Time Series Analysis and Forecasting

IMSL C Stat

例:Kalmanフィルターと移動平均モデル (PV-WAVEによる表示例)

Page 263: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

263

www.vnij.comCh. 9 多変量解析

Multivariate Analysis

1. 階層的(hierarchical)クラスタ分析

– 類似度行列(similarity matrix)の計算

– 階層的クラスタ分析

2. K-means法

3. 主成分分析(principal component analysis)

4. 因子分析(factor analysis)

5. 判別分析(discriminant analysis)

IMSL C Stat

Page 264: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

264

www.vnij.comCh. 9 多変量解析

Multivariate Analysis

IMSL C Stat

因子分析のステップStep 1

Calculate Covariance (Correlation) MatrixIMSL routine imsls_f_covariances

(see Chapter 3, “Correlation and Covariance”)

Step 2

Initial Factor Extractionimsls_f_factor_analysis

Step 3

Prior Info.IMSLS_OBLIQUE_PROCRUSTES_ROTATION

Prior Info.IMSLS_ORTHOGONAL_PROCRUSTES_ROTATION

No Prior Info.IMSLS_OBLIQUE_PROMAX_ROTATIONIMSLS_DIRECT_OBLIMIN_ROTATIONIMSLS_OBLIQUE_PIVOTAL_PROMAX_ROTATION

No Prior Info.IMSLS_ORTHOMAX_ROTATION,

ObliqueOrthogonal

Factor Rotationusing imsls_f_factor_analysis’ optional arguments

Step 4

Factor Structure and Varianceimsls_f_factor_analysis

optional argumentIMSLS_FACTOR_STRUCTURE

Page 265: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

265

www.vnij.comCh. 9 多変量解析

Multivariate Analysis

IMSL C Stat

例:クラスター分析の例(IMSL C#に

よる表示)

Page 266: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

266

www.vnij.comCh. 10 生存と信頼性解析

Survival and Reliability Analysis

1. 生存解析(survival analysis)– Kaplan-Meierの生存確率の推定

– Coxの比例ハザードモデル(proportional hazards model) による生存と信頼性データの解析

– 一般化線形モデル(generalized linear model)による生

存データ解析

– 様々なパラメトリックモデルによる推定

2. ノンパラメトリック法によるハザード関数の推定

3. 保険数理テーブル(actuarial table)– 人口とコーホート生命表(cohort life table)の作成

IMSL C Stat

Page 267: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

267

www.vnij.comCh. 11 確率分布関数とその逆関数Probability Distribution Functions and Inverses

1. 離散変数– 二項分布– 超幾何分布– Poisson分布

2. 連続変数– 標準正規(Gauss)分布

– ベータ分布– 2変量正規分布– χ2 分布– 非中心χ2 分布– F 分布– Γ 分布– Studentのt 分布– 非中心Studentのt 分布

IMSL C Stat

Page 268: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

268

www.vnij.comCh. 12 乱数生成

Random Number Generation

1. 単変量離散分布– 二項分布

– 幾何分布

– 超幾何分布

– 対数分布

– 負の二項分布

– Poisson分布

– 離散一様分布

– 一般離散分布

2. 単変量連続分布– ベータ分布– χ2 分布– Cauchy分布

– 指数分布– 2つの指数分布– Γ 分布

– 一様分布– 対数正規分布– 標準正規分布– 安定分布– Studentのt 分布

– 三角分布– Von Mises分布– Weibull分布

– 一般連続分布

IMSL C Stat

Page 269: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

269

www.vnij.comCh. 12 乱数生成

Random Number Generation

3. 多変量連続分布– 多変量正規分布– 直交行列と相関行列– 標本にもとづいた多変量分布– 多項分布– 円あるいはK次元球上の分布– 2元配置表の作成

4. 順序統計(order statistics)– 標準正規分布– 一様分布

5. 確率過程– ARMA過程– 非斉次(nonhomogeneous)Poisson過程

6. 標本と順列– ランダム順列(permutation)– ランダム標本(sampling)– 有限母集団から標本

7. 低不適合度の列(LDS : Low Discrepancy Sequence)

– シャッフルされた一般化Faure列

8. ユーティリティ– 一様乱数発生器のタイプの選択など– シードの初期化など– シャッフルされた乱数発生器の初期化

など– GFSR乱数発生器の初期化など– Mersenne Twisterによる乱数発生器

の初期化など

IMSL C Stat

Page 270: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

270

www.vnij.comCh. 12 乱数生成

Random Number Generation

1. 乗算合同法 (multiplicative congruential generator)xi = cxi-1 mod(231-1) (周期 231-2≒2.15x109)

c = 75 = 16807 (minimal standard generator)c = 2x72x4053103 = 397204094c = 23x118838297 = 950706376

2. シャッフルされた乗算合同法

3. 伏見正則(1990)のGFSR (Generalized Feedback Shift Register)

xi = xi-1563 .XOR. xi-96 (周期 2521≒6.86x10156)– 初期化に時間がかかるが、乗算合同法と同程度の速さ

4. Mersenne Twister (松本眞、西村拓士)– 長周期 219937-1 ≒ 4.315x106001

– 623次元超立方体の中に 均等に分布

IMSL C Stat

Page 271: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

271

www.vnij.comCh. 12 乱数生成

Random Number Generation

IMSL C Stat

#include <stdio.h>#include <imsls.h>float cdf(float);void main(){

int i, iopt=0, ndata= 100;float table[100][5], x = 0.0, *r;for (i=0;i<ndata;i++) {

table[i][0] = x;x += .01;

}imsls_f_continuous_table_setup(cdf, iopt, ndata, (float*)table);imsls_random_seed_set(123457);r = imsls_f_random_general_continuous (5, ndata, table, 0);imsls_f_write_matrix("Beta (3, 2) random deviates", 5, 1, r, 0);

}float cdf(float x){

return imsls_f_beta_cdf(x, 3., 2.);}

例: 一般連続分布での擬似乱数生成 (p.861)

Output*** WARNING Error from imsls_f_continuous_table_setup. The values of the*** CDF in the second column of table did not begin at 0.0 and end*** at 1.0, but they have been adjusted. Prior to adjustment,*** table[0][1] = 0.000000e+00 and table[ndata-1][1]= 9.994079e-01.

Beta (3, 2) random deviates1 0.92082 0.46413 0.76684 0.65365 0.8171

Page 272: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

272

www.vnij.comCh. 12 乱数生成

Random Number Generation

IMSL C Stat

#include <imsls.h>void main(){

const unsigned long long init[] = {0x123, 0x234, 0x345, 0x456};float *r;int iseed = 123457; unsigned long long *itable;int nr = 5;/* Initialize 64-bit Mersenne Twister series with a seed */imsls_random_option (9);imsls_random_seed_set (iseed);r = imsls_f_random_uniform (nr, 0);imsls_f_write_matrix ("First stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,IMSLS_NO_ROW_LABELS,0);

free(r);/* Reinitialize Mersenne Twister series with an array */imsls_random_option (9);imsls_random_MT64_init(4, init);/* Save the state of the series */imsls_random_MT64_table_get(&itable, 0);r = imsls_f_random_uniform (nr, 0);imsls_f_write_matrix ("Second stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,IMSLS_NO_ROW_LABELS,0);

free(r);

例: 64bit Mersenne Twisterによる乱数の生成。4ストリーム (p.909)/* Restore the state of the series */imsls_random_MT64_table_set(itable);r = imsls_f_random_uniform (nr, 0);imsls_f_write_matrix ("Third stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,IMSLS_NO_ROW_LABELS,0);

free(r);/* Reset the series - it will reinitialize from the seed */itable[0] = 1000;imsls_random_MT64_table_set(itable);r = imsls_f_random_uniform (nr, 0);imsls_f_write_matrix ("Fourth stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,IMSLS_NO_ROW_LABELS,0);

free(r);}

OutputFirst stream output

0.5799 0.9401 0.7102 0.1640 0.5457Second stream output

0.4894 0.7397 0.5725 0.0863 0.7588Third stream output

0.4894 0.7397 0.5725 0.0863 0.7588Fourth stream output

0.5799 0.9401 0.7102 0.1640 0.5457

Page 273: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

273

www.vnij.comCh. 12 乱数生成

Random Number Generation

IMSL C Stat

#include "stdio.h"#include "imsl.h"void main(){

Imsl_faure *state;float *x;int ndim = 3;int k;

state = imsl_faure_sequence_init(ndim, 0);for (k = 0; k < 5; k++) {

x = imsl_f_faure_next_point(state, 0);printf("%10.3f %10.3f %10.3f¥n", x[0], x[1], x[2]);

free(x);}imsl_faure_sequence_free(state);

}Output

0.334 0.493 0.0640.667 0.826 0.3970.778 0.270 0.1750.111 0.604 0.5090.445 0.937 0.842

例: 3次元の一般化Faure列を5点求める (p.914)

Page 274: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

274

www.vnij.comCh. 12 乱数生成 (Fortran Stat Ch.18)他社の乱数との比較:(Intelのホームページより)

IMSLの乱数は Intel MKLやNAGと比べて精度が高く、計算速度はNAGの2倍

速い結果が出ている。

Performance Comparison: Black-Scholes Option-Pricing Modelhttp://www.intel.com/cd/software/products/asmo-na/eng/220054.htm

IMSL Fortran Stat

Relative Error Ratio

Call Put Call Put Call Put16.7291 7.2184 0.0050 -0.0005

0.030 -0.007 4.55 -5.0016.7366 7.2164 -0.0025 0.0015

-0.015 0.021 -2.27 15.0016.7330 7.2178 0.0011 0.0001

0.007 0.001 1 116.7394 7.2162 -0.0053 0.0017

-0.032 0.024 -4.82 17.00

Exact Value 16.7341 7.2179 (Intel Xeon)

Option Value(Exact Value)

Absolute Error(Relative Error %)

Time(seconds)

Speedup(timesfaster)

7.246 4.09

MCG59 7.625 3.88

Library BasicGenerator

IMSL* MinimalStandard

Intel® MKL MCG31m1

29.63 1

NAG* Original 61.306 0.48

Page 275: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

275

www.vnij.comCh.13 ニューラルネットワーク

Neural Networks

• ネットワーク

– 多層フィードフォワードネットワークの作成と学習

– 予測計算

• 前処理フィルタ

– スケール処理

– 時系列データのフォーマットの変換

IMSL C Stat

Page 276: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

276

www.vnij.comCh.13 ニューラルネットワーク

Neural Networks

IMSL C Stat

例: 4入力(3属性、1連続データ)2層ネット、中間層に3パーセプトロン、90データで学習、10データを予測(p.956)

#include "imsls.h"#include <stdio.h>voidmain (){

static int categorical[300] = {1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, (途中略)0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1

};static float continuous[100] = {4.007054658, 7.10028447, 4.740350984, 5.714553211, 6.205437459,(略)3.811953836, 5.78471629, 3.414486452, 9.345413015, 1.024053777

};static float output[100] = {18.01410932, 24.20056894, 19.48070197, 21.42910642, 22.41087492,(略)37.62390767, 41.56943258, 36.8289729, 48.69082603, 32.04810755

};/* 2D Array Definitions */

#define CATEGORICAL(i,j) categorical[i*n_cat+j]#define CATEGORICALOBS(i,j) categoricalObs[i*n_cat+j]Imsls_f_NN_Network *ffnet;float *stats;int n_obs = 100, n_cat = 3, n_cont = 1;int i, j;float *forecasts;/* for forecasting */int categoricalObs[3] = { 0, 0, 0 };float continuousObs[1] = { 0 };float x, y;float forecast[5];float *cont; (続く)

Page 277: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

277

www.vnij.comCh.13 ニューラルネットワーク

Neural Networks

IMSL C Stat

for (i = 90; i < 100; i++){continuousObs[0] = continuous[i];for (j = 0; j < n_cat; j++)

{CATEGORICALOBS (0, j) = CATEGORICAL (i, j);

}forecasts = imsls_f_mlff_network_forecast (ffnet, n_cat, n_con

categoricalObs,continuousObs, 0);

x = output[i];y = forecasts[0];printf

("observation[%d] %8.4f Prediction %8.4f Residual %8.4f ¥n",

i, x, y, x - y);}

imsls_f_mlff_network_free (ffnet);#undef CATEGORICAL#undef CATEGORICALOBS

Output

Predictions for Observations 90 to 100: observation[90] 49.2975 Prediction 43.8761 Residual 5.4213 (略)observation[98] 48.6908 Prediction 43.2108 Residual 5.4800 observation[99] 32.0481 Prediction 23.1740 Residual 8.8742

/* Scale continuous attribute to the interval [0, 1] */cont = imsls_f_scale_filter (n_obs, continuous, 1,

IMSLS_SCALE_LIMITS, 0.0, 10.0, 0.0, 1.0, 0);ffnet = imsls_f_mlff_network_init (4, 1);imsls_f_mlff_network (ffnet,

IMSLS_CREATE_HIDDEN_LAYER, 3, IMSLS_LINK_ALL, 0);

for (i = 0; i < ffnet->n_links; i++){/* hidden layer 1 */if (ffnet->nodes[ffnet->links[i].to_node].layer_id == 1)

{ffnet->links[i].weight = .25;

}/* output layer */if (ffnet->nodes[ffnet->links[i].to_node].layer_id == 2)

{ffnet->links[i].weight = .33;

}}

stats = imsls_f_mlff_network_trainer (ffnet, n_obs - 10, n_cat, n_cont, categorical, continuous, output,

0);printf ("Predictions for Observations 90 to 100: ¥n");

(続く)

Page 278: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

278

www.vnij.comCh.13 ニューラルネットワーク

Neural Networks

IMSL C Stat

例:ニューラルネットとARMAによる予測と

実際の値との比較。

JMSLによる表示例

Page 279: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

279

www.vnij.com Ch.14 印刷 Printing FunctionsCh.15 ユーティリティ Utilities

• 印刷

– 行列の印刷など

• 出力ファイルの設定

• エラー処理

• 定数

• 行列演算、その他

IMSL C Stat

Page 280: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

IMSL ライブラリの今後のリリース予定

Page 281: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

281

www.vnij.com

IMSL Fortran v6.0

• AMD Opteron, SuSE Linux ES 9, Portland pgf90 7.0-5 対応

• Linear Programming– F.Krogh’s code (already in CNL, JMSL, C#NL)

• SuperLU– Sparse Linear Algebra package

• Mersenne Twister 乱数生成アルゴリズム

• LAPACK, ScaLAPACK Integration• ScaLAPACK utilities

Page 282: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

282

www.vnij.com

LAPACK Integration

?POTRF, ?POCON, ?=S/DLFCDS

?POTRF, ?POTRS, ?=S/DLSLDS

?PORFS, ?POTRS, ?=S/DLSADS

?TRCON, ?=C/ZLFCCT

?TRTRS, ?=C/ZLSLCT

?TRCON, ?=S/DLFCRT

?TRTRS, ?=S/DLSLRT

?GETRF, ?GETRI, ?=C/ZLINCG

?GERFS,?GETRS, ?=C/ZLFICG

?GETRS, ?=C/ZLFSCG

?GETRF, ?=C/ZLFTCG

?GETRF, ?GECON, ?=C/ZLFCCG

?GETRF, ?GETRS, ?=C/ZLSLCG

?GETRF, GETRS, ?GECON, ?=C/ZLSACG

?GETRF, ?GETRI ?=S/DLINRG

?GETRS, ?=S/DLFIRG

?GETRS, ?=S/DLFSRG

?GETRF, ?=S/DLFTRG

?GETRF,?GECON, ?=S/DLFCRG

?GETRF, ?GETRS, ?=S/DLSLRG

?GERFS,?GETRF,?GECON, ?=S/DLSARG

LAPACKIMSL (? = S/D real or C/Z complex; single/double)

?HETRS, ?=C/ZLFSHF

?HETRF, ?=C/ZLFTHF

?HETRF, ?HECON, ?=C/ZLFCHF

?HECON, ?HETRF, ?HETRS, ?=C/ZLSLHF?HECON, ?HERFS, ?HETRF, ?HETRS, ?=C/ZLSAHF?PORFS, ?POTRS, ?=C/ZLFIDH

?TRTRS, ?=C/ZLFSDH

?POTRF, ?=C/ZLFTDH

?POTRF, ?POCON, ?=C/ZLFCDH

?TRTRS, ?POTRF, ?=C/ZLSLDH?POCON, ?POTRF, ?POTRS, ?=C/ZLSADH ?SYRFS, ?=S/DLFISF

?SYTRF, ?=S/DLFSSF

?SYTRF, ?=S/DLFTSF?SYTRF, ?SYCON, ?=S/DLFCSF?SYTRF, ?SYTRS, ?=S/DLSLSF?SYRFS, ?SYTRF, ?SYTRS, ?=S/DLSASF?POTRF, ?=S/DLINDS?PORFS, ?POTRS, ?=S/DLFIDS?POTRS, ?=S/DLFSDS

?POTRF, ?=S/DLFTDS

?GEEV, ?=C/ZEVCCG

?HSEQR, ?GEBAL, ?GEHRD, ?=C/ZEVLCG

?GEEVX, ?=S/DEVCRG

?GEBAL, ?GEHRD, ?HSEQR ?=S/DEVLRG

?ORGQR, ?=S/DLQERR

?TRTRS, ?ORMQR, ?=S/DLQRSL

?GESVD, ?=S/DLSGRR

?GESVD, ?=C/ZLSVCR

?GESVD, ?-S/DLSVRR

?GEQRF, ?=S/DLQRRR

?GEQRF, ?=S/DLSBRR

?GEQP3, ?GEQRF, ?ORMQR, ?=S/DLQRRV

?GEQP3, ?GEQRF, ?ORMQR, ?TRTRS. ?=S/DLSQRR

?GBTRS, ?GBRFS, ?=S/DLFIRB

?GBTRS, ?=S/DLFSRB

?GBTRF, ?=S/DLFTRB

?GBTRF, ?GBCON, ?=S/DLFCRB

?GBTRF, ?GBTRS, ?=S/DLSLRB

?GBTRF, ?GBTRS, ?GBRFS ?=S/DLSARB

?HERFS, ?HETRS, ?=C/ZLFIHF

?SYGV, ?=S/DGVCSP

?SYGV, ?=S/DGVLSP

?GEQRF, ?UMMQR, ?GGHRD, ?HGEQZ,?TGEVC, ?=C/ZGVCCG

?GEQRF, ?UMMQR, ?GGHRD, ?HGEQZ, ?=C/ZGVLCG

?GEQRF, ?ORMQR, ?GGHRD, ?HGEQZ, ?TGEVC, ?=S/DGVCRG

?GEQRF, ?ORMQR, ?GGHRD, ?HGEQZ, ?=S/DGVLRG

?HEEV, ?=C/ZEVCHF

?HEEV, ?=C/ZEVLHF

?SYEV, ?=S/DEVCSF

?SYEV, ?=S/DEVLSF

Page 283: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

283

www.vnij.com MPI routines with ScaLAPACK interface

(? = S/D real or C/Z complex single/double)

P?TRCON, ?=C/ZLFCCT

P?TRTRS, ?=C/ZLSLCT

P?TRCON, ?=S/DLFCRT

P?TRTRS, ?=S/DLSLRT

P?GETRF, P?GETRI, ?=C/ZLINCG

P?GERFS,P?GETRS, ?=C/ZLFICG

P?GETRS, ?C/ZLFSCG

P?GETRF, ?C/ZLFTCG

P?GETRF, P?GECON, ?=C/ZLFCCG

P?GETRF, P?GETRS, ?=C/ZLSLCG

P?GETRF, P?GETRS, P?GERFS, ?=C/ZLSACG

P?GETRF, P?GETRI ?=S/DLINRG

P?GETRS, P?GERFS, ?=S/DLFIRG

P?GETRS, ?=S/DLFSRG

P?GETRF, ?=S/DLFTRG

P?GETRF,P?GECON, ?=S/DLFCRG

P?GETRF, P?GETRS, ?=S/DLSLRG

P?GERFS,P?GETRF,P?GETRS, ?=S/DLSARGScaLAPACKIMSL

P?ORGQR, ?=S/DLQERR

P?TRTRS, P?ORMQR, ?=S/DLQRSL

P?GESVD, ?=S/DLSGRR

P?GESVD, ?-S/DLSVRR

P?GEQRF, P?GEQPF, P?ORMQR, ?=S/DLQRRR

P?TRTRS, P?GEQRF, P?ORMQR, ?=S/DLQRRV

P?GEQPF, P?GEQRF, P?ORMQR, P?TRTRS, ?=S/DLSQRR

P?GBTRF, P?GBTRS, ?=S/DLSLRB

P?PORFS, P?POTRS, ?=C/ZLFIDH

P?POTRS, ?=C/ZLFSDH

P?POTRF, ?=C/ZLFTDH

P?POTRF, P?POCON, ?=C/ZLFCDH

P?POTRS, P?POTRF, ?=C/ZLSLDH

P?POTRF, P?PORFS, P?POTRS, ?=C/ZLSADH

P?GETRF, P?GETRI, ?=S/DLINDS

P?PORFS, P?POTRS, ?=S/DLFIDS

P?POTRS, ?-S/DLFSDS

P?POTRF, ?-S/DLFTDS

P?POTRF, P?POCON, ?=S/DLFCDS

P?POTRF, P?POTRS, ?=S/DLSLDS

P?PORFS, P?POTRF, P?POTRS, ?=S/DLSADS

Page 284: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

284

www.vnij.com

ScaLAPACKユーティリティ(1/2)

ScaLAPACK使用のための補助ルーチン– プロセッサグリッドの設定– ローカル配列の大きさの計算– 行列の2D block-cyclicフォームへのファイル読み書き– グローバル配列から2D block-cyclic フォームのローカル配列にマップ

およびアンマップ

– ScaLAPACK_SETUP プロセッサグリッドをセットアップ– ScaLAPACK_GETDIM 行列の分散を計算– ScaLAPACK_READ block-cyclic形式にデータをファイルから読み込み– ScaLAPACK_WRITE block-cyclic形式からデータをファイルに出力– ScaLAPACK_MAP block-cyclic形式にデータを各スレッドにマップ– ScaLAPACK_UNMAP block-cyclic形式からデータをルートノードにマップ– ScaLAPACK_EXIT ScaLAPACKの使用終了

Page 285: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

285

www.vnij.com

ScaLAPACKユーティリティ(2/2)

ScaLAPACKサポートモジュール– ScaLAPACK, PBLAS, BLACSを使う場合はこのモジュールを使うことを推薦。– 引数の不足や型(type, kind, rank)の不一致などをコンパイル時にチェックする

モジュール名 対応するルーチン、ライブラリ

– ScaLAPACK_Support 下記のルーチン全て

• ScaLAPACK_Int ScaLAPACK• PBLAS_Int parallel BLAS,PBLAS• BLACS_Int BLACS• TOOLS_Int ScaLAPACK補助ルーチン

• LAPACK_Int LAPACK• ScaLAPACK_IO_Int ScaLAPACK_READ, ScaLAPACK_WRITE• MPI_Node_Int MPIコミュニケータモジュール(MP_SETUP)

• GRIDINFO_Int ScaLAPACK_SETUP• ScaLAPACK_MAP_Int ScaLAPACK_MAP• ScaLAPACK_UNMAP_Int ScaLAPACK_UNMAP

IMSL Fortran

Page 286: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

286

www.vnij.com

• 疎行列の計算 (SuperLUを組み込み)– 簡単で使いやすい

– Fortran 2003 の派生型を用いる

– サポートする演算• 疎行列の設定

• 疎行列の和

• 疎行列と密行列(密ベクトル)の積

• 線型方程式の解

• 条件数の計算

• 疎行列と密行列の変換

• ストーレジの管理

Ch. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

IMSL Fortran Math

Page 287: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

287

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

! Sparse = Collection of TripletsUse linear_operatorsInteger i, j; real(kind(1.e0)) value, x(10000)Type (s_sparse) AType (s_hbc_sparse) H ! Define non-zero values of AA = s_entry ( I, J, value)! Convert to computational Harwell-Boeing formH = A! Compute with sparse matrix H, e.g.

X = H .ix. x

type s_entry

integer irow

integer jcol

real (kind(1.e0)) value

end type

! Sparse = Dense : H = D

! Dense = Sparse : D = H

! Scalar = value at intersection: value = s_hbc_entry(H, I, J)

s/d, c/z の型をサポート

IMSL Fortran Math

Page 288: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

288

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

Y(1:r,1:m)Hmxn sparse, x(1:r,1:k),k≥nY = X .xt. HY = xrxnHT

y(1:m)Hmxn sparse, x(1:k),k≥ny = x .xt. Hy = xHT

Y(1:m,1:r)Hmxn sparse, x(1:k,1:r),k≥nY = H .xt. xY = HxTnxr

y(1:m)Hmxn sparse, x(1:k),k≥nY = H .xt. xy = HxT

Y(1:r,1:n)Hmxn sparse, x(1:k,1:r),k≥mY = X .tx. HY = xTrxmH

y(1:n)Hmxn sparse, x(1:k),k≥mY = x .tx. Hy = xTH

Y(1:n,1:r)Hmxn sparse, x(1:k,1:r),k≥mY = H .tx. XY = HTXnxr

y(1:n)Hmxn sparse, x(1:k),k≥my = H .tx. xy = HTx

Knxm sparseHmxn sparse, complexK = .h. HK = HH = H*T

Knxm sparseHmxn sparseK = .t. HK = HT

Y(1:r,1:n)Hmxn sparse, x(1:r,1:k),k≥mY = X .x. HY = xrxmH

Y(1:m,1:r)Hmxn sparse, x(1:k,1:r),k≥nY = H .x. xY = Hxnxr

y(1:n)Hmxn sparse, x(1:k),k≥my = x .x. Hy = xTH≡ HTx

y(1:m)Hmxn sparse, x(1:k),k≥ny = H .x. xy = Hx

Y(1:r,1:n)Hnxn sparse, x(1:r,1:n),k≥nY = X .xi. HY = xrxnH−1≡ (H−TXT)T

Y(1:n,1:r)Hnxn sparse, x(1:k,1:r),k≥nY = H .ix. xY = H−1xnxr

y(1:n)Hnxn sparse, x(1:k),k≥ny = x .xi. Hy = xTH−1≡ H−Tx

y(1:n)Hnxn sparse, x(1:k),k≥ny = H .ix. xy = H−1x

Output TermsInput TermsOperation NotationSparse Matrix Operation

IMSL Fortran Math

Page 289: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

289

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

Y(1:r,1:m)Hmxn sparse, x(1:r,1:k),k≥nY = X .xh. HY = xrxnHH = XrxnH

*T

y(1:m)Hmxn sparse, x(1:k),k≥ny = x .xh. Hy = xHH = xH*T

Y(1:m,1:r)Hmxn sparse, x(1:k,1:r),k≥nY = H .xh. XY = HxTnxr = HX*T

nxr

y(1:m)Hmxn sparse, x(1:k),k≥ny = H .xh. Xy = HxH = Hx*T

Y(1:r,1:n)Hmxn sparse, x(1:k,1:r),k≥mY = X .hx. HY = XHrxmH = X*T

rxmH

y(1:n)Hmxn sparse, x(1:k),k≥mY = x .hx. Hy = xHH = x*TH

Y(1:n,1:r)Hmxn sparse, x(1:k,1:r),k≥mY = H .hx. XY = HHXmxr = H*TXmxr

Output TermsInput TermsOperation NotationSparse Matrix Operation

IMSL Fortran Math

Page 290: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

290

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

use linear_operatorsimplicit none

! This is Example 1 for LIN_SOL_GEN, with operators and functions.

integer, parameter :: n=32 real(kind(1e0)) :: one=1.0e0, err real(kind(1e0)), dimension(n,n) :: A, b, x

! Generate random matrices for A and b: A = rand(A); b=rand(b)

! Compute the solution matrix of Ax = b. x = A .ix. b

! Check the results. err = norm(b - (A .x. x))/(norm(A)*norm(x)+norm(b)) if (err <= sqrt(epsilon(one))) &

write (*,*) 'Example 1 for LIN_SOL_GEN (operators) is correct.' end

例:連立一次方程式 Ax = b を解く (p.1562):

x = A-1b ; 残差 r = b - Ax

IMSL Fortran Math

[密行列の場合]

Page 291: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

291

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

use wrrrn_intuse linear_operatorstype (s_sparse) Stype (s_hbc_sparse) Hinteger, parameter :: N=3real (kind(1.e0)) x(N,N), y(N,N), B(N,N)real (kind(1.e0)) errS = s_entry (1, 1, 2.0)S = s_entry (1, 3, 1.0)S = s_entry (2, 2, 4.0)S = s_entry (3, 3, 6.0)H = S ! sparseX = H ! dense equivalent of HB= rand(B)Y = H .ix. Bcall wrrrn ( 'H', X)call wrrrn ( 'B', b)call wrrrn ( 'H .ix. B ', y)! Check the results.

err = norm(y - (X .ix. B))if (err <= sqrt(epsilon(one))) then

write (*,*) 'Sparse example for .ix. operator is correct.'end if

end

[疎行列の場合] (p.1562)

IMSL Fortran Math

OutputH

1 2 31 2.000 0.000 1.0002 0.000 4.000 0.0003 0.000 0.000 6.000

B1 2 3

1 0.8292 0.5697 0.16872 0.9670 0.7296 0.06033 0.1458 0.2726 0.8809

H .ix. B1 2 3

1 0.4025 0.2621 0.01092 0.2417 0.1824 0.01513 0.0243 0.0454 0.1468

Page 292: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

292

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

use linear_operatorsuse mpi_setup_intimplicit none

! This is the equivalent of Parallel Example 1 for .ix., with box data types! and functions.

integer, parameter :: n=32, nr=4real(kind(1e0)) :: one=1e0real(kind(1e0)), dimension(n,n,nr) :: A, b, x, err(nr)

! Setup for MPI.MP_NPROCS=MP_SETUP()

! Generate random matrices for A and b:A = rand(A); b=rand(b)

! Compute the box solution matrix of Ax = b.x = A .ix. b

! Check the results.err = norm(b - (A .x. x))/(norm(A)*norm(x)+norm(b))If (ALL(err <= sqrt(epsilon(one))) .and. MP_RANK == 0) &

write (*,*) 'Parallel Example 1 is correct.'

! See to any error messages and quit MPI.MP_NPROCS=MP_SETUP('Final')

end

[MPI並列の場合] (p.1570)

IMSL Fortran Math

Page 293: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

293

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

USE MPI_SETUP_INTUSE LSARG_INTUSE WRRRN_INTUSE SCALAPACK_SUPPORTIMPLICIT NONEINCLUDE ‘mpif.h’

! INTEGER N, DESCA(9), DESCX(9)INTEGER INFO, MXLDA, MXCOLREAL, ALLOCATABLE :: A(:,:), B(:), X(:)REAL, ALLOCATABLE :: A0(:,:), B0(:), X0(:)PARAMETER (N=3)

! Set up for MPIMP_NPROCS = MP_SETUP()IF (MP_RANK .EQ. 0) THEN

ALLOCATE (A(N,N), B(N), X(N))! Set values for A and B

A(1,:) = (/ 33.0, 16.0, 72.0/)A(2,:) = (/-24.0, -10.0, -57.0/)A(3,:) = (/ 18.0, -11.0, 7.0/)B = (/129.0, -96.0, 8.5/)

ENDIF

[ScaLAPACKの場合] (p.85)

IMSL Fortran Math

! Set up a 1D processor grid and define its contextCALL SCALAPACK_SETUP(N, N, .TRUE., .TRUE.)

! Get the array descriptor entities MXLDA and MXCOLCALL SCALAPACK_GETDIM(N, N, MP_MB, MP_NB, MXLDA, MXCOL)

! Set up the array descriptorsCALL DESCINIT(DESCA, N, N, MP_MB, MP_NB, 0, 0, MP_ICTXT,

MXLDA, INFO)CALL DESCINIT(DESCX, N, 1, MP_MB, 1, 0, 0, MP_ICTXT,

MXLDA, INFO)! Allocate space for the local arrays

ALLOCATE (A0(MXLDA,MXCOL), B0(MXLDA), X0(MXLDA))! Map input arrays to the processor grid

CALL SCALAPACK_MAP(A, DESCA, A0)CALL SCALAPACK_MAP(B, DESCX, B0)

! Solve the system of equationsCALL LSARG (A0, B0, X0)

! Unmap the results from the distributed arrays back to! A non-distributed array.

CALL SCALAPACK_UNMAP(X0, DESCX, X)! Print results. Only Rank=0 has the solution, X.

IF (MP_RANK .EQ. 0) CALL WRRRN (’X’, X, 1, N, 1)IF (MP_RANK .EQ. 0) DEALLOCATE(A, B, X)DEALLOCATE(A0, B0, X0)

! Exit ScaLAPACK usageCALL SCALAPACK_EXIT(MP_ICTXT)MP_NPROCS = MP_SETUP(‘FINAL’)END

Page 294: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

294

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

implicit noneinteger :: n,istat,info,i,j, sqrtnpreal(kind=8),dimension(:,:),allocatable :: areal(kind=8),dimension(:,:),allocatable :: creal(kind=8),dimension(:),allocatable :: solutioninteger,dimension(:),allocatable :: ipivreal(kind=8) :: valparameter (n = 13)

!! (omitted)! ----- Initialize the blacs.

call BLACS_PINFO ( iam, nprocs )!! ----- Set the dimension of the 2d processors grid.

sqrtnp = int( sqrt( dble(nproc) ) + 1 )do i=1,sqrtnp

if(mod(nproc,i).eq.0) nprow = iend donpcol = nproc/nprow

!

[Native ScaLAPACKの場合 1/2]

IMSL Fortran Math

! ----- Initialize a single blacs context. call BLACS_GET ( -1, 0, context )call BLACS_GRIDINIT ( context, 'r', nprow, npcol )call BLACS_GRIDINFO ( context, nprow, npcol, myrow, mycol )

! ----- Calculate the blocking factor for the matrix. nb = min ( n/nprow, n/npcol )if(nbuser.gt.0) then

nb = min ( nb, 64 )endifnb = max(nb,1)

! ----- Distributed matrices: get num. local rows/cols.! Create description.

l_nrowsa = NUMROC(n,nb,myrow,0,nprow)l_ncolsa = NUMROC(n,nb,mycol,0,npcol)call DESCINIT ( desca, n, n, nb, nb, 0, 0, context, l_nrowsa, info )l_nrowsc = NUMROC(n,nb,myrow,0,nprow)l_ncolsc = NUMROC(1,nb,mycol,0,npcol)call DESCINIT ( descc, n, 1, nb, nb, 0, 0, context, l_nrowsc, info )

! ----- Allocate LHS, RHS, pivot, and solution -----! (omitted)

Page 295: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

295

www.vnij.comCh. 10 線形演算子とジェネリック関数Linear Algebra Operators and Generic Functions

! ----- Initialize LHS and RHSdo i= 1, n

val = i*100.0/ncall PDELSET (c,i,1,descc,val)

enddo

do j = 1, ndo i = 1, n

if (i.eq.j) thenval = 20.

elseval = 0.

endifcall PDELSET (a,i,j,desca,val)

enddoenddo

! ----- Do the work -----call PDGETRF ( n, n, a, 1, 1, desca, ipiv, info )call PDGETRS ( 'n', n, 1, a, 1, 1, desca, ipiv, c, 1, 1,

descc, info )

! ----- Reassemble solution on all processors. Print on 0do i= 1, n

call PDELGET ('A',' ',solution(i),c,i,1,descc)enddo

if (iam.eq.0) then write (6,*) "SOLUTION: "

endif! ----- Cleanup arrays -----

deallocate (a,c,ipiv,solution)! ----- Exit BLACS cleanly -----

call BLACS_GRIDEXIT ( context )call BLACS_EXIT ( 0 )end

[Native ScaLAPACKの場合 2/2]

Ref. Tom Baring, ARSC

www.arsc.edu/support/news/HPCnews.shtml

Page 296: IMSL ライブラリ 利用者向け講習会 - my.fit.ac.jp · • IMSL Cライブラリv6.0 – ... User’s Guide Math/Library P.86 IMSL Fortran. 31  IMSL Fortran

296

www.vnij.com

どうも有難うございました。

日本ビジュアル ニューメリックス株式会社

TEL:03-5211-7760

FAX:03-5211-7769

E-mail:[email protected]