
pgfplot을 사용하여 적정 곡선을 그리려고 합니다. 기준으로이 종이, 적정 곡선에 대한 방정식은 다음과 같습니다.
나는 이것을 pgfplots 내에서 구현하려고 시도했는데 매우 이상한 결과를 얻었습니다.
왜 이런 일이 발생하는지 모르겠습니다. 내가 사용한 정확한 공식을 재현하려고 시도하는 것조차데스모스작동하지 않았다.
참고로 코드는 다음과 같습니다.뒷면 프로젝트에 대한 링크.
\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}
참고: pgfplot 함수 내에서 V_a와 같은 변수를 가질 수 있는 방법이 있다면 전체적으로 상수를 갖는 것보다 훨씬 좋을 것입니다. 감사합니다 Torjorn
답변1
TeXs 한계에 도달했기 때문에 이 이상한 결과가 나타납니다(떨어진 좌표에서도 볼 수 있듯이). 따라서 "지그재그"는 정밀도 한계(빨간색 선)로 인해 발생합니다. gnuplot(녹색 점) 또는 Lua(파란색 선)를 계산 엔진으로 사용하면 예상대로 작동합니다. 물론 Lua 솔루션의 경우 LuaLaTeX를 TeX 엔진으로 사용해야 합니다.
참고:
이렇게 많은 수의 샘플을 사용하지 않으려면 비선형 간격을 활용하도록 방정식을 다시 공식화하는 것이 좋습니다. 이에 대해서는 예를 참조하십시오.
% 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}