有没有办法动态更改关系运算符(<,>,==等)?

时间:2014-10-15 21:49:19

标签: matlab

例如,请考虑以下代码:

myLogicalsVariable = ...
    myMatrix1 == myValue1 & ... 
    myMatrix2 == myValue2 & ...
    myMatrix3 == myValue3 & ...
    myMatrix4 == myValue4 & ...
    myMatrix5 == myValue5;  

有没有办法让这句话中的relational operators以某种方式动态变化,以至于我最终得到的结果如下:

myLogicalsVariable = ...
    myMatrix1 RelationalOp1 myValue1 & ... 
    myMatrix2 RelationalOp2 myValue2 & ...
    myMatrix3 RelationalOp3 myValue3 & ...
    myMatrix4 RelationalOp4 myValue4 & ...
    myMatrix5 RelationalOp5 myValue5;   

可以为每个RelationalOp变量分配一个运算符(==<<=等)?

我知道我可以使用eval函数通过执行以下操作来完成此操作:

myLogicalsVariable = ...
    eval(['myMatrix1 ' RelationalOp1 ' myValue1 &' ... 
          'myMatrix2 ' RelationalOp2 ' myValue2 &' ...
          'myMatrix3 ' RelationalOp3 ' myValue3 &' ...
          'myMatrix4 ' RelationalOp4 ' myValue4 &' ...
          'myMatrix5 ' RelationalOp5 ' myValue5']);

并将relational operators作为字符串传递给每个RelationalOp变量。

我想知道是否有另一种方法可以实现这一目标? eval函数有点慢......

1 个答案:

答案 0 :(得分:4)

所有Matlab理性运算符都可以像常规函数一样使用,因此您可以将A<B替换为lt(A,B)(有关完整列表,请参阅here)。您可能会执行以下操作:

relop=@(A,B,op) op(A,B);

定义了一个将关系运算符op应用于AB的函数。

然后你可以这样做:

myLogicalsVariable = relop(myMatrix1,myValue1,@eq) & relop(myMatrix2,myValue2,@eq);

要动态更改操作,您可以定义变量RelationalOp1=@lt,例如,然后执行

myLogicalsVariable = relop(myMatrix1,myValue1,relationalOp1) ...
    & relop(myMatrix2,myValue2,relationOp2);