八度的问题。无法识别矩阵
Problem with Octave. Can't recognize a matrix
我尝试在 Octave 上构建脚本并收到此消息:
error: script2: =: nonconformant arguments (op1 is 1x1, op2 is 1x10)
error: called from
script2 at line 5 column 1
我的脚本是:
l = 20:29;
m = 30;
for i = 0:9
a(i + 1) = l / m;
end
有人可以帮我解决这个问题吗?
Octave 允许您通过创建标量来分配一个不存在的名称。然后,您可以通过分配一个超过长度的索引来追加它。
当您分配给 a(1)
时,a
被创建为标量(或 1x1 数组)。 l / m
是 1x10。这就是您的错误消息告诉您的内容。
有几个解决方法。如果你只想累加矩阵的行,添加第二个维度:
a(i + 1, :) = l / m;
如果你想要列:
a(:, i + 1) = l / m;
这种方法的问题在于它会在每次迭代时重新分配矩阵。推荐的做法是预分配矩阵a
,填入:
l = 20:29;
m = 30;
a = zeros(10);
for i = 1:10
a(i + 1, :) = l / m;
end
由于 Octave 能够进行矩阵运算,因此您首先不需要 for
循环。
我宁愿写:
l = 20:29;
m = 30;
a = l / m;
这样效率更高。
我尝试在 Octave 上构建脚本并收到此消息:
error: script2: =: nonconformant arguments (op1 is 1x1, op2 is 1x10)
error: called from
script2 at line 5 column 1
我的脚本是:
l = 20:29;
m = 30;
for i = 0:9
a(i + 1) = l / m;
end
有人可以帮我解决这个问题吗?
Octave 允许您通过创建标量来分配一个不存在的名称。然后,您可以通过分配一个超过长度的索引来追加它。
当您分配给 a(1)
时,a
被创建为标量(或 1x1 数组)。 l / m
是 1x10。这就是您的错误消息告诉您的内容。
有几个解决方法。如果你只想累加矩阵的行,添加第二个维度:
a(i + 1, :) = l / m;
如果你想要列:
a(:, i + 1) = l / m;
这种方法的问题在于它会在每次迭代时重新分配矩阵。推荐的做法是预分配矩阵a
,填入:
l = 20:29;
m = 30;
a = zeros(10);
for i = 1:10
a(i + 1, :) = l / m;
end
由于 Octave 能够进行矩阵运算,因此您首先不需要 for
循环。
我宁愿写:
l = 20:29;
m = 30;
a = l / m;
这样效率更高。