我知道通過使用CDF的轉化一個分佈到另一個的過程。但是,我想知道在Matlab中是否有現成的函數可以執行此任務?函數將經驗分佈轉換爲Matlab中的均勻分佈?
我的另一個相關問題是,我用Matlab中的ecdf()
函數計算了我的經驗值的CDF,用於分佈值爲10,000
的值。但是,我從中獲得的輸出僅包含9967
值。我如何獲得我的CDF的總計10,000
值?謝謝。
我知道通過使用CDF的轉化一個分佈到另一個的過程。但是,我想知道在Matlab中是否有現成的函數可以執行此任務?函數將經驗分佈轉換爲Matlab中的均勻分佈?
我的另一個相關問題是,我用Matlab中的ecdf()
函數計算了我的經驗值的CDF,用於分佈值爲10,000
的值。但是,我從中獲得的輸出僅包含9967
值。我如何獲得我的CDF的總計10,000
值?謝謝。
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
This is not exactly what you are looking for,但它顯示瞭如何做相反的事情。扭轉它不應該那麼糟糕。
正如你所說的,所有你需要的是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
謝謝,但我遇到了這個,同時問這個問題之前,搜索! – Pupil