function out = kDiag(taille,diags)
% KDIAG - create a k-diagonal matrix
%
% Use :
% - out = kDiag(taille,diags)
%
% Example :
% >> kDiag(5,3)
% >> kDiag(5,[1,2,3])
% >> kDiag(5,[3,5,4,8,-1])
if length(diags)==1
diags = ones(diags,1);
end
nbdiag = length(diags);
% création d'une suite de taille nbdiag + 1
t = floor(nbdiag/2);
t = -t:t;
% première diagonale
M = eye(taille,taille)*diags(find(t==0));
% on efface de diags les infos sur la 1ère diag
diags(find(t==0))=[];
% on efface de la suite l'entrée = 0 pour ne pas planter diag plus bas.
t = t(t~=0);
% pour chaque diagonale demandée, on la calcule dans tmp et on la superpose à M
for i=1:nbdiag-1
tmp = diag(ones(taille,1),t(i))*diags(i);
M = M + tmp(1:end-abs(t(i)),1:end-abs(t(i)));
end
out = M;
Partager