最近,工作中刚好遇到一个热电偶标定的工作,需要用到线性拟合方法。网上查了一下有个强大的GSL库,正好用了一下。废话不多说直接上代码。
#include <gsl/gsl_fit.h>
#include <iostream>
using namespace std;
int main()
{
// inputs for special functions
int n = 7;
double x[7] = { -27.70, -16.00, 1.80, 26.60, 61.50, 81.40, 121.30 };
double y[7] = { -30.0080, -18.1010, -0.0480, 24.9630, 59.9750, 79.9720, 119.9640};
double c0, c1, cov00, cov01, cov11, sumsq;
gsl_fit_linear(x, 1, y, 1, n, &c0, &c1, &cov00, &cov01, &cov11, &sumsq);
cout << "Intercept\t" << c0 << "\tSlope\t" << c1 << endl;
double ym = (y[0] + y[1] + y[2] + y[3] + y[4] + y[5]+ y[6])/7.0; //Average of vector y
double sct = pow(y[0] - ym, 2) + pow(y[1] - ym, 2) + pow(y[2] - ym, 2) + pow(y[3] - ym, 2); // sct = sum of total squares
double R2 = 1 - sumsq / sct;
cout << "Multiple R-squared: " << R2 << endl;
}
结果如下:
结果显示R2 值很接近1,拟合效果还不错,说明热电偶的线性度还可以。