0
proc iml;

call randseed(4545); * initialize the stream (like streaminit);
x = J(5000,1,.); * pre-allocate space for random numbers;
call randgen(x,'normal',0,1); * fill x with N(0,1) deviates;
y = y + (x**2 - 3*x**3 + 5x < 1);
p = y / 5000;  * MEAN acts on each matrix column;
se = sqrt(y*(1-y)/5000); * VAR, but not STD or STDERR, also acts on columns;
print "IML STEP: estimated probability is" p
"with standard error" se;  * use PRINT, not PUT;

x**2 - 3*x**3 + 5x が 1 未満である確率を推定するために、モンテカルロ積分を proc iml と使用しようとしています。何が間違っていますか? ちなみに、Do ループは許可されていません。

4

2 に答える 2

1

ここで多くのことが間違っています。Rick が言うように、これは宿題の問題のように感じられるので、解決策は投稿しません。考えるべきことがいくつかあります。

  1. 通常のトライアルは、おそらくあなたが探しているものではありません。関数は数直線全体で定義されています。abs(x) > 3 で ax~N(0,1) を取得する可能性は低いです。
  2. Rick は、定義する前に y を使用していると述べています。
  3. 行列演算の代わりに要素ごとの演算を見てください。これらを関数で使用します。
  4. 5xは有効な操作ではありません。
  5. 平均を行うには、set reduction [:] を検討してください。
  6. SEの式が正しいとは思いません。 http://en.wikipedia.org/wiki/Standard_error
于 2014-05-09T16:14:45.920 に答える
0

これはおそらく宿題の問題なので、完全な答えを出すつもりはありません。しかし、私の最初のヒントは、Y がどうあるべきかを考えることです。これは、ランダムに選択された観測値が平面の特定の領域内にあるかどうかを示す指標変数 (0/1) であると想定されています。

2 番目のヒントは、式の右辺に未定義の変数を使用できないことを覚えておくことです。そのため、「y + (f(x)<1)」は有効なベクトル式ではありません。幸運を!

于 2014-05-09T10:11:36.250 に答える