matlab - 平滑粗糙的地 block

标签 matlab uniform exponential-distribution

我想在 Matlab 中画一些图。

详细信息:对于 1 类,p(x|c1) 对于 x 之间是均匀的>[2, 4],参数 a = 1b = 4。对于 2 类,p(x|c2) 是参数 lambda = 1 的指数。除了 p(c1) = p(c2) = 0.5 我还想绘制两个类密度乘以 P(c1)P( c2)分别为 x 的函数,清楚地显示最佳决策边界(或多个边界)。

我有这个问题的解决方案,这就是作者所做的(我想得到),但是没有 Matlab 代码,所以我想自己做。 p>

IMAGE 1

这就是我画的。

IMAGE 2

这是我编写的 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],并通过应用exppdfunifpdf 分别创建两个从原始向量导出的相同长度的向量。所以基本上你得到向量 [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/

相关文章:

matlab - 如何更改矩阵中多个点的值?

matlab - 命令行读取 DNG 图像

python - 如何在 python 中使用 MLE 来拟合双指数分布?

python - 如何判断我的指数曲线在 SciPy 中的拟合效果如何?

python - Python 给定范围内值的指数分布

performance - Matlab - 是否存在一种更快的方法来为大矩阵赋值?

matlab - 是否有内置(无 for 循环)方法使用索引矩阵将向量范围放入元胞数组中?

c++ - boost::random 和 boost:uniform_real 适用于 double 而不是 float ?

c++ - 使用 tr1 在 C++ 中生成超出范围的随机数

javascript - 统一 JS 单选按钮不改变状态