BlueInk
2010-03-23, 22:07
时间走不动,貌似是死循环了,请大家帮忙看看我这个while循环出了什么问题。
谢谢大家!
-----------------------------------------------------------------------
function v0best = fcn(vzmin,vzmax,va0,vb0,vc0,ia,ib,ic,f,C)%参数都是恒定值。
v0=vzmin;
v0best=v0;%v0从vzmin开始取值
u0best=1000;%任意设定初始值
while v0<vzmax%判断v0值是否满足条件
va=va0+v0;%以下是计算取此v0时的u0
vb=vb0+v0;
vc=vc0+v0;
tla=(va-floor(va))/f;
tlb=(vb-floor(vb))/f;
tlc=(vc-floor(vc))/f;
if va>0
ta=(1/f)-tla;
else ta=tla;
end
if vb>0
tb=(1/f)-tlb;
else tb=tlb;
end
if vc>0
tc=(1/f)-tlc;
else tc=tlc;
end
i0=ia*ta+ib*tb+ic*tc;
u0=abs(i0/(f*C));%得到此时的u0值
if u0<u0best%比较得出较小u0对应的V0
u0best=u0;
v0best=v0;
end
deltavz=min(min(1-va+floor(va),1-vb+floor(vb)),min(1-vb+floor(vb),1-vc+floor(vc)));%计算v0下次的叠加量
v0=v0+deltavz; %v0增加
end
end
谢谢大家!
-----------------------------------------------------------------------
function v0best = fcn(vzmin,vzmax,va0,vb0,vc0,ia,ib,ic,f,C)%参数都是恒定值。
v0=vzmin;
v0best=v0;%v0从vzmin开始取值
u0best=1000;%任意设定初始值
while v0<vzmax%判断v0值是否满足条件
va=va0+v0;%以下是计算取此v0时的u0
vb=vb0+v0;
vc=vc0+v0;
tla=(va-floor(va))/f;
tlb=(vb-floor(vb))/f;
tlc=(vc-floor(vc))/f;
if va>0
ta=(1/f)-tla;
else ta=tla;
end
if vb>0
tb=(1/f)-tlb;
else tb=tlb;
end
if vc>0
tc=(1/f)-tlc;
else tc=tlc;
end
i0=ia*ta+ib*tb+ic*tc;
u0=abs(i0/(f*C));%得到此时的u0值
if u0<u0best%比较得出较小u0对应的V0
u0best=u0;
v0best=v0;
end
deltavz=min(min(1-va+floor(va),1-vb+floor(vb)),min(1-vb+floor(vb),1-vc+floor(vc)));%计算v0下次的叠加量
v0=v0+deltavz; %v0增加
end
end