簡體   English   中英

在MATLAB中調試錯誤“被連接的數組的維度不一致”

[英]Debugging the error "Dimensions of arrays being concatenated are not consistent" in MATLAB

我有一個函數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) 即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

SEI UN GRANDE MI HAI SVOLTATO LA SERATA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM