Evaluate many possible logical expressions
2 views (last 30 days)
Show older comments
Opt User
on 10 Jun 2017
Commented: Walter Roberson
on 11 Jun 2017
I have a set of binary variables: a,b,c... and a set of rules = { 'a or b', 'a or (b and c)', ... I need a fast way to determine the outcome of rules(i). Creating a truth table is not feasible because the number of binary variables is in the order of ~1000.
8 Comments
Walter Roberson
on 11 Jun 2017
computation_function = matlabFunction(symbolic_expression_list, 'vars', {sym(CellArrayOfVariableNames)} );
result_for_this_vector = computation_function(this_vector_of_logical_values)
Accepted Answer
Walter Roberson
on 10 Jun 2017
If you have the symbolic toolbox, you can use sym() to parse the expressions, after which you could use matlabFunction to generate a function handle that can evaluate the expressions on inputs.
You will want to use the matlabFunction 'vars' option to control the order of the inputs; you might want to set it up to take the values as a vector, something like
matlabFunction(symbolic_expression, 'vars', {[a, b, c]}
If you are going to be repeating the calculations many times, you might want to go as far as to tell matlabFunction to write to a file: when it writes to a file then it defaults to optimizing the code, a process that takes a bit of time but might be worth it for repeated execution.
3 Comments
Walter Roberson
on 11 Jun 2017
Edited: Walter Roberson
on 11 Jun 2017
The syntax I showed,
matlabFunction(symbolic_expression, 'vars', {[a, b, c]}
will convert the names into indexes.
matlabFunction(sym('a | (b and c)'), 'vars', {[sym('a'),sym('b'),sym('c')]})
ans =
function_handle with value:
@(in1)in1(:,1)||(in1(:,2)&&in1(:,3))
More Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!