为什么diag在八度音程中表现出不一致的行为

时间:2013-02-05 03:22:06

标签: matrix octave diagonal

有人可以解释这里发生了什么吗?

octave:1> t = eye(3)
t =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1

octave:2> diag(t(3,:))
ans =

Diagonal Matrix

   0   0   0
   0   0   0
   0   0   1

octave:3> diag(t(2,:))
ans =

Diagonal Matrix

   0   0   0
   0   1   0
   0   0   0

octave:4> diag(t(1,:))
ans =  1

为什么前两个回馈3x3矩阵,但最后一个只是一个数字?

1 个答案:

答案 0 :(得分:1)

由于从眼睛(3)创建t(1,:)的方式,出现了问题。

如果单独输出t行,结果为:

octave.28> t(1,:)
ans = 

**Diagonal Matrix**

   1   0   0

octave.29> t(2,:)

ans = 

   0   1   0

octave.30> t(3,:)

ans = 

   0   0   1

由于某种原因(我无法解释)t(1,:)仍被识别为对角矩阵,而t(2,:)和t(3,:)是向量。当你调用diag(t(:,1))时,它没有接收到一个矢量参数,而是一个矩阵。如果在评估之前将t(:,1)转换为向量,则会得到预期结果。

octave.31> diag(vec(t(1,:)))
ans = 

**Diagonal Matrix**

   1   0   0
   0   0   0
   0   0   0