在 Matlab 中从矩阵 A(Vvalues,Xvalues,W(v,x)) 获得 P(x)=integrate W(v,x)dv?

Obtain P(x)=integrate W(v,x)dv, from the matrix A(Vvalues,Xvalues,W(v,x)) in Matlab?

好的,首先要澄清一下:请给我一个可以用于我的问题的算法(但是另外获得一个 Matlab 代码会很好)。我在这里没有 post 任何代码,因为我不知道如何为此编写算法。

MATLAB 矩阵 A 有三列,vxW(v,x))v

范围内
v_min <= v <= v_max

x

范围内
x_min <= x <= x_max 

前两列是vx的所有不同整数组合,第三列是W(v,x)对应的值。

例如对于 v=[-1 0 1]x=[-1 0 1],我有 -

     v  x  W(v,x) 
A =  -1 -1  3 
     -1  0  4 
     -1  1  0 
      0 -1  10 
      0  0  1 
      0  1  25 
      1 -1  2 
      1  0  1 
      1  1  5

如何从 Matlab 中的这个矩阵获得 P(x)=integral W(v,x)dv 的近似值?显然,积分应该被这个矩阵上的一些求和有效地代替,但是哪个呢?

W(v,x)是物理系统的相space密度,P(x)是位置x的边缘分布。

奖金问题:我如何根据 vx 绘制 W(v,x) 本身(但请作为带有颜色的热图之类的东西,不要使用 scatter3...)?

如果我对你的问题理解正确,我们可以这样做:

  1. 获取积分:有built-in函数trapz获取数值积分。现在我们需要创建 function P(x) - 因为我们需要为当前 x 获取 trapz。这是:

    fun = @(x) trapz( A(find(A(:,2)==x),3 ))
    

    find函数为当前x选择A的索引,然后使用trapz求积分。 即匿名函数returns对W(v,x)dv的当前值x的整数值:

    fun(-1)
    ans =
       12.5000
    
  2. 第二个问题:关于绘图。 我们可以使用 surf 函数来获取 3D 表面。但是这个函数使用坐标矩阵,而不是向量,所以让 reshape 查看 A 矩阵:

    v = reshape( A(:,1), [3,3])
    x = reshape( A(:,2), [3,3])
    W = reshape( A(:,3), [3,3])
    surf(v,x,W)
    

    我们在这里使用 [3, 3]: 我想绘制 v 作为 X 轴,x 作为 Y 轴,W 作为 Z。v 有 3 个特定值,x 也有 3 个。所以我们需要创建 3x3 值矩阵! 由于点数少,不是很漂亮,但希望是你想要的。