簡體   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