在Matlab中求解布尔方程组

在Matlab中求解布尔方程组,matlab,boolean,boolean-logic,equation-solving,Matlab,Boolean,Boolean Logic,Equation Solving,我有一组布尔方程,即 var1 = x AND y var2 = x OR z var3 = ... var4 = ... 以及每个输出vari应等于1的约束 我想要满足这些方程的每个输入变量的对应组合(x,y,z…) 例如,前两个方程将允许[x y z]=[1 1 1 0]或[1 1 1]作为解决方案。如果变量不太多,则可以非常轻松地完成这项工作 如果确实有许多变量,此方法将暂停,因为它使用大小为K*(2^K)的矩阵,其中K是变量的数量,combvec对于较大的K也会变得非常缓慢 虽然您必须

我有一组布尔方程,即

var1 = x AND y
var2 = x OR z
var3 = ...
var4 = ...
以及每个输出
vari
应等于1的约束

我想要满足这些方程的每个输入变量的对应组合(x,y,z…)


例如,前两个方程将允许
[x y z]=[1 1 1 0]或[1 1 1]
作为解决方案。

如果变量不太多,则可以非常轻松地完成这项工作

如果确实有许多变量,此方法将暂停,因为它使用大小为
K*(2^K)
的矩阵,其中
K
是变量的数量,
combvec
对于较大的
K
也会变得非常缓慢

虽然您必须小心变量的数量,但这种方法能够以很少的开销处理许多逻辑“方程”


x
y
z
示例中:

% Get all combinations of x/y/z, where each is true or false
opts = repmat( {[true, false]}, 1, 3 );
xyz = combvec( opts{:} )
% Assign each row to a named variable 
x = xyz(1,:); y = xyz(2,:); z = xyz(3,:);
% Get the combinations which satisfy your conditions
results = xyz( :, (x & y) & (x | z) );
% Each column of results is a solution
>> results
results = 
    1    1
    1    1
    1    0
更一般地说,它可能看起来像这样:

K = 3; % K variables (previously x, y and z so K = 3)
% Create all true/false combinations
opts = repmat( {[true, false]}, 1, K );
combs = combvec( opts{:} );

% Shorthand so we can write in(i) not combs(i,:)
in = @(k) combs(k,:); 
% Apply conditions
results = combs( :, (in(1) & in(2)) ...
                  & (in(1) | in(3)) );
注意:如果没有神经网络工具箱,就不会有
combvec
。有很多方法可以获得所有的组合