调试错误“;连接的数组的维数不一致”;在MATLAB中

调试错误“;连接的数组的维数不一致”;在MATLAB中,matlab,Matlab,我有一个函数VanderPol(),它应该提供一个向量输出,但它似乎不起作用。这只是三行代码,但我似乎找不到bug 功能是 function [output] = VanderPol(y, i) output = [y(2,i); (1-y(1,i)^2)*y(2,i) -y(1,i)]; end 它被称为 z = [1 2 3; 4 5 6]; VanderPol(z,1) 我收到一条错误消息,指出VanderPol(z,1)有故障,但没有提示原因。下面显示了确切的错误消息

我有一个函数
VanderPol()
,它应该提供一个向量输出,但它似乎不起作用。这只是三行代码,但我似乎找不到bug

功能是

function [output] = VanderPol(y, i)
    output = [y(2,i); (1-y(1,i)^2)*y(2,i) -y(1,i)];
end
它被称为

z = [1 2 3;
    4 5 6];
VanderPol(z,1)
我收到一条错误消息,指出
VanderPol(z,1)
有故障,但没有提示原因。下面显示了确切的错误消息。有人能发现这个虫子吗

Error using vertcat
Dimensions of arrays being concatenated are not consistent.

这是一种边缘情况:您可以在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)]
第一行包含一个元素
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)]
[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

有趣的是,
output=[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给出了错误消息:错误使用vertcat,不知道为什么你没有得到任何…太好了,谢谢!是吗?昨天我更新了我的matlab软件,应该没问题。我再看看错误,我可能遗漏了什么。回答得很好。你知道,我认为这总结了我遇到的所有错误,我不知道如何处理,因为我看不到它!我总是要回去重写代码,神奇的是它有时能工作(有时不能),尽管无错误的代码看起来和好代码一样。谢谢!很高兴听到这个消息,很高兴能帮忙。