MATLAB中是否有一个函数可以为给定标量r
:生成以下矩阵
1 r r^2 r^3 ... r^n
0 1 r r^2 ... r^(n-1)
0 0 1 r ... r^(n-2)
...
0 0 0 0 ... 1
其中每一行的行为有点像CUMSUM函数的功率模拟?
您可以使用隐式展开和元素幂直接计算每个项,然后应用triu
:
n = 5; % size
r = 2; % base
result = triu(r.^max((1:n)-(1:n).',0));
或者,可能会快一点,因为它不会计算不需要的功率:
n = 5; % size
r = 2; % base
t = (1:n)-(1:n).';
u = find(t>=0);
t = t(u);
result = zeros(n);
result(u) = r.^t;
使用cumprod
和triu
:
% parameters
n = 5;
r = 2;
% Create a square matrix filled with 1:
A = ones(n);
% Assign the upper triangular part shifted by one with r
A(triu(A,1)==1)=r;
% cumprod along the second dimension and get only the upper triangular part
A = triu(cumprod(A,2))
好吧,cumsum
累加了一个向量的和,但你要求的是一个特殊设计的矩阵,所以比较有点问题。。。。无论如何,如果这是一个常见的特殊情况三角矩阵,可能会有一个函数(对不起,我的数学知识在这里很有限(,但我们也可以很容易地(有效地=((:
N = 10;
r = 2;
% allocate arry
ary = ones(1,N);
% initialize array
ary(2) = r;
for i = 3:N
ary(i) = ary(i-1)*r;
end
% build matrix i.e. copy the array
M = eye(N);
for i = 1:N
M(i,i:end) = ary(1:end-i+1);
end
这假设您想要一个大小为N
xN
的矩阵,并且r
是您想要计算的幂的值。
FIX:第13行M(i,i:end) = ary(i:end);
中说明的先前版本,但分配需要始终从ary
的第一个位置开始