Problem with While loop

1 次查看(过去 30 天)
fabian
fabian 2015-9-20
评论: fabian 2015-9-20
Hello friends, I want to ask for help in the following code, and I use the while loop to determine the vectors must be below a value but I generated will last value that is not less, that I make only store the while smaller and open. Thank you.
clear
clc
H=[0 250 500 750 1000 1250 1500 1750 2000 2250 2500 2750 3000 3500 3750 4000 5000];
B=[0 0.4 0.8 1 1.15 1.25 1.32 1.38 1.41 1.44 1.46 1.48 1.5 1.53 1.54 1.55 1.6];
%******************************************
A=27e-4;
l=[0.8 0.8 0.6];
N=2000;
b=length(B);
fmax=B(b)*A;
flujo1=0:fmax/30:fmax;
B1=flujo1/A;
H1=interp1(B,H,B1,'pchip');
H2=(H1*l(1))/l(2);
B2=interp1(H,B,H2,'pchip');
f2=B2*A;
f3=flujo1+f2;
B3=f3/A;
H3=interp1(B,H,B3,'pchip');
I=(H3*l(3)+H2*l(2))/N;
i=1;e=0;
while e<max(B)
Fr1(i)=flujo1(i);
Fr2(i)=f2(i);
Fr3(i)=f3(i);
Ir(i)=I(i);
e=B3(i);
i=i+1;
end
hold on
plot(Ir,Fr1,'+')
plot(Ir,Fr2,'r')
plot(Ir,Fr3,'-o')
grid on
legend ('Flujol','Flujo2','Flujo3')
title('CURVA DE EXCITACIÓN CORRIENTE vs FLUJO')
xlabel('Corriente(A)')
ylabel('Flujo(Wb)')
pause
hold off

回答(1 个)

Walter Roberson
Walter Roberson 2015-9-20
last_e = e;
while e<max(B)
Fr1(i)=flujo1(i);
Fr2(i)=f2(i);
Fr3(i)=f3(i);
Ir(i)=I(i);
last_e = e;
e=B3(i);
i=i+1;
end
e = last_e;
Now after the loop, e will be the last value for which the condition was true, rather than being the first value for which the condition was false.
  3 个评论
Walter Roberson
Walter Roberson 2015-9-20
The condition is not changed until you do
e=B3(i);
so the code is storing only the values before the condition.
Perhaps you wanted to change your condition.
Fr1 = [];
Fr2 = [];
Fr3 = [];
Ir = [];
i=1;
while B3(i) < max(B)
Fr1(i) = flujo1(i);
Fr2(i) = f2(i);
Fr3(i) = f3(i);
Ir(i) = I(i);
i=i+1;
end
You could make this much more compact:
idx = find(B3 >= max(B), 1, 'first');
i = idx - 1;
Fr1 = flujo1(1:i);
Fr2 = f2(1:i);
Fr3 = f3(1:i);
Ir = I(1:i);

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by