2016-11-06 110 views
0

我有一個矢量在某些地方有1,我想用矢量創建一個對角線。該載體被稱爲one_vec_two爲什麼'spdiags`不能將矢量放在正確的位置?

n = 4; 

one_vec_two = zeros(n*n, 1); 
one_vec_two(1,1) = 1; 
for k=0:(n-1) 
    one_vec_two(k*n+1, 1) = 1; 
end 

non_zero_vecs = [one_vec_two]; 
placement = [n-1]; 

A = spdiags(non_zero_vecs, placement, n*n, n*n); 
fullA = full(A); 
disp(A) 

矢量one_vec_two的第一個元素是1:

>> one_vec_two(1) 

ans = 

    1 

而且,我放置起始於對角線n-1的載體,它是3。但是,當我到第4列時,我沒有看到它:

>> fullA(1,4) 

ans = 

    0 

爲什麼MATLAB不把我的矢量放在正確的位置?

回答

1

按照該文檔爲spdiag

Note In this syntax, if a column of B is longer than the diagonal it is replacing, and m >= n, spdiags takes elements of super-diagonals from the lower part of the column of B, and elements of sub-diagonals from the upper part of the column of B.

它被放置部分你的載體的進入指定的位置。因此結果如預期。

看起來你想要的東西,像

A = spdiags(non_zero_vecs([end-placement+1:end 1:end-placement]), placement, n*n, n*n) 

A = spdiags(non_zero_vecs, -placement, n*n, n*n)' 

這都做同樣的事情,只是方式略有不同。

+0

我明白了......謝謝 – Sother

相關問題