繁体   English   中英

下标分配尺寸不匹配误差MATLAB

[英]Subscripted assignment dimension mismatch error MATLAB

我试图通过一系列组合从矩阵中调用某些数据点来运行一系列方程。 我本质上是在一系列不同的错误(错误是psivct数组)上一次比较每个数据集。

我在代码的最后一行收到“下标的分配尺寸不匹配”错误,我不知道该怎么办...。 为了清楚起见,我已尽力注释掉我的代码了。

当我仅比较两组时,它工作正常,但是当我添加第三组时,出现此错误。 有见识吗?

再次感谢您的帮助:)

datamatrix=[674 0 6049 46489;760 180 90735 120980; 650 0 12500 61000]; %data points velocity,
heading, x location, y location
psivct=[-90, -45, 0, 45, 90];%degrees degrees of error 
psidot=3; %degrees/sec rate of error change
d=500; %distance apart for a problem, in feet
Nr_AC=3; %number of aircrafts in sector


for c1 = 1:size(psivct,2)
    psi1=psivct(c1); %for loop to run through array of blunder errors

    for c2=1:Nr_AC-1; %for loop to account for all pairs and avoid same pairs twice

        for c3=c2+1:Nr_AC; %for loop to help avoid account for hte same pairs twice


k1=datamatrix(c2,1).*cosd(datamatrix(c2,2)+psi1)-datamatrix(c2,1)*cosd(datamatrix(c3,2));

k2=((datamatrix(c2,1)/psidot).*(sind(datamatrix(c2,2)+psi1)-sind(datamatrix(c2,2))))
cosd(datamatrix(c2,2)+psi1)*datamatrix(c2,1).*(psi1./psidot)+datamatrix(c2,3)-datamatrix(c3,3);

k3=datamatrix(c2,1).*sind(datamatrix(c2,2)+psi1)-datamatrix((c3),1)*sind(datamatrix((c3),2));

k4=(datamatrix(c2,1)/psidot)*(cosd(datamatrix(c2,2))-cosd(datamatrix(c2,2)+psi1))
sind(datamatrix(c2,2)+psi1)*datamatrix(c2,1).*(psi1./psidot)+datamatrix(c2,4)-datamatrix(c3,4);

k5=k1.^2+k3.^2; %"a" in the polynomial
k6=2*(k1.*k2+k3.*k4); %"b" in the polynomial
k7=k3.^2+k4.^2-500; %"c" in the polynomial
p = [k5 k6 k7]; % creating hte polynomial
r = roots(p); %solving for roots
rr(:,c1,c2,c3)=real(r)/60 %getting real answers
end;
end;
end;

您的问题来自r向量:它有时为空,因为多项式没有根。 那么r是一个0x1向量,您将其分配给2x1向量( r(:,c1,c2,c3)是2x1向量,因为您第一次向其分配r时,Matlab会创建矩阵rr并对其进行初始化尺寸)。

在进行分配之前,您需要检查是否存在根。 就像是

if (~isempty(r))
  rr(:,c1,c2,c3)=real(r)/60; %getting real answers
end

作为一般规则,最好在开始循环和初始化rr之前弄清楚rr的大小。 由于Matlab并非一直都在尝试调整4D矩阵的大小,因此它可以带来更好的性能和更“干净”的代码。

另外,在k2和k4的行中要小心,现在不考虑sind和cosd。 如果要继续行(并将第一行乘以第二行,则应执行以下操作:

k2=((datamatrix(c2,1)/psidot).*(sind(datamatrix(c2,2)+psi1)-sind(datamatrix(c2,2)))) * ...
cosd(datamatrix(c2,2)+psi1)*datamatrix(c2,1).*(psi1./psidot)+datamatrix(c2,3)-datamatrix(c3,3);

*.*取决于您要完成的工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM