让我们考虑以下矩阵
A=[1 2 3 4;2 4 6 7;3 1 9 8]
A =
1 2 3 4
2 4 6 7
3 1 9 8
可以使用
轻松计算其大小n,m]=size(A)
n =
3
m =
4
让我们考虑一下我们想得到以下向量v
v(1)=A(1,1);
v(2)=(A(2,1)+A(1,2)/2;
v(3)=(A(3,1)+A(2,2)+A(1,3))/3;
v(4)=(A(3,2)+A(2,3)+A(1,4))/3;
v(5)=(A(3,3)+A(2,4))/2;
v(6)=A(3,4);
我们肯定需要大小
的矢量v=zeros(n+m-1,1);
我计算了前两个似乎微不足道的元素
v(1)=A(1,1);
v(2)=(A(2,1)+A(1,2))/2;
但所有其他我需要使用循环来实现,请注意我需要它使用相同原理的一般矩阵,而不是精确的这种矩阵
我的开始代码是
function [v]=dehankel(A);
%convert matrix A to vector using diagonal averaging
[n,m]=size(A);
v=zeros(n+m-1,1);
v(1)=A(1,1);
v(2)=(A(2,1)+A(1,2))/2;
for i=2:3
for j=2:3
请帮我如何继续
答案 0 :(得分:4)
A =
1 2 3 4
2 4 6 7
3 1 9 8
[n,m]=size(A);
v=zeros(n+m-1,1);
i = 1;
for d = -(n-1):(m-1)
v(i) = mean(diag(flipud(A),d));
i = i+1;
end
答案 1 :(得分:2)
它可以在没有循环的情况下完成(我承认,这不是最易读的代码):
B = zeros(size(A,1)+size(A,2)-1, size(A,2));
B(bsxfun(@plus, (1:size(A,1)).', (0:size(A,2)-1)*(size(A,1)+size(A,1)+1))) = A;
v = sum(B.')./[1:size(A,1) size(A,1):-1:1];