我试图通过在一系列组合中调用矩阵中的某些数据点来运行一系列方程式。我基本上是将每个数据集与其他数据集进行比较,一次一个,比较一系列不同的错误(错误是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;
答案 0 :(得分:0)
你的问题来自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并没有试图一直调整4-D矩阵的大小。
另外,请注意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);
*
或.*
取决于您想要完成的内容