将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中这样做的简短方法是什么?
答案 0 :(得分:2)
这是一种使用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)