Learn R Programming

lfl (version 1.3)

compose: Composition of Fuzzy Relations

Description

Composition of Fuzzy Relations

Usage

compose(x, y, e=NULL, alg=c('goedel', 'goguen', 'lukasiewicz'), type=c('basic', 'sub', 'super', 'square'), quantifier=NULL)

Arguments

x
A first fuzzy relation to be composed. It must be a numeric matrix with values within the $[0,1]$ interval. The number of columns must match with the number of rows of the y matrix.
y
A second fuzzy relation to be composed. It must be a numeric matrix with values within the $[0,1]$ interval. The number of columns must match with the number of rows of the x matrix.
e
An excluding fuzzy relation. (EXPERIMENTAL FEATURE!) If not NULL, it must be a numeric matrix with dimensions equal to the y matrix.
alg
An algebra to be used for composition. It must be one of 'goedel' (default), 'goguen', or 'lukasiewicz'.
type
A type of a composition to be performed. It must be one of 'basic' (default), 'sub', 'super', or 'square'.
quantifier
If not NULL, it must be a function taking a single argument, a vector of relative cardinalities, that would be translated into membership degrees.

Value

A matrix with $v$ rows and $w$ columns, where $v$ is the number of rows of x and $w$ is the number of columns of y.

Details

Function composes a fuzzy relation x (i.e. a numeric matrix of size $(u,v)$) with a fuzzy relation y (i.e. a numeric matrix of size $(v,w)$) and possibly with the use of an exclusion fuzzy relation e (i.e. a numeric matrix of size $(v,w)$).

The style of composition is determined by the algebra alg, the composition type type, and possibly also by a quantifier.

See Also

algebra, mult

Examples

Run this code
    R <- matrix(c(0.1, 0.6, 1, 0, 0, 0,
                  0, 0.3, 0.7, 0.9, 1, 1,
                  0, 0, 0.6, 0.8, 1, 0,
                  0, 1, 0.5, 0, 0, 0,
                  0, 0, 1, 1, 0, 0), byrow=TRUE, nrow=5)

    S <- matrix(c(0.9, 1, 0.9, 1,
                  1, 1, 1, 1,
                  0.1, 0.2, 0, 0.2,
                  0, 0, 0, 0,
                  0.7, 0.6, 0.5, 0.4,
                  1, 0.9, 0.7, 0.6), byrow=TRUE, nrow=6)

    RS <- matrix(c(0.6, 0.6, 0.6, 0.6,
                   1, 0.9, 0.7, 0.6,
                   0.7, 0.6, 0.5, 0.4,
                   1, 1, 1, 1,
                   0.1, 0.2, 0, 0.2), byrow=TRUE, nrow=5)

    compose(R, S, alg='goedel', type='basic') # should equal to RS

Run the code above in your browser using DataLab