如何在 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)
将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)