gpt4 book ai didi

matlab - 在MATLAB中调试错误 "Dimensions of arrays being concatenated are not consistent"

转载 作者:行者123 更新时间:2023-12-02 09:06:27 28 4
gpt4 key购买 nike

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

功能是

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),由于这些部分之间的空间。 IE。 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

关于matlab - 在MATLAB中调试错误 "Dimensions of arrays being concatenated are not consistent",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57801259/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com