用于累积功率的Matlab函数



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;

使用cumprodtriu:

% 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

这假设您想要一个大小为NxN的矩阵,并且r是您想要计算的幂的值。

FIX:第13行M(i,i:end) = ary(i:end);中说明的先前版本,但分配需要始终从ary的第一个位置开始

最新更新