多変量スチューデントt-分布から疑似乱数ベクトルを生成

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

ホーム > 製品 > nAG数値計算ライブラリ > サンプルソースコード集 > 多変量スチューデントt-分布から疑似乱数ベクトルを生成 (C言語/C++)

Keyword: 多変量スチューデントt-分布, 疑似乱数ベクトル

概要

本サンプルは多変量スチューデントt-分布から疑似乱数ベクトルの生成を行うC言語によるサンプルプログラムです。 本サンプルは以下に示される確率密度関数をもつ多変量スチューデントt-分布から10個の疑似乱数を生成し出力します。

多変量スチューデントt-分布のデータ 

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

出力結果

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

この出力例をダウンロード
nag_rand_matrix_multi_students_t (g05ryc)  Example Program Results

     1.4957  -15.6226   -3.8101    0.1294 
    -1.0827   -6.7473    0.6696   -0.0391 
     2.1369    6.3861   -5.7413    0.0140 
     2.2481  -16.0417   -1.0982    0.1641 
    -0.2550    3.5166   -0.2541   -0.0592 
     0.9731   -4.3553   -4.4181    0.0043 
     0.7098   -3.4281    1.1741    0.0586 
     1.8827   23.2619    1.5140   -0.0704 
     0.9904   22.7479    0.1811   -0.0893 
     1.5026    2.7753   -2.2805   -0.0112 

  • 3~12行目に生成された疑似乱数が出力されています。

ソースコード

(本関数の詳細はnag_rand_matrix_multi_students_t のマニュアルページを参照)

※本サンプルソースコードは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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129

このソースコードをダウンロード
/* nag_rand_matrix_multi_students_t (g05ryc) 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*pdx + I):(I*pdx + J)]

int main(void)
{
  /* Integer scalar and array declarations */
  Integer exit_status = 0;
  Integer i, j, lstate, lr, x_size;
  Integer *state = 0;
  Integer pdx;

  /* nAG structures */
  NagError fail;
  Nag_ModeRNG mode;

  /* Double scalar and array declarations */
  double *r = 0, *x = 0;

  /* Use column major order */
  Nag_OrderType order = Nag_RowMajor;

  /* Set the number of variables and variates */
  Integer m = 4;
  Integer n = 10;

  /* Input the covariance matrix */
  double c[] = { 1.69e0, 0.39e0, -1.86e0, 0.07e0,
    0.39e0, 98.01e0, -7.07e0, -0.71e0,
    -1.86e0, -7.07e0, 11.56e0, 0.03e0,
    0.07e0, -0.71e0, 0.03e0, 0.01e0
  };
  Integer pdc = 4;

  /* Input the means */
  double xmu[] = { 1.0e0, 2.0e0, -3.0e0, 0.0e0 };

  /* Set the degrees of freedom */
  Integer df = 10;

  /* Choose the base generator */
  Nag_BaseRNG genid = Nag_Basic;
  Integer subid = 0;

  /* Set the seed */
  Integer seed[] = { 1762543 };
  Integer lseed = 1;

  /* Initialize the error structure */
  INIT_FAIL(fail);

  printf("nag_rand_matrix_multi_students_t (g05ryc)  "
         "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;
  }

  pdx = (order == Nag_ColMajor) ? n : m;
  x_size = (order == Nag_ColMajor) ? pdx * m : pdx * n;

  /* Calculate the size of the reference vector */
  lr = m * m + m + 2;

  /* Allocate arrays */
  if (!(r = nAG_ALLOC(lr, double)) ||
      !(x = nAG_ALLOC(x_size, 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;
  }

  /* Set up reference vector and generate N numbers */
  mode = Nag_InitializeAndGenerate;
  nag_rand_matrix_multi_students_t(order, mode, n, df, m, xmu, c, pdc, r,
                                   lr, state, x, pdx, &fail);
  if (fail.code != NE_NOERROR) {
    printf("Error from nag_rand_matrix_multi_students_t (g05ryc).\n%s\n",
           fail.message);
    exit_status = 1;
    goto END;
  }

  /* Display the variates */
  for (i = 0; i < n; i++) {
    printf("  ");
    for (j = 0; j < m; j++)
      printf("%9.4f%s", X(i, j), (j + 1) % 10 ? " " : "\n");
    if (m % 10)
      printf("\n");
  }

END:
  nAG_FREE(r);
  nAG_FREE(x);
  nAG_FREE(state);

  return exit_status;
}


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