我正在努力完成这个任务:
创建一个以 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/