Evaluate many possible logical expressions
5 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Walter Roberson
2017 年 6 月 11 日
computation_function = matlabFunction(symbolic_expression_list, 'vars', {sym(CellArrayOfVariableNames)} );
result_for_this_vector = computation_function(this_vector_of_logical_values)
採用された回答
Walter Roberson
2017 年 6 月 10 日
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 件のコメント
Walter Roberson
2017 年 6 月 11 日
編集済み: Walter Roberson
2017 年 6 月 11 日
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))
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Data Type Identification についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!