1

How can I draw the gausian functions sign inside the flowchart block (those circles)? enter image description here

The code I have is:

\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc,chains,shapes.geometric,backgrounds,fit,arrows,positioning}

\tikzset{ blockk/.style={ draw, fill=blue!20, rectangle, minimum height=2.5em, minimum width=2.5em }, sum/.style={ draw, fill=blue!20, circle, minimum size=0.5cm, }, neu/.style={ draw, fill=blue!20, circle, minimum size=0.5cm, }, input/.style={coordinate}, output/.style={coordinate}, pinstyle/.style={ pin edge={to-,thin,black} } }

\begin{figure} \begin{adjustbox}{width=\textwidth,height=\textheight,keepaspectratio} \begin{tikzpicture}[auto,>=latex'] % We start by placing the blocks \node [input, name=input1] {}; %fuzzification \node [neu, above = of input1] (neu) {}; \node [neu, right = of neu] (neu1) {}; \node [neu, right = of neu1] (neu2) {}; \node [neu, right = of neu2] (neu3) {}; %memberships \node [neu, above left = 0.5 and 0 of neu] (membership1) {}; \node [neu, above right = 0.5 and 0 of neu] (membership2) {}; \node [neu, above left = 0.5 and 0 of neu1] (membership3) {}; \node [neu, above right = 0.5 and 0 of neu1] (membership4) {}; \node [neu, above left = 0.5 and 0 of neu2] (membership5) {}; \node [neu, above right = 0.5 and 0 of neu2] (membership6) {}; \node [neu, above left = 0.5 and 0 of neu3] (membership7) {}; \node [neu, above right = 0.5 and 0 of neu3] (membership8) {}; %Rules firing \node [neu, above = 2.5 of neu] (rule1) {$\bar{z}l$}; \node [neu, right = of rule1] (rule2) {$\bar{z}_r$}; \node [neu, right = of rule2] (rule3) {$\underbar{z}_l$}; \node [neu, right = of rule3] (rule4) {$\underbar{z}_r$}; %consequent \node [neu, above right = 0.8 and 0.4 of rule2] (consequent) {$O{f_m}$}; %sum \node [sum, above = of consequent] (sum) {\tiny+}; %integral \node [blockk, above = of sum] (integral) {$D_t^{-q}$}; %sum1 \node [sum, above = of integral] (sum1) {};
\node[above=-2pt] at (sum1.center){\tiny $+$}; \node[below=-2pt] at (sum1.center){\tiny $-$}; % \node [input,right = of sum, name=input5] {}; % \node [input,above = of sum1, name=input6] {}; % \node [input,below = of neu1, name=input2] {}; \node [input,below = of neu2, name=input3] {}; \node [input,below = of neu3, name=input4] {};

\draw [draw,->] (input1) -- node {\textcolor{blue}{$\tt\hat{y}(t)$}} (neu);
\draw [draw,->] (input2) -- node {\textcolor{blue}{$\tt\hat{y}(t-\tau)$}} (neu1);
\draw [draw,->] (input3) -- node {\textcolor{blue}{$\tt\hat{y}(t-2\tau)$}} (neu2);
\draw [draw,->] (input4) -- node {\textcolor{blue}{$\tt\hat{y}(t-3\tau)$}} (neu3);

\draw [draw,->] (neu) -- node [left]{$\bar{u}$} (membership1);
\draw [draw,->] (neu) -- node [right]{$\underbar{u}$} (membership2);
\draw [draw,->] (neu1) -- (membership3);
\draw [draw,->] (neu1) -- (membership4);
\draw [draw,->] (neu2) -- (membership5);
\draw [draw,->] (neu2) -- (membership6);
\draw [draw,->] (neu3) -- (membership7);
\draw [draw,->] (neu3) -- (membership8);

\draw [draw,->] (membership1) -- (rule1);
\draw [draw,->] (membership3) -- (rule1);
\draw [draw,->] (membership5) -- (rule1);
\draw [draw,->] (membership7) -- (rule1);
%
\draw [draw,->] (membership2) -- (rule2);
\draw [draw,->] (membership4) -- (rule2);
\draw [draw,->] (membership6) -- (rule2);
\draw [draw,->] (membership8) -- (rule2);
%
\draw [draw,->,red] (membership1) -- (rule3);
\draw [draw,->,red] (membership3) -- (rule3);
\draw [draw,->,red] (membership5) -- (rule3);
\draw [draw,->,red] (membership7) -- (rule3);    
%
\draw [draw,->,red] (membership2) -- (rule4);
\draw [draw,->,red] (membership4) -- (rule4);
\draw [draw,->,red] (membership6) -- (rule4);
\draw [draw,->,red] (membership8) -- (rule4);
%
\draw [draw,->] (rule1) -- (consequent);
\draw [draw,->] (rule2) -- (consequent);
\draw [draw,->] (rule3) -- (consequent);
\draw [draw,->] (rule4) -- (consequent);
%
\draw [draw,->] (consequent) -- (sum);
%
\draw [draw,->] (sum) -- (integral);
%
\draw [draw,->] (integral) -- (sum1);
%
\draw [draw,->] (input5) -- (sum);
%    
\draw [draw,->] (input6) -- (sum1);
%
\draw[double,dashed,-,green](sum1)--(5.5,11.1)-- ([yshift=-0.5em]consequent.south east);


\end{tikzpicture} \end{adjustbox} \caption{Online identification structure.}\label{fig30} \end{figure}

Milito
  • 45

1 Answers1

1

You could use the picture path option to place a plotted function inside a node:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document} \begin{tikzpicture}

\tikzset{ neu/.style={ draw, fill=blue!20, circle, minimum size=0.5cm, }, declare function={ sigma(\x) = 1/(1+exp(-\x)); } }

\node[neu, path picture={ \draw[shift={(path picture bounding box.center)}, domain=-0.3:0.3, samples=50, ] plot ({\x},{0.3(sigma(30\x)-0.5)}); }] (membership1) {};

\end{tikzpicture} \end{document}

enter image description here


For your concrete case, you could do something like this:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document} \begin{tikzpicture}

\tikzset{ neu/.style={ draw, fill=blue!20, circle, minimum size=0.5cm, }, declare function={ sigma(\x) = 1/(1+exp(-\x)); sigmap(\x) = sigma(\x)*(1-sigma(\x)); } }

\node[neu, path picture={ \draw[blue, shift={(path picture bounding box.center)}, domain=-0.25:0.25, samples=50, ] plot ({\x},{0.3(sigma(30\x-2)-0.5)}); \draw[blue, shift={(path picture bounding box.center)}, domain=-0.25:0.25, samples=50 ] plot ({\x},{0.3(sigma(20\x+0.5)-0.5)}); }] at (0,0) (membership1) {};

\node[neu, path picture={ \draw[blue, shift={(path picture bounding box.center)}, domain=-0.25:0.25, samples=50, ] plot ({\x},{0.3(sigma(-30\x-2)-0.5)}); \draw[blue, shift={(path picture bounding box.center)}, domain=-0.25:0.25, samples=50 ] plot ({\x},{0.3(sigma(-20\x+0.5)-0.5)}); }] at (2,0) (membership2) {};

\node[neu, path picture={ \draw[red, shift={(path picture bounding box.center)}, domain=-0.25:0.25, samples=50, ] plot ({\x},{(sigmap(20*\x)-0.1)}); }] at (1,0) (membership3) {};

\end{tikzpicture} \end{document}

enter image description here

  • Thank you for your answer but I want it to look like an interval as shown in the image. Is there a way to draw two lines as depicted? – Milito Apr 07 '23 at 21:30
  • @Milito Sure, you can add as many plots as you wish (see my edit). I don't know the function for these plots though. – Jasper Habicht Apr 09 '23 at 16:21