Main Content

addMF

Add membership function to fuzzy variable

Description

fis = addMF(fis,varName,type,parameters) adds a membership function with the specified type and parameters to the input or output variable varName in the fuzzy inference system fis. No other properties of fis are changed.

example

fis = addMF(fis,varName) adds a default membership function to the input or output variable varName in the fuzzy inference system fis.

example

fis = addMF(___,Name=Value) configures the membership function using one or more name-value arguments.

example

var = addMF(var) adds a default membership function to fuzzy variable var and returns the resulting fuzzy variable in var. No other properties of var are changed.

If var does not contain any membership functions, this syntax adds a default type-1 membership function. Otherwise, the type of the added membership function matches the type of the existing membership functions in var.

example

var = addMF(var,type,parameters) adds a membership function with the specified type and parameters.

example

var = addMF(___,Name,Value) configures the membership function using one or more name-value arguments.

To add a type-2 membership function to a fuzzy variable with no existing membership functions, you must specify either the LowerLag or LowerScale name-value argument.

example

Examples

collapse all

Create a Mamdani fuzzy system, and add three input variables and one output variable. For this example, give the second input variable and the output variable the same name.

fis = mamfis;
fis = addInput(fis,[0 80],Name="speed");
fis = addInput(fis,[0 100],Name="throttle");
fis = addInput(fis,[0 10],Name="distance");
fis = addOutput(fis,[0 100],Name="throttle");

Add a membership function to the first input variable, specifying a trapezoidal membership function, and set the membership function parameters.

fis = addMF(fis,"speed","trapmf",[-5 0 10 30]);

You can also specify the name of your membership when you add it to a fuzzy system. Add a membership function called "high" to the first input variable.

fis = addMF(fis,"speed","trapmf",[50 70 80 85],Name="high");

View the membership functions for the first input variable.

plotmf(fis,"input",1)

Figure contains an axes object. The axes object with xlabel speed, ylabel Degree of membership contains 4 objects of type line, text.

If your system has an input variable with the same name as an output variable, you must specify the variable type when adding a membership function. For example, add a membership function to the output variable.

fis = addMF(fis,"throttle","trimf",[0 20 40],VariableType="output");
plotmf(fis,"output",1)

Figure contains an axes object. The axes object with xlabel throttle, ylabel Degree of membership contains 2 objects of type line, text.

Alternatively, you can add a default membership function to a fuzzy system and set its parameters using dot notation. For example, add and configure a membership function for the third input variable.

fis = addMF(fis,"distance");
fis.Inputs(3).MembershipFunctions(1).Type = "trapmf";
fis.Inputs(3).MembershipFunctions(1).Parameters = [-1 0 2 4];
plotmf(fis,"input",3)

Figure contains an axes object. The axes object with xlabel distance, ylabel Degree of membership contains 2 objects of type line, text.

Create a type-2 Sugeno fuzzy system, and add two input variables and one output variable.

fis = sugfistype2;
fis = addInput(fis,[0 80],Name="speed");
fis = addInput(fis,[0 10],Name="distance");
fis = addOutput(fis,[0 100],Name="braking");

Add a membership function to the first input variable, specifying a trapezoidal membership function, and set the membership function parameters. This type-2 membership function uses default lower membership function lag and scale parameters.

fis = addMF(fis,"speed","trapmf",[-5 0 10 30]);

You can also specify the configuration of the lower MF when adding a type-2 membership function.

fis = addMF(fis,"speed","trapmf",[10 30 50 70],LowerScale=0.8,LowerLag=0.1);

You can also specify the name of your membership function when you add it to a fuzzy system. Add a membership function called "high" to the first input variable.

fis = addMF(fis,"speed","trapmf",[50 70 80 85],Name="high");

View the membership functions for the first input variable.

plotmf(fis,"input",1)

Figure contains an axes object. The axes object with title Footprint of uncertainty (FOU), xlabel speed, ylabel Degree of membership contains 12 objects of type line, patch, text. These objects represent UpperMF, LowerMF, FOU.

Create a fuzzy variable with a specified range.

var = fisvar([0 1]);

Add a membership function to the variable, specifying a trapezoidal membership function, and set the membership function parameters.

var = addMF(var,"trapmf",[-0.5 0 0.2 0.4]);

You can also specify the name of your membership when you add it to a fuzzy variable. For example, add a membership function called "large".

var = addMF(var,"trapmf",[0.6 0.8 1 1.5],Name="large");

View the membership functions.

var.MembershipFunctions
ans = 
  1×2 fismf array with properties:

    Type
    Parameters
    Name

  Details:
          Name        Type               Parameters         
         _______    ________    ____________________________

    1    "mf1"      "trapmf"    -0.5       0     0.2     0.4
    2    "large"    "trapmf"     0.6     0.8       1     1.5

Alternatively, you can add a default membership function to a fuzzy variable and set its parameters using dot notation.

var = fisvar([0 1]);
var = addMF(var);
var.MembershipFunctions(1).Type = "trapmf";
var.MembershipFunctions(1).Parameters = [-0.5 0 0.2 0.4];

Create a fuzzy variable with a specified range. By default, this variable has no membership functions.

var = fisvar([0 9]);

To add a type-2 membership function to a variable with no existing membership functions, specify either a LowerLag or LowerScale value for the membership function. For example specify a lower scale value.

var = addMF(var,"trimf",[0 3 6],LowerScale=1);

Once a variable contains a type-2 membership function, you can add additional type-2 membership functions without specifying one of these parameters.

var = addMF(var,"trimf",[3 6 9]);

View the membership functions.

var.MembershipFunctions
ans = 
  1×2 fismftype2 array with properties:

    Type
    UpperParameters
    LowerScale
    LowerLag
    Name

  Details:
         Name      Type      Upper Parameters    Lower Scale    Lower Lag 
         _____    _______    ________________    ___________    __________

    1    "mf1"    "trimf"      0    3    6            1         0.2    0.2
    2    "mf2"    "trimf"      3    6    9            1         0.2    0.2

To use a custom membership function when designing a FIS at the MATLAB® command line, specify the name and parameters when adding the membership function using addMF. For example, the following command adds custom membership function custmf1 to the first input variable, input1, of FIS myFIS and names it customMF1.

Create a FIS and add an input variable.

myFIS = mamfis;
myFIS = addInput(myFIS);

Add custom membership function custmf1 to the first input variable, input1, of this FIS and name it customMF1.

myFIS = addMF(myFIS,"input1","custmf1",[0 1 2 4 6 8 9 10],...
    Name="customMF1");

Ensure that the range of the input variable matches the expected range of your membership function. For this example, set the range of the first input to [0 10].

myFIS.Inputs(1).Range = [0 10];

To verify the appearance of your membership function, you can plot it using plotMF.

plotmf(myFIS,"input",1) 

Figure contains an axes object. The axes object with xlabel input1, ylabel Degree of membership contains 2 objects of type line, text.

Input Arguments

collapse all

Fuzzy inference system, specified as one of these objects:

  • mamfis — Mamdani fuzzy inference system

  • sugfis — Sugeno fuzzy inference system

  • mamfistype2 — Type-2 Mamdani fuzzy inference system

  • sugfistype2 — Type-2 Sugeno fuzzy inference system

Variable name, specified as a string or character vector. You can specify the name of either an input or output variable in your FIS. If your system has an input variable with the same name as an output variable, specify the type of the variable you want to add a membership function to using the VariableType name-value argument.

Membership function type, specified as a string or character vector that contains the name of a function in the current working folder or on the MATLAB® path. You can also specify a handle to such a function. When you specify type, you must also specify parameters.

This table describes the values that you can specify for type.

Membership Function TypeDescriptionFor More Information
"gbellmf"Generalized bell-shaped membership functiongbellmf
"gaussmf"Gaussian membership functiongaussmf
"gauss2mf"Gaussian combination membership functiongauss2mf
"trimf"Triangular membership functiontrimf
"trapmf"Trapezoidal membership functiontrapmf
"linsmf"Linear s-shaped saturation membership function (since R2022a)linsmf
"linzmf"Linear z-shaped saturation membership function (since R2022a)linzmf
"sigmf"Sigmoidal membership functionsigmf
"dsigmf"Difference between two sigmoidal membership functionsdsigmf
"psigmf"Product of two sigmoidal membership functionspsigmf
"zmf"Z-shaped membership functionzmf
"pimf"Pi-shaped membership functionpimf
"smf"S-shaped membership functionsmf
"constant"Constant membership function for Sugeno output membership functionsSugeno Fuzzy Inference Systems
"linear"Linear membership function for Sugeno output membership functions
String or character vectorName of a custom membership function in the current working folder or on the MATLAB path. Custom output membership functions are not supported for Sugeno systems.Build Fuzzy Systems Using Custom Functions
Function handleHandle to a custom membership function in the current working folder or on the MATLAB path. Custom output membership functions are not supported for Sugeno systems.

Membership function parameters, specified as a vector. The length of the parameter vector depends on the membership function type. When you specify parameters, you must also specify type.

When fisIn is a type-1 FIS or varIn contains type-1 membership functions, parameters sets the Parameters property of the added membership function.

When fisIn is a type-2 FIS or varIn contains type-2 membership functions, parameters sets the UpperParameters property of the added membership function.

Fuzzy variable, specified as a fisvar object.

Name-Value Arguments

collapse all

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: fis = addMF(fis,"distance",Name="high")

Membership function name, specified as a string or character vector. The default membership function name is "mf<uniqueIndex>", where uniqueIndex is automatically generated based on the current number of membership functions in the associated variable.

Variable type, specified as one of these values:

  • "input" — Input variable

  • "output" — Output variable

If your system has an input variable with the same name as an output variable, specify which variable to add the membership function to VariableType.

This name-value argument does not apply when adding when adding a membership function to a fisvar object.

Lower membership function scaling factor for type-2 membership functions, specified as a positive scalar less than or equal to 1. Use LowerScale to define the maximum value of the lower membership function.

Depending on the value of LowerLag, the actual maximum lower membership function value can be less than LowerScale.

This name-value argument applies only when adding type-2 membership functions.

Lower membership function delay factor for type-2 membership functions, specified as a scalar value or a vector of length two. You can specify lag values between 0 and 1, inclusive.

This name-value argument applies only when adding type-2 membership functions.

The following membership function types support only a scalar LowerLag value:

  • Symmetric MFs — gaussmf and gbellmf

  • One-sided MFs — sigmf, smf, and zmf

All other built-in membership functions support either a scalar or vector LowerLag value. For these membership functions, when you specify a:

  • Scalar value, the same lag value is used for both the left and right side of the membership function.

  • Vector value, you can define different lag values for the left and right sides of the membership function.

The lag value defines the point at which the lower membership function value starts increasing from zero based on the value of the upper membership function. For example, a lag value of 0.1 indicates that the lower membership function becomes positive when the upper membership function has a membership value of 0.1.

When the lag value is zero, the lower membership function starts increasing at the same point as the upper membership function.

Some membership function types restrict the maximum lag value. For example, LowerLag must be less than 1 for the gaussmf, gauss2mf, gbellmf, sigmf, dsigmf, and psigmf membership functions.

Version History

Introduced in R2018b

expand all