如何在 Matlab 中创建表示指数平均系统的矩阵?

How in Matlab to create matrix representing exponential averaging system?

w(n)表示为(1 - a)^n

我想创建以下 NxN 矩阵:

// Note that 1 = w(0)
1       0       0  ...  0       0
w(1)    1       0  ...  0       0
w(2)    w(1)    1  ...  0       0
.................................
w(n-1)  w(n-2)  ...     w(1)    1

问题:对于案例 a = 1/2,在 Matlab 中执行此操作的捷径是什么?

这是一种使用 bsxfun -

的方法
r = (1-a).^(0:N-1)
out = tril(bsxfun(@rdivide,r.',r))

样本运行-

>> a = 1/2;
>> N = 5;
>> r = (1-a).^(0:N-1);
>> tril(bsxfun(@rdivide,r.',r))
ans =
            1            0            0            0            0
          0.5            1            0            0            0
         0.25          0.5            1            0            0
        0.125         0.25          0.5            1            0
       0.0625        0.125         0.25          0.5            1

在具有自动广播功能的 MATLAB 2016b 版本之后,最后一步将是 -

out = tril(r.'./r)