Keyword: Gumbel-Hougaard copula, 疑似乱数
概要
本サンプルはGumbel-Hougaard copulaから疑似乱数行列の生成を行うC言語によるサンプルプログラムです。 本サンプルは以下の式で表わされるGumbel-Hougaard copulaのC2.4の分布をもつ13の4次元の疑似乱数を生成し出力します。
※本サンプルはnAG Cライブラリに含まれる関数 nag_rand_copula_gumbel() のExampleコードです。本サンプル及び関数の詳細情報は nag_rand_copula_gumbel のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
出力結果
(本関数の詳細はnag_rand_copula_gumbel のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
この出力例をダウンロード |
nag_rand_copula_gumbel (g05rkc) Example Program Results Uniform variates with copula joint distrbution 0.936870 0.867579 0.971315 0.885436 0.113937 0.306325 0.862550 0.274299 0.441848 0.221141 0.504169 0.498465 0.790226 0.600734 0.749311 0.647411 0.836246 0.984692 0.880681 0.907863 0.178145 0.460986 0.128349 0.132867 0.127161 0.175970 0.180519 0.038261 0.447304 0.217106 0.166239 0.130033 0.889915 0.900532 0.884357 0.887901 0.906913 0.868125 0.844986 0.880437 0.222224 0.549883 0.496503 0.648758 0.380733 0.596745 0.509628 0.357674 0.844530 0.775454 0.866096 0.894776
- 3~16行目に生成された疑似乱数が出力されています。
ソースコード
(本関数の詳細はnag_rand_copula_gumbel のマニュアルページを参照)
※本サンプルソースコードはnAG数値計算ライブラリ(Windows, Linux, MAC等に対応)の関数を呼び出します。
サンプルのコンパイル及び実行方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
このソースコードをダウンロード |
/* nag_rand_copula_gumbel (g05rkc) Example Program. * * CLL6I261D/CLL6I261DL Version. * * Copyright 2017 Numerical Algorithms Group. * * Mark 26.1, 2017. */ /* Pre-processor includes */ #include <stdio.h> #include <math.h> #include <nag.h> #include <nag_stdlib.h> #include <nagg05.h> #define X(I, J) x[order == Nag_ColMajor?((J-1)*pdx + I-1):((I-1)*pdx + J-1)] int main(void) { /* Integer scalar and array declarations */ Integer exit_status = 0; Integer i, j, lstate, pdx, sdx; Integer *state = 0; /* Double scalar and array declarations */ double *x = 0; /* nAG structures */ NagError fail; /* Use row major order */ Nag_OrderType order = Nag_RowMajor; /* Set the number of variables and variates */ Integer n = 13, m = 4; /* Choose the base generator */ Nag_BaseRNG genid = Nag_Basic; Integer subid = 0; /* Set the seed */ Integer seed[] = { 1762543 }; Integer lseed = 1; /* Set the theta parameter value */ double theta = 2.4e0; /* Initialize the error structure */ INIT_FAIL(fail); printf("nag_rand_copula_gumbel (g05rkc) Example Program Results\n\n"); /* Get the length of the state array */ lstate = -1; nag_rand_init_repeatable(genid, subid, seed, lseed, state, &lstate, &fail); if (fail.code != NE_NOERROR) { printf("Error from nag_rand_init_repeatable (g05kfc).\n%s\n", fail.message); exit_status = 1; goto END; } /* Set matrix size and principal dimension according to storage order */ pdx = (order == Nag_ColMajor) ? n : m; sdx = (order == Nag_ColMajor) ? m : n; /* Allocate arrays */ if (!(x = nAG_ALLOC((pdx * sdx), double)) || !(state = nAG_ALLOC(lstate, Integer))) { printf("Allocation failure\n"); exit_status = -1; goto END; } /* Initialize the generator to a repeatable sequence */ nag_rand_init_repeatable(genid, subid, seed, lseed, state, &lstate, &fail); if (fail.code != NE_NOERROR) { printf("Error from nag_rand_init_repeatable (g05kfc).\n%s\n", fail.message); exit_status = 1; goto END; } /* Generate variates */ nag_rand_copula_gumbel(order, state, theta, n, m, x, pdx, sdx, &fail); if (fail.code != NE_NOERROR) { printf("Error from nag_rand_copula_gumbel (g05rkc).\n%s\n", fail.message); exit_status = 1; goto END; } /* Display the results */ printf("Uniform variates with copula joint distrbution\n"); for (i = 1; i <= n; i++) { printf(" "); for (j = 1; j <= m; j++) printf("%9.6f%s", X(i, j), j < m ? " " : "\n"); } END: nAG_FREE(x); nAG_FREE(state); return exit_status; }