如何迭代平均 matlab 矩阵中的元素明智的连续列以创建逐渐变大的中点矩阵?

How to iteratively average element wise contiguous columns in a matlab matrix to create a progressively larger midpoint matrix?

在尝试使用 midpoint method to create geodesics on a surface 时,但我对迭代更新矩阵所需的 Matlab 语法不满意,该矩阵包含嵌入在 R3 中的表面上的点,因此由 3 行和 n 组成第一个元素为 A[:,1],最后一个元素为 A[:,n].

的列

最初会在 XY 平面上沿一条直线选择两个点。 XY 平面 运行 通过 A[:,1] 和 A[:,n] 的线段上的多个点将使用函数 f(x,y) 投影到表面上,这样我们就结束了与初始矩阵一起使用,第一行包含 X 轴上的多个坐标;第二行,Y轴坐标;第三行是 f(x,y) 各点的曲线高度。每列是一个点。

因此,如果前两列是 A[:,1] 和 A[:,2],我想获得一个更新后的矩阵,其中第一列 A[:,1] 和第二列是 A[:,1] 和 A[:,2] 的逐项平均值。换句话说,列 (x) 的第一个条目将是第一列和第二列的第一个条目的平均值;第二个(y)和第三个(z)条目相同。在另一端,矩阵将以倒数第二列中的 A[:,n - 1] 和 A[:,n] 以及最后一列中的 A[:,n] 的平均值结束。

然后将进行最小化步骤以将每一列投影到曲面 f(x,y),然后再次开始相同的平均过程。

请注意,每走一步矩阵都会增长一列。

从逻辑上讲,这个过程将在函数的循环中。

我想问一下如何迭代地实现平均步骤,例如第一步从

A =

   0   2   1   4
   1   3   3   2
   1   2   2   2

A =
     0   1     1.5   2.5    4    
     1   2     3     2.5    2    
     1   1.5   2     2      2

接受答案后,这是代码:

A = [0, 2, 1, 4; 1, 3, 3, 2; 1, 2, 2, 2]
A = [A(:,1), (A(:,1:end-1) + A(:,2:end))/2, A(:,end)]

以下行根据您的描述更新 A。但是,由于 A 的列数增加了(如您所知),您最好预先分配它并稍微调整以下分配(这将进入 for 循环)。

A = [A(:,1), (A(:,1:end-1) + A(:,2:end))/2, A(:,end)];

但是,您可能想检查 Image Processing Toolbox, such as imfilter 中的某些功能。