Matlab递归函数生成矩阵

标签 matlab recursion matrix

我正在努力完成这个任务:

创建一个以 n 作为参数的递归函数,并创建一个像这样的矩阵,在本例中 n = 3:

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

我已经想出了这个:

function AA =  A(n)
    if n == 0
        AA (1,1) = 0;
    else
        AA = n*ones(n+1,2*n+1);
        AA(1:n, [1:n, n+3:end]) = A(n-1);
    end  
end

但是输出在 RHS 上似乎有一个奇怪的偏移:

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

有人可以帮忙吗?

最佳答案

我认为已经存在的两个答案都可以简化。对于递归解决方案,使用:

function AA =  A(n)
    if n == 0
        AA = 0;
    else
        h=A(n-1);
        AA = n*ones(n+1,2*n+1);
        AA(1:n,1:n)=h(:,1:n);
        AA(1:n,n+2:end)=h(:,n:end);
    end  
end

重点是对中间结果的列n进行两次索引复制,一次在h(:,1:n),一次在h(:,n:end).

如果您正在寻找矢量化/更快的解决方案,只需使用:

bsxfun(@max,[0:N-1].',[0:N-1 N-2:-1:0])

对于 MATLAB 2016b 或更高版本,implicit expansion可以使用:

max([0:N-1].',[0:N-1 N-2:-1:0])

关于Matlab递归函数生成矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35718995/

相关文章:

algorithm - 以(最多 2)个连续的 1 block 作为行的二元矩阵,计算其平方的迹

matlab - 查找Matlab中的每一行是否重复

matlab - 匿名函数中的 If-then-else

Javascript 创建 "Dicitonary-like"- 路径列表中的对象

python 3,递归,或在return语句中

java - 设置位图的旋转和位置

python - Numpy 追加到矩阵

matlab - 根据 NaN 值切割向量

matlab - 如何使用caffe matlab wrapper提取图像特征?

SQL Server - 使用递归外键进行级联 DELETE