这是一种极端情况:您可以在 MATLAB 中通过用逗号,或空格分隔元素来构造数组。因此,以下方法都有效并给出相同的结果:
a = [1, 2, 3]
b = [1 2 3]
在构建矩阵时,这类似,行由分号或换行分隔,即我们有以下等价的可能性:
A = [1, 2, 3; 4, 5, 6]
B = [1 2 3; 4 5 6]
C = [1, 2, 3
4, 5, 6]
D = [1 2 3
4 5 6]
现在以您的示例为例:您的数组如下:
[y(2,i); (1-y(1,i)^2)*y(2,i) -y(1,i)]
第一行包含一个元素y(2,i)。然而,第二行被解释为两个元素:(1-y(1,i)^2)*y(2,i)和-y(1,i),由于这些部分之间的空间。即 MATLAB 认为您正在使用空格来分隔数组的两个部分,b如上所示。它将输入解释如下:
[y(2,i); (1-y(1,i)^2)*y(2,i), -y(1,i)]
如果您将代码粘贴到 MATLAB 中,您将因此得到一个错误,抱怨无法在第一行包含 1 个元素和在第二行包含 2 个元素的数组:
>> [y(2,i); (1-y(1,i)^2)*y(2,i) -y(1,i)]
Error using vertcat
Dimensions of arrays being concatenated are not consistent.
要解决这个问题,您必须告诉 MATLAB 第二行中只有一个元素,由减法给出(1-y(1,i)^2)*y(2,i) -y(1,i)。以下是一些方法:
output = [y(2,i); (1-y(1,i)^2)*y(2,i) - y(1,i)]; % spaces on both sides of -
output = [y(2,i); (1-y(1,i)^2)*y(2,i)-y(1,i)]; % no spaces around -
output = [y(2,i); ((1-y(1,i)^2)*y(2,i) -y(1,i))]; % parentheses around everything