4

I would like to draw this curve:
enter image description here

Using tikz, I did the following

\begin{tikzpicture}
\draw [<->,thick] (0,5) node (yaxis) [above, text width=3.5cm,align=center] {$B_{J}(x)$}
        |- (7,0) node (xaxis) [right] {$x$};
\draw (0,0)--(0.3,0.9)--(0.6,1.2);
\end{tikzpicture}

But, the co-ordinates are breaking my head. Is there an easy way to do this?

enter image description here

5
  • 2
    "the co-ordinates are breaking my head" ... what? :) I have no idea what you mean and apparently Jesse doesn't either. Jul 20, 2014 at 6:13
  • What is the function B_J(x) ?
    – percusse
    Jul 20, 2014 at 6:50
  • @percusse please see the edit Jul 20, 2014 at 6:54
  • Well, what is J then?
    – percusse
    Jul 20, 2014 at 6:59
  • Can you come in the chat? @percusse Jul 20, 2014 at 7:02

4 Answers 4

9

Assuming I got the equation bit right then you could try using LuaLaTeX:

\documentclass[border=5]{standalone}
\usepackage{tikz}
\directlua{
function coth (i) 
  return math.cosh(i) / math.sinh(i)
end

function brillouin (J, x) 
  if x == 0 then
    return 0
  else
   return (2*J+1)/(2*J)*coth((2*J+1)/(2*J)*x) - 
        1/(2*J)*coth(1/(2*J)*x)
  end
end
}
\pgfmathdeclarefunction{Brillouin}{2}{%
  \edef\pgfmathresult{%
     \directlua{tex.print("" .. brillouin(#1,#2))}%
   }%  
}
\begin{document}    
\begin{tikzpicture}[x=2cm/10]
\draw [help lines] (-5,0) -- (10,0);
\draw [help lines, -stealth] (0,-1) -- (0,1.5);
\draw [densely dotted] (0,{ Brillouin(1, 100)} ) -- ++(10,0);
\draw [red]   plot [domain=-5:10, samples=100] (\x, { Brillouin(1, \x)});  
\draw [green] plot [domain=-5:10, samples=100] (\x, { Brillouin(5, \x)}); 
\draw [blue]  plot [domain=-5:10, samples=100] (\x, { Brillouin(50, \x)}); 
\end{tikzpicture}    
\end{document}

enter image description here

1
8

Something like this. Use of \draw plot command in tikz.

Update Based on the OP's comment about not matching the original figure, this update provides a first order exponential plot with time constant capability. (One can change the y label 2 to 1.) Change parameter \a value for different plots with corresponding time constants.

enter image description here

Code

\documentclass[border=10pt]{standalone}%{article}
\usepackage{tikz}
\pagestyle{empty}
\def\a{3}              % time constant=1/a
\begin{document}

\begin{tikzpicture}
\draw [<->,thick] (0,2.5) node (yaxis) [above, text width=3.5cm,align=center] {$B_{J}(x)$} |- (5,0) node (xaxis) [right] {$x$};
\draw[dashed] (0,2)node[left]{2}--node[above]{value}(3,2);
\node[left] at (0,0){0};
\draw[red] plot[domain=0:4,samples=50] ({\x},{2-2*exp(-\a*\x)});   % <-- \a is added 
\end{tikzpicture}

\end{document}

enter image description here

Code

\documentclass[border=10pt]{standalone}%{article}
\usepackage{tikz}
%\usepackage{pgfplots,pgfplotstable}
%\pgfplotsset{compat=newest}
\pagestyle{empty}
\begin{document}

\begin{tikzpicture}
\draw [<->,thick] (0,3) node (yaxis) [above, text width=3.5cm,align=center] {$B_{J}(x)$} |- (7,0) node (xaxis) [right] {$x$};
\draw[dashed] (0,1)node[left]{1}--node[above]{above}(5,1);
\node[left] at (0,0){0};
\draw[red] plot[domain=0:5] ({\x},{1-exp(-\x)});
\end{tikzpicture}

\end{document}
3
  • Nope. It isn't matching with the original figure Jul 20, 2014 at 6:02
  • 1
    Sorry, I don't quite follow you. I used the x,y axis provided by you. The function shown in the original figure is like 1-exp(-x).
    – Jesse
    Jul 20, 2014 at 6:13
  • 1
    You could use 2-2*exp(-x) or any value higher than 2, to get a larger magnitudes, if that is what you meant. Or you are referring to the time constant of an exponential function.
    – Jesse
    Jul 20, 2014 at 6:26
6

Here's an option using pgfplots, which is based on tikz, but eases the plotting of such functions.

screenshot

% arara: pdflatex
% !arara: indent: {overwrite: yes}
\documentclass[tikz,border=2pt]{standalone}

\usepackage{pgfplots}

% arrows are stealth fighters
\tikzset{>=stealth}
\begin{document}
\begin{tikzpicture}[
        /pgf/declare function={coth(\x)=1/tanh(\x);},
        /pgf/declare function={brillouin(\x,\J)=%
            (2*\J+1)*coth( (2*\J+1)*\x/(2*\J) )/(2*\J)-coth(\x/(2*\J))/(2*\J);
        },
    ]
    \begin{axis}[
            axis x line=middle,
            axis y line=middle,
            axis line style=->,
            ymax=2,
            grid=none,
            samples=100,
            xtick={-1},
            ytick={1},
            xlabel={$x$},
            ylabel={$B_J(x)$},
        ]
        \addplot+[domain=0.1:5,no marks,thick] {brillouin(x,1)};
        \addplot+[domain=0.1:5,no marks,ultra thick] {brillouin(x,2)};
        \addplot [domain=0:5,dashed]{1}node[pos=0.5,anchor=south]{value};
    \end{axis}
\end{tikzpicture}
\end{document}
0
3

Just for typing exercise with PSTricks.

\documentclass[pstricks,border=15pt,12pt,dvipsnames]{standalone}
\usepackage{pst-math,pst-plot}

\def\f#1{(2*#1+1)/(2*#1*TANH((2*#1+1)/(2*#1)*x))-1/(2*#1*TANH(x/(2*#1)))}

\psset
{
    xAxisLabel=$x$,
    yAxisLabel=$y$,
    algebraic,
}
\begin{document}
\begin{psgraph}[linecolor=gray,tickcolor=gray]{<->}(0,0)(-6.5,-1.5)(6.5,1.5){12cm}{8cm}
    \foreach \n/\c in {2/Red,3/ForestGreen,5/NavyBlue,7/Maroon}{%
    \psplot[linecolor=\c]{-6}{6}{\f{\n}}}
\end{psgraph}
\end{document}

enter image description here

1
  • Any customization is still possible, just drop your comment. Jul 20, 2014 at 13:08

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .