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 (최근 30일)
이전 댓글 표시
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
답변 (1개)
Voss
2023년 12월 1일
편집: Voss
2023년 12월 1일
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
참고 항목
카테고리
Help Center 및 File Exchange에서 Audio and Video Data에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!