Problème condition if avec NaN
Bonjour,
J'ai le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| zp = 4;
rs = 31.2*10^(-3);
ld = 280*10^(-6);
lq = 560*10^(-6);
psipm = 29*10^(-3);
n=0:500:5000;
idopt=zeros(size(n));
iqopt=zeros(size(n));
for m=1:length(n);
T(m)=m*50;
for k=1:length(n);
w(k)=zp*n(k)*2*pi/60;
[id,iq]=meshgrid([-600:10:0,0:10:600]);
E=zeros(size(id));
logical_mat=sqrt(id.^2+iq.^2)<=600;
E(logical_mat)=...
(w(k)*T(m)*2)./(3*zp*(rs*id(logical_mat).^2+ ...
rs*iq(logical_mat).^2+ ...
w(k)*(ld-lq)*id(logical_mat).*iq(logical_mat)+ ...
w(k)*psipm*iq(logical_mat)));
E(~logical_mat)=NaN;
F=zeros(size(E));
logical_mat2=E<=1;
F(logical_mat2)=E(logical_mat2);
F(~logical_mat2)=NaN;
G=zeros(size(F));
logical_mat3=F>=0;
G(logical_mat3)=F(logical_mat3);
G(~logical_mat3)=NaN;
A=zeros(size(G));
logical_mat4=id<0;
A(logical_mat4)=G(logical_mat4);
A(~logical_mat4)=NaN;
B=zeros(size(A));
logical_mat5=iq>0;
B(logical_mat5)=A(logical_mat5);
B(~logical_mat5)=NaN;
[H I]=max(B(:));
h(k,m)=H;
if h(k,m)== NaN;
idopt(k,m)==NaN;
iqopt(k,m)==NaN;
else
idopt(k,m)= id(I);
iqopt(k,m)=iq(I);
end
end
end |
J'ai un problème dans ma boucle if parce que quand je lance le programme, il s'éxécute mais je n'ai pas le bon résultat... en effet dans idopt et iqopt je n'ai pas de NaN alors que je devrais en avoir vu que j'en ai dans h(k,m). en faite j'ai l'impression que mon résultat ne prend pas en compte ma boucle if. Qu'ai-je fais de mal ?