如何在matlab中生成概率单纯形上的点?
How to generate points on probability simplex in matlab?
编辑:我想生成点 (x,y) 使得 x+y<=1。
[x,y] = meshgrid(0:.05:1, 0:.05:1);
是否可以使用上述结果的输出来生成(x,y) 使得x+y<=1。
你可以忽略下面的任何内容。我对我的问题感到困惑:)
以前的:
我想为 3 维 space 中的概率单纯形上的点绘制 Dirichlet 分布的密度函数,即对于 p = (p1, p2, p3),p1+p2+p3 = 1。分布是由
提供
f(p1, p2, p3) = c*p1^(a1)*p2^(a2)*p3^(a3)
其中 c 是固定的归一化常数。感谢任何帮助。
注意:p1+p2+p3=1 使得 p1>0, p2>0 p3>0 是 3 维平面,因此是 2 维平面。因此,可以在此 space.
上绘制函数
令 y = f(p1, p2, p3)。由于 p3 = 1 - p1 - p2,我们只需要绘制 y = f(p1, p2),这是一个二维函数。这个“2.5D”图形可以用 MATLAB 函数 mesh() 或 surf() 绘制。
如果有像 p1 + p2 < 1 这样的约束,只需让 y = 0 或 NaN 使 p1 + p2 >= 1。试着找出哪个使图形更漂亮。
I want to generate points (x,y) such that x+y<=1.
你的线路
[x,y] = meshgrid(0:.05:1, 0:.05:1);
是一个好的开始。它只保留 select 满足您条件的网格点。为此,您使用 logical indexing:
ind = x+y<=1;
x = x(ind);
y = y(ind);
您可以绘制这些点作为检查:
plot(x,y,'.')
axis square
编辑:我想生成点 (x,y) 使得 x+y<=1。
[x,y] = meshgrid(0:.05:1, 0:.05:1);
是否可以使用上述结果的输出来生成(x,y) 使得x+y<=1。
你可以忽略下面的任何内容。我对我的问题感到困惑:) 以前的: 我想为 3 维 space 中的概率单纯形上的点绘制 Dirichlet 分布的密度函数,即对于 p = (p1, p2, p3),p1+p2+p3 = 1。分布是由
提供f(p1, p2, p3) = c*p1^(a1)*p2^(a2)*p3^(a3)
其中 c 是固定的归一化常数。感谢任何帮助。
注意:p1+p2+p3=1 使得 p1>0, p2>0 p3>0 是 3 维平面,因此是 2 维平面。因此,可以在此 space.
上绘制函数令 y = f(p1, p2, p3)。由于 p3 = 1 - p1 - p2,我们只需要绘制 y = f(p1, p2),这是一个二维函数。这个“2.5D”图形可以用 MATLAB 函数 mesh() 或 surf() 绘制。
如果有像 p1 + p2 < 1 这样的约束,只需让 y = 0 或 NaN 使 p1 + p2 >= 1。试着找出哪个使图形更漂亮。
I want to generate points (x,y) such that x+y<=1.
你的线路
[x,y] = meshgrid(0:.05:1, 0:.05:1);
是一个好的开始。它只保留 select 满足您条件的网格点。为此,您使用 logical indexing:
ind = x+y<=1;
x = x(ind);
y = y(ind);
您可以绘制这些点作为检查:
plot(x,y,'.')
axis square