!真理値表から多変数多項式をつくる
!n変数a,b,c,…の論理関数f(a,b,c,…)を、n変数の多項式で表す
!1変数の場合、項a,1を使った多項式で表現する。 !係数x1,x2とすると、a op b=x1*a+x2*1となる。 ! 否定 NOT a = -a+1 ! !2変数の場合、項a,b,ab,1を使った多項式で表現する。 !係数x1,x2,x3,x4とすると、a op b=x1*a+x2*b+x3*ab+x4*1となる。 ! ! 論理積 a AND b = ab ! 論理和 a OR b = a+b-ab ! 排他的論理和 a XOR b = a+b-2ab ! 包含 a → b = -a+ab-1 ! !※n変数では2^n個の項がある
LET N=3 !変数の数
DIM T(2^N,2^N) !項 a b c ab bc ca abc 1 DEF idx(a,b,c)=(a*2+b)*2+c+1 !※真理値表から機械的に生成する FOR a=0 TO 1 FOR b=0 TO 1 FOR c=0 TO 1 LET T(idx(a,b,c),1)=a LET T(idx(a,b,c),2)=b LET T(idx(a,b,c),3)=c LET T(idx(a,b,c),4)=a*b LET T(idx(a,b,c),5)=b*c LET T(idx(a,b,c),6)=c*a LET T(idx(a,b,c),7)=a*b*c LET T(idx(a,b,c),8)=1 NEXT c NEXT b NEXT a
! f 論理関数 a OR b OR c DATA 0 !0,0,0 DATA 1 !0,0,1 DATA 1 !0,1,0 DATA 1 !0,1,1 DATA 1 !1,0,0 DATA 1 !1,0,1 DATA 1 !1,1,0 DATA 1 !1,1,1 DIM f(2^N) MAT READ f
DIM x(2^N) !連立方程式Tx=f
DIM iT(2^N,2^N) !逆行列を求める MAT iT=INV(T)
MAT x=iT*f !xを求める MAT PRINT x !係数列 ※a+b+c-ab-bc-ca+abc
END
|