Сглаживание неровных участков
Я хочу нарисовать несколько сюжетов в Matlab.
Детали: Для класса 1p(x|c1) равномерно для x между [2, 4] с параметрами a = 1 и b = 4. Для класса 2p(x|c2) экспоненциально с параметром lambda = 1. Помимо p(c1) = p(c2) = 0,5, я хотел бы нарисовать набросок двух плотностей классов, умноженных на P(c1) и P(c2) соответственно, в зависимости от x, четко показывая границу оптимального решения (или границы).
У меня есть решение этой проблемы, это то, что автор сделал (и я хочу получить), но нет кода Matlab, поэтому я хочу сделать все это сам.
И это то, что я нарисовал.
И это код MATLAB, который я написал.
x=0:1:8;
pc1 = 0.5;
px_given_c1 = exppdf(x,1);
px_given_c2 = unifpdf(x,2,4);
figure;
plot(x,px_given_c1,'g','linewidth',3);
hold on;
plot(x,px_given_c2,'r','linewidth',3);
axis([0 8 0 0.5]);
legend('P(x|c_1)','P(x|c_2)');
figure;
plot(x,px_given_c1.*pc1,'g','linewidth',3);
hold on;
plot(x,px_given_c2.*(1-pc1),'r','linewidth',3);
axis([0 8 0 0.5]);
legend('P(x|c_1)P(c_1)','P(x|c_2)P(c_2)');
Как видите, они почти незнакомые, но у меня возникла проблема с этим равномерным распределением, которое нарисовано красным. Как я могу это изменить?
1 ответ
Вы должны вероятно изменить x=0:1:8;
что-то вроде x=0:1e-3:8;
или даже x=linspace(0,8,1000);
иметь более тонкую прорисовку. Это увеличивает количество точек в векторах (и, следовательно, отрезках), которые Matlab будет использовать для построения графика.
Объяснение: Matlab работает с отрезками при построении графиков!
Письменно x=0:1:8;
Вы создаете вектор [0 1 2 3 4 5 6 7 8]
это имеет длину 9, и, применяя exppdf
а также unifpdf
соответственно вы создаете два вектора одинаковой длины, полученных из исходного вектора. Так что в основном вы получаете векторы [exppdf(0) exppdf(1) ... exppdf(8)]
а также [unifpdf(0) unifpdf(1) ... unifpdf(8)]
,
Когда вы выпускаете plot
Затем команда Matlab строит только линейные сегменты (8 из них в данном случае, потому что есть 9 точек):
- от (x (1), px_given_c1 (1)) до (x (2), px_given_c1 (2)),
- ...
- от (x (8), px_given_c1 (8)) до (x (9), px_given_c1 (9)).