Matlab条件赋值

时间:2013-01-24 10:24:00

标签: matlab conditional-statements

  if male(m,7)==0||male(m,7)==1
        if female(f,7)==0||female(f,7)==1
            Wfst = 1;
        end
        if female(f,7)==2||female(f,7)==3||female(f,7)==4
            Wfst = 1/2;
        end
        if female(f,7) == -1
            Wfst = 1/2;
        end
    end

    if male(m,7)==2||male(m,7)==3||male(m,7)==4
        if female(f,7)==0||female(f,7)==1
            Wfst = 0;
        end
        if female(f,7)==2||female(f,7)==3||female(f,7)==4
            Wfst = 1;
        end
        if female(f,7) == -1
            Wfst = 1/2;
        end
    end

任何人都可以提出一种处理条件分配的简短方法。我已经发布了我正在处理的实际代码。

3 个答案:

答案 0 :(得分:4)

您可以使用switch/case。像这样:

switch male(m, 7)
    case {0, 1}
        switch female(f,7)
            case {0, 1}
                Wfst = 1;
            case {2, 3, 4}
                Wfst = 1/2;
            case -1
                Wfst = 1/2;
        end
    case {2, 3, 4}
        switch female(f,7)
            case {0, 1}
                Wfst = 0;
            case {2, 3, 4}
                Wfst = 1;
            case -1
                Wfst = 1/2;
        end
end

它不短于你的,但很容易理解。

答案 1 :(得分:3)

您可以替换

a == n1 || a == n2 || a == n3

any(a == [n1, n2, n3])

本着同样的精神,对于将来,如果您碰巧拥有&&而非||,则可以使用matlab函数all代替any

答案 2 :(得分:1)

我认为这并没有真正简化它,但也许你可以从中获取一些元素,所以这里有一个包含相同逻辑的1个衬垫:

M = male(f, 7)
F = female(f, 7)
Wfst = (M < 2) * ( 1 - any(F == [-1 2:4])*0.5 ) + (M > 1) * ( (F == -1)*0.5 + any(F == 2:4))

所以基本的想法是Matlab类隐式地将逻辑类型变量转换为整数,其中true为1而零为false,因此您可以乘以条件。

例如:

if (a > 10)
   b = 5;
else
   b = 10;
end

相同
b = (a > 10)*5 + ~(a > 10)*10;

简化为

b = 10 - (a > 10)*5;