필터 지우기
필터 지우기

Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

Subscript indices must either be real positive integers or logicals ERROR ,can't solve

조회 수: 2 (최근 30일)
rika
rika 2012년 7월 4일
마감: MATLAB Answer Bot 2021년 8월 20일
This is part of the simple code I'm using:
for i=1:9
for v=1:21
iter=1;
while dif(i,v)>tol && iter<=maxiter
W(i,v)=((v(1+a1(i,v)))^2+(r(i)*omega*(1-a2(i,v)))^2)^0.5;
phi(i,v)=atand((v(1+a1(i,v)))/(r(i)*omega*(1-a2(i,v))));
alpha(i,v)=theta(i)-phi(i,v);
CL(i,v)= -1.692600E-08*(alpha(i,v))^6 + 1.039717E-06*(alpha(i,v))^5 - 7.753536E-06*(alpha(i,v))^4 - 4.279007E-04*(alpha(i,v))^3 + 1.045968E-03*(alpha(i,v))^2 + 1.344549E-01*(alpha(i,v)) + 5.043533E-01;
CD(i,v)= -5.381629E-08*(alpha(i,v))^5 + 2.272123E-06*(alpha(i,v))^4 - 4.127824E-06*(alpha(i,v))^3 + 2.575254E-05*(alpha(i,v))^2 - 4.366098E-04*(alpha(i,v)) + 1.235974E-02;
Tgrad(i,v)=0.5*density*(W(i,v))^2*N*c(i)*(CL(i,v)*cosd(phi(i,v))-CD(i,v)*sind(phi(i,v)));
a1new(i,v)=(-1+(1+Tgrad(i,v)/(pi*density*r(i)*v^2))^0.5)/2;
Qgrad(i,v)=0.5*density*(W(i,v))^2*N*c(i)*r(i)*(CL(i,v)*sind(phi(i,v))+CD(i,v)*cosd(phi(i,v)));
a2new(i,v)=Qgrad(i,v)/(4*pi*density*(r(i))^3*v*omega*(1+a1new(i,v)));
difa1=abs(a1new(i,v)-a1(i,v));
difa2=abs(a2new(i,v)-a2(i,v));
if difa1>difa2
dif(i,v)=difa1;
else
dif(i,v)=difa2;
end
a1(i,v)=a1new(i,v);
a2(i,v)=a2new(i,v);
iter=iter+1;
end
end
end
The error is: ??? Subscript indices must either be real positive integers or logicals.
Error in ==> flu3try2 at 36 W(i,v)=((v(1+a1(i,v)))^2+(r(i)*omega*(1-a2(i,v)))^2)^0.5;
Why is this happening? I did not have the same error before adding the while loop.

답변 (2개)

AC
AC 2012년 7월 4일
Hi,
How did you define your dif function?
The error you get means that at some point you are trying to access part of a vector or a matrix that does not exist, e.g. v(0) or v(0.1).
I would try and debug it and take a look at the values of a1 and a2.
Cheers,
AC

Jan
Jan 2012년 7월 4일
In v(1+a1(i,v)) the index is not a positive integer anymore.
A reliable method to examine such problems:
dbstop if error
Then Matlab stops when the error occurs and you can check the values of the local variables.
  댓글 수: 1
AC
AC 2012년 7월 4일
Hey, now I'm curious: is dif a new name for function diff? When I ran the code, dif was unknown, I assumed it was a user-defined function. Anyway, yes, dbstop is a good friend :)

이 질문은 마감되었습니다.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by