1

まず第一に、私は matlab とこのフォーラムが初めてなので、無知を許してください。

以下の方法で標準的なウィンナープロセスを生成します(自分で作ったので、ばかげているか間違っているか知りたいです)。

s =0.0001; % stepsize
t = [0:s:T]; % divide interval into steps

G=sqrt(s)*randn(length(t),1); 

Y=cumsum(G);

今、私はいくつかのランダムな時間にその値を見つけたいと思っています:

u=rand(4,1)

私は(グーグルと忍耐で)次のようなことをすることを考え出しました

for i = 1:length(u)
   row(i) = find(t < u(i),1,'last');
end

次に、単純に Y から値を取り出しますが、より直接的な方法を見つけたいと思います。何か提案はありますか?

4

1 に答える 1

1

の各要素に対して基本的に行っているuことは、 の最大要素のインデックスを見つけることtです。次のワンライナーを試してください。

sum(bsxfun(@lt, repmat(t(:)', numel(u), 1), u(:)), 2)

これが行うことは次のとおりです。

  1. repmat各行が に等しいを使用して行列を生成しtます。
  2. bsxfunの対応する要素よりも少ない要素を使用して各行をチェックしuます。
  3. 各行のすべての 1 を累積して、基本的に最後の小さな要素のインデックスを提供します。

ちなみに、括弧( [])は入れる必要はありませんt = [0:s:T]。コロン演算子 ( :) は既にベクトルを出力しています。

于 2013-03-18T14:25:09.687 に答える