統計ツールボックスの TINVを使用してMatlabでこれを行う方法は次のとおりです。
%#自由度を選択df = 4; %#必要に応じてdfの配列を選択することもできます%#100,000の一様分布のランダム変数のベクトルを作成しますsuni = rand(100000,1);%#対応するt値を検索しますout = tinv(uni、df);
Matlabの最新バージョンでは、 TRNDを使用して乱数を直接作成することもできます。
out = trnd(100000、df);
これが out
EDIT Re:mergedquestionのヒストグラムです
Matlabには、ラプラス分布から数値を描画するための組み込み関数がありません。ただし、適切に記述された実装を提供するMatlab FileExchangeの関数 LAPRNDがあります。
簡単な答え:Rを使用して、 rt(n、df)による
df
自由度の$ t $分布の n
変数を取得します。コード>。 Rを使用しない場合は、使用する言語を記述でき、他の人が正確に何をすべきかを指示できる可能性があります。
$ t $分布にRまたは組み込みの乱数ジェネレーターを備えた別の言語を使用していないが、分位関数、$ Qにアクセスできる場合$、$ t $分布の場合、$ [0,1] $で均一な確率変数$ U $を生成でき、$ Q(U)$は$ t $分布に従います。
それ以外の場合は、ウィキペディアページのこの簡単なセクションをご覧ください。
ウィキペディアの記事を見て、ラプラス分布から確率変数を生成する関数を作成しました。
function x = laplacernd(mu、b、sz)%LAPLACERNDラプラス確率変数の生成%% x = LAPLACERND(mu、b、sz)はラプラスから確率変数を生成します%パラメータmuおよびbを持つ分布。 szは、返される確率変数の%のサイズを表します。ラプラス分布については、[1]を参照してください。%% [1] http://en.wikipedia.org/wiki/Laplace_distribution %% by Ismail Ari、2011if nargin < 1%1/2 mu = 0でスケーリングされた指数分布に等しい。 endif nargin < 2 b = 1; endif nargin < 3 sz = 1; endu = rand(sz)-0.5; x = mu-b * sign(u)。* log(1-2 * abs(u));
これを使用するためのコードスニペットです
clc、clearmu = 30; b = 2; sz = [50000 1]; x = laplacernd( mu、b、sz); hist(x、100)
Matlabで見つけた最良の(実行が最も速く、コーディングが最も速くない)無料のソリューションは、RのMATHLIB_STANDALONEcライブラリをmex関数でラップすることでした。これにより、Rのt分布PRNGにアクセスできます。このアプローチの利点の1つは、同じトリックを使用して非心t分布から変量を取得できることです。
2番目に優れた無料のソリューションは、オクターブの trnd aの実装を使用することでした。 >。オクターブからの移植は、私にとってcコードをラップするよりも手間がかかることがわかりました。
私の好みでは、 rand
を介した均一な生成と tinv
を介した反転の使用は非常に遅すぎました。 YMMV。
t分布から乱数を生成することについての質問に答えて説明したのと同じアプローチを使用できます。最初に(0,1)から一様分布の乱数を生成し、次にリンク先のWikipediaの記事に記載されているラプラス分布の逆累積分布関数を適用します。