MATLAB手动错误?

时间:2015-11-25 14:28:18

标签: matlab matrix

我在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函数,并看到了这一点:

  

D = diag(v)返回一个方形对角矩阵,其元素为   矢量v在主对角线上。

确定!因此,如果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)元素?

前段时间他们修复了文档: enter image description here

3 个答案:

答案 0 :(得分:3)

手动:diag 你正在使用第二个重载版本的diag:

  

D = diag(v,k)将向量v的元素放在第k个对角线上。 k = 0表示主对角线,k> 0在主对角线之上,并且k <0在主对角线之下。

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

如果你想要一个1e3x1e3矩阵与对角线上的那个矩阵尝试

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

答案 1 :(得分:2)

文章不正确。

A = diag(1e3,1e3);

不会产生对角线上的矩阵。代码应改为:

A = eye(1e3,1e3);

答案 2 :(得分:1)

现在再次阅读你的问题,我真的理解它并且必须改写我的答案。您正在参考文档的这一部分:

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

  A      1001x1001                8016008  double array
  As     1001x1001                4020     double array (sparse)

这个例子肯定是错的,可能应该是:

A=eye(1e3,1e3)
As=sparse(A);

在主对角线上创建1000x1000矩阵。

将错误报告给mathworks