Matlab递归函数生成矩阵

MEV*_*000 3 recursion matlab 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
Run Code Online (Sandbox Code Playgroud)

我已经想出了这个:

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
Run Code Online (Sandbox Code Playgroud)

但输出似乎在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
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Dan*_*iel 7

我认为现有的两个答案都可以简化.对于递归解决方案使用:

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
Run Code Online (Sandbox Code Playgroud)

重要的一点是n将中间结果的列索引两次以复制它,一次进入h(:,1:n)和进入一次h(:,n:end).

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

bsxfun(@max,[0:N-1].',[0:N-1 N-2:-1:0])
Run Code Online (Sandbox Code Playgroud)