我想在 Matlab 中画一些图。
详细信息:对于 1 类,p(x|c1) 对于 x 在 之间是均匀的>[2, 4],参数 a = 1 和 b = 4。对于 2 类,p(x|c2) 是参数 lambda = 1 的指数。除了 p(c1) = p(c2) = 0.5 我还想绘制两个类密度乘以 P(c1) 和 P( c2)分别为 x 的函数,清楚地显示最佳决策边界(或多个边界)。
我有这个问题的解决方案,这就是作者所做的(我想得到),但是没有 Matlab 代码,所以我想自己做。 p>
这就是我画的。
这是我编写的 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)');
如您所见,它们几乎是相似的,但我对这种以红色绘制的均匀分布有疑问。我该如何更改它?
最佳答案
您可能应该将 x=0:1:8;
更改为 x=0:1e-3:8;
甚至 x=linspace (0,8,1000);
进行更精细的绘图。这会增加向量中的点数(因此线段)Matlab 将用于绘图。
说明:Matlab 在绘图时使用线段!
通过编写 x=0:1:8;
您可以创建长度为 9 的向量 [0 1 2 3 4 5 6 7 8]
,并通过应用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))。
关于matlab - 平滑粗糙的地 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13309089/