我有一組從均勻分布中生成的資料。現在我想將相應的直方圖擬合為均勻分布,這樣在該直方圖上繪制了一個“ㄇ”形狀的線。我嘗試使用 MATLAB 內置函式來擬合它,但是histfithistfit沒有均勻分布的這種選項。我該怎么做?
data = unifrnd(-100,100,1000,1);
%% MATLAB built-in function: 'histfit'
figure(1);
hh = histfit(data); % No options for 'histfit' to fit data to an uniform distribution
%% Manually fitting a histogram to an uniform distribution
figure(2);
numBars = length(hh(1).XData);
histogram(data, numBars);
% TODO: How to do next to plot a line that fits the data to an uniform distribution?
uj5u.com熱心網友回復:
由于區域 [a, b) 的均勻分布僅為 1/(ba),因此您可以定義一個函式來計算
x = -200:200;
y = unifdist(x, -100, 100);
figure;
plot(x, y)
function ret = unifdist(x, a, b)
ret = ones(length(x), 1)/(b-a);
ret(x < a | x >= b) = 0;
end
可能有一種更簡單、更快捷的方法可以做到這一點,但它確實有效。
uj5u.com熱心網友回復:
min(data)并max(data)給出均勻分布的兩個引數的估計值,假設data是均勻分布的。
請注意,這是一個有偏差的估計量,請參閱此處以進行校正以消除偏差(其中一個答案考慮了下限不為 0 的情況)。[鏈接感謝@flawr。]
uj5u.com熱心網友回復:
作為@CrisLuengo 答案的替代方案,您可以使用矩量法來估計a,b均勻分布的引數U[a,b]。以下方程足以求解引數。MoM 只是告訴我們將(樣本)均值和方差等同于分布均值和方差:
mean(samples) = (a b)/2, variance(samples) = (b-a)^2/12
這導致a, b = mean(samples) - sqrt(3 * variance(samples)). 在 MATLAB 中,您可以按如下方式計算:
m = mean(data);
v = var(data);
a = m - sqrt(3*v);
b = m sqrt(3*v);
要繪制這個,你可以定義向量
x = linspace(-lower_limit, upper_limit, number_of_points);
y = (a < x) .* (x < b) ./ (b - a);
plot(x, y, '-r');
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/410398.html
標籤:
下一篇:Matlab中如何分解方程?
