2012-07-03 28 views
0

我知道通過使用CDF的轉化一個分佈到另一個的過程。但是,我想知道在Matlab中是否有現成的函數可以執行此任務?函數將經驗分佈轉換爲Matlab中的均勻分佈?

我的另一個相關問題是,我用Matlab中的ecdf()函數計算了我的經驗值的CDF,用於分佈值爲10,000的值。但是,我從中獲得的輸出僅包含9967值。我如何獲得我的CDF的總計10,000值?謝謝。

回答

1
for t=1:nT 
    [f_CDFTemp,x_CDFTemp]=ecdf(uncon_noise_columndata_all_nModels_diff_t(:,1,t)); % compute CDF of empirical distribution 
    f_CDF(1:length(f_CDFTemp),t) = f_CDFTemp; % store the CDF of different distributions with unequal size in a new variable 
    x_CDF(1:length(x_CDFTemp),t) = x_CDFTemp; 
    b_unifdist=4*t; 
    [Noise.N, Noise.X]=hist((a_unifdist+(b_unifdist-a_unifdist).*f_CDF(:,t)),100); % generate the uniform distribution by using the CDF of empirical distribution as the CDF of the uniform distribution 
    generatedNoise(:,:,t)=emprand(Noise.X,nRows,nCol); % sample some random numbers from the uniform distribution generated above by using 'emrand' function 
end 
1

正如你所說的,所有你需要的是CDF。可以用erf Matlab函數表示CDF of a normal distribution

未經測試的例子:

C = @(x)(0.5 * (1 + erf(x/sqrt(2)))); 

x = randn(1,1000); % Zero-mean, unit variance 
y = C(x);   % Approximately uniform 
+0

如果我有一個正態的經驗CDF,但沒有通過分析公式扣除,那麼你的代碼將如何改變?謝謝。 – Pupil

+0

@S_H:我不確定自己明白。分配是正常的,否則不正常。你在問如何改變不同的均值和方差? –

+0

讓我們換一種方式。我有一個經驗分佈,我想將其轉化爲均勻分佈。我有這種經驗分佈的CDF。在那種情況下,你的答案會如何改變?謝謝! – Pupil