For a given domain x and parameters params (or [a b c]), return the corresponding y values for the generalized bell-shaped membership function.
The argument x must be a real number or a non-empty vector of strictly increasing real numbers, a, b, and c must be real numbers, a must be non-zero, and b must be an integer. This membership function satisfies the equation:
f(x) = 1/(1 + (abs((x - c)/a))^(2 * b))
which always returns values in the range [0, 1].
The parameters a, b, and c give:
a == controls the width of the curve at f(x) = 0.5; f(c-a) = f(c+a) = 0.5 b == controls the slope of the curve at x = c-a and x = c+a; f'(c-a) = b/2a and f'(c+a) = -b/2a c == the center of the curve
This membership function has a value of 0.5 at the two points c - a and c + a, and the width of the curve at f(x) == 0.5 is 2 * |a|:
f(c - a) == f(c + a) == 0.5 2 * |a|== the width of the curve at f(x) == 0.5
The generalized bell-shaped membership function is continuously differentiable and is symmetric about the line x = c.
To run the demonstration code, type demo('gbellmf') at the Octave prompt.
See also: dsigmf, gauss2mf, gaussmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf.
The following code
x = 0:255; params = [20 4 100]; y1 = gbellmf(x, params); params = [30 3 100]; y2 = gbellmf(x, params); params = [40 2 100]; y3 = gbellmf(x, params); figure('NumberTitle', 'off', 'Name', 'gbellmf demo'); plot(x, y1, 'r;params = [20 4 100];', 'LineWidth', 2) hold on; plot(x, y2, 'b;params = [30 3 100];', 'LineWidth', 2) hold on; plot(x, y3, 'g;params = [40 2 100];', 'LineWidth', 2) ylim([-0.1 1.1]); xlabel('Crisp Input Value', 'FontWeight', 'bold'); ylabel('Degree of Membership', 'FontWeight', 'bold'); grid;
Produces the following figure
Figure 1 |
---|
Package: fuzzy-logic-toolkit