MATLAB: The problem of using ‘case’

MATLAB

i want to use a loop of omega and when the omega has diffreent value ,the m0,m1,m2…have the different value,so in the loop i use the 'case' as this
for omega=0.1:0.1:2;
switch omega
case 0.100000;
m0=0.031949;
m1=3.141268;
m2=6.283023;
m3=9.424670;
m4=12.566289;
m5=15.707898;
m6=18.849502;
m7=21.991102;
m8=25.132701;
m9=28.274298;
m10=31.415894;
case 0.200000;
m0=0.063931;
m1=3.140293;
m2=6.282536;
m3=9.424345;
m4=12.566046;
m5=15.707703;
m6=18.849339;
m7=21.990963;
m8=25.132579;
m9=28.274190;
m10=31.415797;
and there are still some codes,but in the result,when omega=0.2,it still use the m0,m1,m2…of case 0.100000;
so when i change it as
case abs(omega-0.200000)<0.01;
it still has the problem,and why,thanks a lot!!!

Best Answer

  • Your first (inadvisable, numerically fragile, should-be-avoided) concept works for me:
    for omega = 0.1:0.1:2;
    switch omega
    case 0.1
    disp('one')
    case 0.2
    disp('two')
    end
    end
    displays this in the command window:
    one
    two
    Because of floating pont error in those numbers, this would be an extremely unreliable way to write code. Do NOT do this!
    Your second method can be done quite easily, by simply thinking about the actual case value that you actually want switch to compare (hint: your case conditions are equal to true or false, but omega is not equal to true or false):
    for omega = 0.1:0.1:2;
    switch true % this is the value for a valid CASE.
    case abs(omega-0.1)<0.01;
    disp('one')
    case abs(omega-0.2)<0.01;
    disp('two')
    end
    end
    displays this in the command window:
    one
    two