我阅读了有关在MATLAB中正确使用内存的有趣文章。它是:Link at official website
在这里,我看到了一个例子:


A = diag(1e3,1e3);    % Full matrix with ones on the diagonal
As = sparse(A)        % Sparse matrix with only nonzero elements

我尝试在代码中实现它,并发现了有趣的时刻:A = diag(1e3,1e3)不会在对角线上创建矩阵!它仅使用一个非零元素创建零矩阵:
clear A
A = diag(1e3,1e3);
find(A);
ans =
     1001001

A(1001001)
ans =
        1000

好。我在帮助中阅读了有关diag函数的信息,并看到了以下内容:



好!因此,如果v由1个元素组成,则实际上不会创建对角矩阵!帮助时出错吗?
但。还有一个问题:为什么它会这样工作?
diag(5,5)
ans =
     0     0     0     0     0     5
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0

我期望得到(1,1)或(5,5)的5值的矩阵5x5。为什么创建6x6矩阵,为什么5是(1,6)元素?

不久前,他们修复了文档:
matlab - MATLAB手动错误?-LMLPHP

最佳答案

手册:diag
您正在使用diag的第二个重载版本:



因此,您的命令A = diag(5,5)将构造一个矩阵,其中主对角线上方第5个对角线的对角元素将等于 vector [5]。因此,只有A(1,6)具有值的结果值。

如果要在对角线上有一个1e3x1e3矩阵,请尝试

A = diag(ones(1,1e3));

关于matlab - MATLAB手动错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33919076/

10-12 18:59