【问题标题】:How to iteratively average element wise contiguous columns in a matlab matrix to create a progressively larger midpoint matrix?如何迭代地平均matlab矩阵中的元素连续列以创建一个逐渐变大的中点矩阵?
【发布时间】:2020-05-29 13:51:36
【问题描述】:

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

最初将在 XY 平面上沿一条线选择两个点。沿着穿过 A[:,1] 和 A[:,n] 的 XY 平面上的线段的多个点将使用函数 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)]

【问题讨论】:

  • 那么你的问题是什么?您是在要求别人从头开始为您编写代码吗?

标签: matlab matrix linear-algebra


【解决方案1】:

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

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

但是,您可能需要检查Image Processing Toolbox 中的某些功能,例如imfilter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2015-01-08
    • 2016-08-13
    • 2015-10-23
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多