目标:创建一个图来比较数值方法的经验收敛速度与理论预期的收敛速度。
因此,给定一个对数对数图,我想添加具有规定斜率(在本例中为方法的收敛)和最佳截距以拟合数据的线(例如,在最小二乘意义上)。
问题:如何在 pgfplots 中进行具有固定斜率的线性回归?
到目前为止,我所做的工作如下:(1)计算回归线(数量对数),(2)保存截距,(3)根据理论预期的斜率和该截距绘制直线。
只要数据与理论一致,这便是我所寻找的一个很好的近似值。
谢谢
中频熔断器
答案1
您可以使用gnuplot
PGFPlots 进行参数估计。
要估计斜率和截距,可以使用以下\addplot
命令:
\addplot [red, raw gnuplot] gnuplot {
a = -1;
b = 0.1;
f(x) = a*x+b;
fit f(x) 'data.dat' using (log($1)):(log($2)) via a,b;
set samples 2;
plot [x=100:10000] exp(f(log(x)));
};
这定义了初始参数值和方程,然后将参数拟合到数据文件中找到的对数变换值data.dat
。为了生成图,样本数设置为 2(因为我们要绘制一条直线),指数函数必须应用于函数值,并且必须对 x 个样本取对数。
为了规定斜率,将直线via a,b
中的改为。这样,将保持其初始值不变,并且仅估计截距。fit
via b
a
下面是一个观察蒙特卡洛方法估算 Pi(示例 1)红线采用理论收敛速度-1,黑线采用根据数据估算的收敛速度。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents*}{data.dat}
N e
100 0.0984
400 0.0316
1600 0.0284
6400 0.00659
10000 0.00359
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmode=log, ymode=log,
domain=100:10000
]
\addplot [only marks] table [y=e] {data.dat};
\addplot [red, raw gnuplot] gnuplot {
a = -1;
b = 0.1;
f(x) = a*x+b;
fit f(x) 'data.dat' using (log($1)):(log($2)) via b;
set samples 2;
plot [x=100:10000] exp(f(log(x)));
} node [pos=0.25, above right] {$a=-1$};
\addplot [raw gnuplot] gnuplot {
a = -1;
b = 0.1;
f(x) = a*x+b;
fit f(x) 'data.dat' using (log($1)):(log($2)) via a,b;
set samples 2;
plot [x=100:10000] exp(f(log(x)));
} node [pos=0.25, below left] {$a=-0.67$} ;
\end{axis}
\end{tikzpicture}
\end{document}