Plotting results in array of a while loop

조회 수: 13 (최근 30일)
Hicham Lhachimi
Hicham Lhachimi 2020년 6월 22일
댓글: Adam Danz 2020년 6월 22일
Hello,
I want to iteratively plot the results of my while loop, however, I end up with a blank graph or an error.
Here is the code:
Vlow=350;
fs=100000;
n=0.56;
Lk=41.98*0.000001;
P=10000;
Vhigh=900;
C=0;
i=0;
s=poly(0,"s");
while Vlow < 450
Polynome=((P*Lk*n*fs)/(Vhigh*Vlow))-s+s^2;
solution=roots(Polynome);
out = solution(solution<0.35 & solution>0.129);
I1=(1/(2*Lk*fs))*(2*(Vlow/n)*out+Vhigh-(Vlow/n));
I2=(1/(2*Lk*fs))*(2*Vhigh*out-Vhigh+(Vlow/n));
if I1 > I2 then
C= I1;
else
C=I2;
end
Y(i)=C;
X(i)=Vlow+20;
i=i+1;
end
plot(X,Y);
Any help would be greatly appreciated,
Thank you
  댓글 수: 8
Image Analyst
Image Analyst 2020년 6월 22일
So s is this:
s =
1 -1 0.0746311111111111
which is a 1-by-3 vector, so it throws an error when you do this:
Polynome=((P*Lk*n*fs)/(Vhigh*Vlow))-s+s^2;
Were you expecting s to be a scalar instead of a 1-by-3 vector?
Hicham Lhachimi
Hicham Lhachimi 2020년 6월 22일
편집: Hicham Lhachimi 2020년 6월 22일
Here is exactly what I got ,when I want to select only one root which will be the out variable, I don't see any value of out on the workspace:

댓글을 달려면 로그인하십시오.

채택된 답변

Adam Danz
Adam Danz 2020년 6월 22일
편집: Adam Danz 2020년 6월 22일
As the error message indicates, a subscript must be a real, positive integer or logical.
On the first iteration, i equals 0 which does not fulfill these requirements. 0 is not positive and it's not a logical value. So, when you index Y(i), or, Y(0), you get the error.
Instead of initializing i=0, set it to 1, i=1;
More importantly, the while-loop is defined by the value of Vlow but this value never changes within the while-loop so the while-loop will never end. Vlow will always be less than 450 because its original value is 350 which never changes within the loop.
Perhaps you meant to include something like this at the end of the while-loop.
Vlow = X(i);
If that's the case, then you could replace the while-loop with a for-loop since you know ahead of time the number of iterations. The number of iterations will be the number of values in
values = 350 : 20 : 450;
  댓글 수: 16
Hicham Lhachimi
Hicham Lhachimi 2020년 6월 22일
Now it works well, looping through the index values of Vlow is much better. Thank you very much for your support (y).
Adam Danz
Adam Danz 2020년 6월 22일
Agreed. I almost always define loops as i = 1:n rather than i = some_vector.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by