Hi, I have a matrix
T =
1 0
1 1
and i want to generate this matrix
T =
1 0 0 0
1 1 0 0
0 1 1 0
0 0 1 1
please note that T is not exactly repeating at diagonal. Can anyone help me with this ? thank you

 採用された回答

Andrei Bobrov
Andrei Bobrov 2017 年 9 月 7 日
編集済み: Andrei Bobrov 2017 年 9 月 7 日

2 投票

T = [1,0;1,1];
N = 4;
[~,d] = spdiags(T);
out = full(spdiags(ones(N,numel(d)),d,N,N));
or
out = triu(tril(ones(N),sum(T(1,:))-1),1-sum(T(:,1)));

2 件のコメント

Image Analyst
Image Analyst 2017 年 9 月 7 日
More general than my method. Because he didn't give any rules, I was going to just give the very simple and straightforward (but snarky) answer of
T = [...
1 0 0 0
1 1 0 0
0 1 1 0
0 0 1 1]
Stephen23
Stephen23 2017 年 9 月 7 日
@Image Analyst: nice. It fits the given explanation perfectly :)

サインインしてコメントする。

その他の回答 (2 件)

Stephen23
Stephen23 2017 年 9 月 7 日

3 投票

I suspect you might want something like this:
>> T = [1,0;1,1];
>> N = 4;
>> R = zeros(1,N);
>> C = zeros(1,N);
>> R(1:size(T,1)) = T(:,1);
>> C(1:size(T,2)) = T(1,:);
>> toeplitz(R,C)
ans =
1 0 0 0
1 1 0 0
0 1 1 0
0 0 1 1
>>
but without a clear explanation of the algorithm that generates the output matrix from the input matrix, this is just a guess.

2 件のコメント

Shajeel Iqbal
Shajeel Iqbal 2017 年 9 月 7 日
Yes that's what i want. thank you
Andrei Bobrov
Andrei Bobrov 2017 年 9 月 7 日
+1. Very good method!

サインインしてコメントする。

KSSV
KSSV 2017 年 9 月 7 日

1 投票

T = ones(4,1) ;
K = diag(T)+diag(T(1:end-1),-1)

カテゴリ

ヘルプ センター および File ExchangeOperating on Diagonal Matrices についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by