y = B*exp(Cx)
나는 데이터를 플롯하고 관계에서 값을 결정할 수 있기를 원하는 관계와 관련된 일부 데이터를 가지고 있습니다 .ln(y) = ln(B) + Cx
x
및 의 원시 데이터 값이 있습니다 y
. 나는 그것들을 플롯하고 그래프에 가장 적합한 선을 그리고 또한 가장 적합한 선의 방정식을 표시하여 y 절편을 결정하고 ln(B)
결과적으로 결정하고 싶습니다.B
지금까지 나는 이것을 가지고 있습니다
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}
\addplot table[x={x}, y={y}] {
x y
0.284 0.01
0.433 0.59
0.485 2.97
0.500 3.96
0.531 9.48
0.558 18.00
0.597 45.00
0.621 94.00
0.696 1136.00
};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
로그 10 그래프에서는 내가 원하는 대로 자연 로그가 아니지만 데이터를 플롯합니다.
나는 시도했다
\addplot table[x={x}, y={create col/linear regression={y=y}}] {data.dat};
그러나 아무 소용이 없습니다.
최신 버전의 pgf 플롯을 사용하고 있으며 세미로그 축이 아닌 경우 회귀선이 작동합니다.
답변1
문제는 서문에 로드하지 않은 패키지에 있는 것 같습니다. 귀하의 예를 (기본적으로 축어적으로) 취하고 적절한 패키지를 추가하는 것이 저에게 효과적입니다.
방정식과 관련하여 \pgfplotstableregressiona
및 를 통해 액세스할 수 \pgfplotstableregressionb
있으며 숫자를 구문 분석하여 간단히 a x + b
변환 할 수 있습니다. A e^{B x}
이 항목은 항상 기록되므로 계산을 완료하자마자 \pgfmathresult
기록하는 이유입니다 . \fitb
대신 다음과 같은 경우:
\pgfmathparse{exp(\pgfplotstableregressionb)}
\addlegendentry{Fit: \(\pgfmathresult e^{\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x}\)}
\pgfmathresult
그러면 지수화 결과가 여전히 포함된다는 보장이 없습니다 . 실제로는 그렇지 않다는 것을 알게 될 것입니다.
전체 예는 다음과 같습니다.
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.13}
\begin{filecontents*}{data.dat}
x y
0.284 0.01
0.433 0.59
0.485 2.97
0.500 3.96
0.531 9.48
0.558 18.00
0.597 45.00
0.621 94.00
0.696 1136.00
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
legend pos=outer north east,
]
\addplot table[x={x}, y={y}] {data.dat};
\addlegendentry{Data}
\addplot table[x={x}, y={create col/linear regression={y=y}}] {data.dat};
\pgfset{/pgf/fpu=true}
\pgfmathparse{exp(\pgfplotstableregressionb)}
\pgfmathprintnumberto{\pgfmathresult}{\fitb}
\addlegendentry{Fit: \(\fitb e^{\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x}\)}
\pgfset{/pgf/fpu=false}
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
산출: