У меня есть некоторые данные, которые связаны между собой отношением. 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}
Выход: