On line 53: error = abs(-15 - Theta(i)); . I'm getting an error that says, "Index exceeds the number of array elements. Index must not exceed 17901". what am I doing wrong?
    4 views (last 30 days)
  
       Show older comments
    
clc
clear all
%Given:
M1 = 3;
G = 1.4;
tot = 180;
Theta= zeros(1,tot);
p2_p1= zeros(1,tot);
n=1;
for i = 1 : 0.01 : tot
    Theta(n)  = atand(2*cotd(i)*((M1^(2)*sind(i))^2-1)/(M1^(2)*(G+cosd(2*i)+2)));
    p2_p1(n) = 1+(2*G)/((G+1)*(M1*sind(i))^2-1);
    n = n+1;
end
error = 1;
i = 0;
while error > 0.001
    i=i+1;
    error = 20 - Theta(i);
end
d=i;
b2 = 38;
Mn1 = M1*sind(b2);
Mn2 = sqrt((Mn1^(2)+(2/(G-1)))/(2*G/(G-1)*Mn1^(2)-1));    
M2 = Mn2/(sind(b2-20))
n = 1;
for i = 30 : 0.01 : 149
    theta2(n)  = 20+atand(2*cotd(i)*((M2*(sind(i)))^2-1)/(2+M2^(2)*(G+cosd(2*i)+2)));
    p3_p1(n) = p2_p1(d)*(1+(2*G)/(G+1)*(M2*sind(i))^2-1);
    n = n+1;
end
error = 1;
i=0;
while error > 0.001
    i=i+1;
    error = abs(-15 - Theta(i));
end
a=i;
b3 = 32;
Mn1 = M1*sind(b3);
Mn3 = sqrt((Mn1^(2)+(2/(G-1)))/(2*G/(G-1)*Mn1^(2)-1));    
M3 = Mn3/(sind(a-15))
0 Comments
Answers (1)
  Voss
      
      
 on 1 Dec 2023
        
      Edited: Voss
      
      
 on 1 Dec 2023
  
      First, let me run the code almost up to where the error happens:
clc
clear all
%Given:
M1 = 3;
G = 1.4;
tot = 180;
Theta= zeros(1,tot);
p2_p1= zeros(1,tot);
n=1;
for i = 1 : 0.01 : tot
    Theta(n)  = atand(2*cotd(i)*((M1^(2)*sind(i))^2-1)/(M1^(2)*(G+cosd(2*i)+2)));
    p2_p1(n) = 1+(2*G)/((G+1)*(M1*sind(i))^2-1);
    n = n+1;
end
error = 1;
i = 0;
while error > 0.001
    i=i+1;
    error = 20 - Theta(i);
end
d=i;
b2 = 38;
Mn1 = M1*sind(b2);
Mn2 = sqrt((Mn1^(2)+(2/(G-1)))/(2*G/(G-1)*Mn1^(2)-1));    
M2 = Mn2/(sind(b2-20))
n = 1;
for i = 30 : 0.01 : 149
    theta2(n)  = 20+atand(2*cotd(i)*((M2*(sind(i)))^2-1)/(2+M2^(2)*(G+cosd(2*i)+2)));
    p3_p1(n) = p2_p1(d)*(1+(2*G)/(G+1)*(M2*sind(i))^2-1);
    n = n+1;
end
Now, at this point, Theta is a 1x17901 row vector:
whos Theta
The minimum value of abs(-15-Theta), which you call error and calculate element-by-element, is approximately 0.0139:
min(abs(-15 - Theta))
Therefore, no element of abs(-15-Theta) is less than or equal to 0.001, so your while loop iterates through all elements of Theta and never terminates, until the error occurs when trying to access element 17902 (i.e., one beyond the end of Theta).
error = 1;
i=0;
while error > 0.001
    i=i+1;
    error = abs(-15 - Theta(i));
end
a=i;
b3 = 32;
Mn1 = M1*sind(b3);
Mn3 = sqrt((Mn1^(2)+(2/(G-1)))/(2*G/(G-1)*Mn1^(2)-1));    
M3 = Mn3/(sind(a-15))
0 Comments
See Also
Categories
				Find more on Audio and Video Data in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
