我阅读了有关在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)元素?不久前,他们修复了文档:
最佳答案
手册: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/