What is the best function of the following shape?

5 views (last 30 days)
How can I construct this shape? what is the best function of it?
It is more like sigmoid function + straight line
But I cant get how can I represent it by one equation and How to control its limits!
The Y limits should be from 0 to 1
( I want to use it as a fuzzy memebership function)
Is there any recommendation?
  2 Comments
M
M on 7 Sep 2022
Hi @Sam Chak, How did you get the above plots? Could you please provide me with the code.
I want to use this membership function in a code, not with the fuzzy tool box. Thanks

Sign in to comment.

Accepted Answer

Sam Chak
Sam Chak on 7 Sep 2022
Edited: Sam Chak on 12 Sep 2022
Hi @M
The original code was accidentally highlighted and deleted due to sensitive touchpad. It was constructed based on @Torsten's idea on the Arctangent function but I replaced it with the Logistic function as shown in this link:
Since you don't want anything to do with the Fuzzy Logic Toolbox, this new solution, a Quintic function (not in the toolbox, so you can probably claim novelty in the Fuzzy MF paper), is tailor-made for you so that you adjust the position of the cutoff point (end point of blue line) easily.
Example #1: The Quintic function, a 5th-order polynomial, is commonly used in the trajectory planning of a mobile robot. So I modified the function for a custom fuzzy membership function.
I have not tested everything. But this is the basic concept for you to develop. Hope it helps.
% Quintic function-based MF (blue line as main)
% Start point (xA, yA); End point (xB, yB);
xf = 1;
x = linspace(0, xf, xf*1e4 + 1);
yA = 0;
yB = 1;
xA = 0.1;
xB = 0.9;
y = (yA + (10*((x - xA)/(xB - xA)).^3 - 15*((x - xA)/(xB - xA)).^4 + 6*((x - xA)/(xB - xA)).^5)*(yB - yA)).*((0 <= (x - xA)) & ((x - xA) < (xB - xA)));
plot(x, y, -(x-xf), y), grid on, ylim([0 1.2])
legend('MF_1', 'MF_2', 'location', 'north')
xlabel('Universe of Discourse, \it{x}'), ylabel('\mu(\it{x})')
Example #2: Using the Logistic function:
xf = 1;
x = linspace(0, xf, xf*1e4 + 1);
xA = 0.1; % Left bound of the blue S-curve
xB = 0.9; % Right bound of the blue S-curve
a = 2*9.2; % (logistic growth rate) adjust the steepness of S-curve
c = 0.5; % shift the center of S-curve to x = c
y = sigmf(x, [a c]).*((0 <= (x - xA)) & ((x - xA) < (xB - xA)));
plot(x, y, -(x-xf), y), grid on, ylim([0 1.2])
legend('MF_1', 'MF_2', 'location', 'north')
xlabel('Universe of Discourse, \it{x}'), ylabel('\mu(\it{x})')
  7 Comments
Bruno Luong
Bruno Luong on 12 Sep 2022
((0 <= (x - xA)) & ((x - xA) < (xB - xA)))
or equivalently
((x >= xA) & (x < xB))

Sign in to comment.

More Answers (4)

Torsten
Torsten on 6 Sep 2022
Edited: Torsten on 6 Sep 2022
x = -2:0.01:2;
plot([x,x(end)],[1/pi*atan(2*x)+1/2,1/pi*atan(2*x(1))+1/2])
xlim ([-3 3])
ylim ([0 1])
  14 Comments

Sign in to comment.


Bruno Luong
Bruno Luong on 7 Sep 2022
Try this:
xmin = 1;
xmax = 3;
pp = struct('form','pp',...
'breaks',[-1e-100 0 1 inf],...
'coefs',[0 0 0 0 0 0;6,-15,10,0,0,0;0 0 0 0 0 1],...
'pieces',3,...
'order',6,...
'dim',1);
sfun = @(x) ppval(pp,(x-xmin)/(xmax-xmin));
ezplot(sfun,xmin-1,xmax+1)
  13 Comments
Bruno Luong
Bruno Luong on 12 Sep 2022
Edited: Bruno Luong on 12 Sep 2022
"There is no requirement that the function maps all possible inputs in the domain."
Wrong to my book, all elements of input set (domain) must be mapped (defined) by the function.

Sign in to comment.


Walter Roberson
Walter Roberson on 6 Sep 2022
Looks like tansig
  2 Comments

Sign in to comment.


James Tursa
James Tursa on 6 Sep 2022
Edited: James Tursa on 6 Sep 2022
There are lots of functions that could fit this general shape. E.g., sin(x), or more generally A*sin(B*x+C) depending on width and height of the graph which you don't show. Maybe you could share some more details about where this shape comes from and the height and width sizes.
  3 Comments

Sign in to comment.

Categories

Find more on Data Clustering in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!