例如,请考虑以下代码:
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
函数有点慢......
答案 0 :(得分:4)
所有Matlab理性运算符都可以像常规函数一样使用,因此您可以将A<B
替换为lt(A,B)
(有关完整列表,请参阅here)。您可能会执行以下操作:
relop=@(A,B,op) op(A,B);
定义了一个将关系运算符op
应用于A
和B
的函数。
然后你可以这样做:
myLogicalsVariable = relop(myMatrix1,myValue1,@eq) & relop(myMatrix2,myValue2,@eq);
要动态更改操作,您可以定义变量RelationalOp1=@lt
,例如,然后执行
myLogicalsVariable = relop(myMatrix1,myValue1,relationalOp1) ...
& relop(myMatrix2,myValue2,relationOp2);