
Estoy intentando dibujar una curva de titulación usando pgfplot. Con sede fueraeste papel, existe una ecuación para la curva de titulación:
Intenté implementar esto dentro de pgfplots y obtuve un resultado muy extraño:
No tengo idea de por qué ocurriría esto; incluso intentando recrear la fórmula exacta que utilicé endesmosno funcionó.
Como referencia, aquí está el código, y también unenlace a un proyecto al dorso.
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\pgfkeys{
/pgf/declare function={
arcsinh(\x) = ln(\x + sqrt(\x^2+1));
},
/pgf/declare function={
Va = 0.025;
Ma = 0.1;
Mb = 0.1;
V(\x) = \x / 1000;
Kw = 1*10^(-14);
p(\o) = -ln(\o)/ln(10);
}
}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
xlabel = {Solution Added (mL)},
ylabel = {pH},
ymin=0,
ymax=14,
ytick distance=7,
xtick distance=10,
]
\addplot[%
samples=100,
color=red,
domain=0:50,
]{%
7 + 1/ln(10) * arcsinh( 1/(2*sqrt(Kw)) * (Mb*V(x) - Ma*Va) / (Va + V(x)) )
};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
nota final: si hay una manera de tener variables, por ejemplo, V_a dentro de la función pgfplot, sería mucho mejor que tener constantes en todas partes. gracias torjorn
Respuesta1
Se obtiene este resultado extraño porque se alcanzan los límites de TeX, como también se puede ver en las coordenadas eliminadas, y por lo tanto el "zigzag" resulta de los límites de precisión (línea roja). Si utiliza gnuplot (puntos verdes) o Lua (línea azul) como motor de cálculo, funciona como se esperaba. Por supuesto, para la solución Lua debes utilizar LuaLaTeX como motor TeX.
Nota al margen:
Si desea evitar el uso de una cantidad tan alta de muestras, considere reformular la ecuación para utilizar un espaciado no lineal. Para eso ver por ejemplo
% used PGFPlots v1.17
\documentclass[border={5pt}]{standalone}
\usepackage{pgfplots}
% use this `compat` level or higher to use LUA backend for calculation (if possible)
\pgfplotsset{compat=1.12}
\begin{document}
% for gnuplot solution
\newcommand*{\Kw}{1e-14}
\newcommand*{\Ma}{0.1}
\newcommand*{\Mb}{0.1}
\newcommand*{\Va}{0.025}
\begin{tikzpicture}[
% from https://tex.stackexchange.com/q/144778
/pgf/declare function={
% for LUA solution
arcsinh(\x) = ln(\x + sqrt(\x^2+1));
Kw = 1e-14;
Ma = 0.1;
Mb = 0.1;
Va = 0.025;
V(\x) = \x / 1000;
p(\o) = -0.5*ln(\o)/ln(10);
},
]
\begin{axis}[
xlabel={Solution Added (mL)},
ylabel={pH},
domain=0:50,
samples=201,
]
% gnuplot
\addplot+ [ultra thick,green,mark size=1pt,only marks,opacity=0.5] gnuplot
{-0.5*log10(\Kw) + asinh(1/(2*sqrt(\Kw)) * (\Ma*\Va - \Mb*x/1000)/(\Va + x/1000) )/log(10)};
% Lua(TeX)
\addplot [thick,blue]
{p(Kw) + arcsinh(1/(2*sqrt(Kw)) * (Ma*Va - Mb*V(x))/(Va + V(x)) )/ln(10)};
% TeX
\addplot [red,opacity=0.75]
{p(\Kw) + arcsinh(1/(2*sqrt(Kw)) * (Ma*Va - Mb*V(x))/(Va + V(x)) )/ln(10)};
\end{axis}
\end{tikzpicture}
\end{document}