做外汇看的国外网站,wordpress onclick,免费网站电视剧全免费的app,wordpress输入域名跳转登录一、多项式拟合用途
当前有一组对应的x、y数据#xff0c;希望通过这些数据点做出近似的多项式曲线#xff1a;YnX^2mXc 其中多项式最高次数可调#xff0c;返回各个参数及曲线的拟合度R^2
二、函数实现
参数中的order为设置的多项式最高次次数#xff0c;coefficients为…一、多项式拟合用途
当前有一组对应的x、y数据希望通过这些数据点做出近似的多项式曲线Y···nX^2mXc 其中多项式最高次数可调返回各个参数及曲线的拟合度R^2
二、函数实现
参数中的order为设置的多项式最高次次数coefficients为各次的系数
double polynomialFit(vectordouble x, vectordouble y, unsigned char order, vectordouble coefficients){if (x.size() order || y.size() order) {return 0;}// 构建矩阵A和向量bint m x.size();int n order 1;vectorvectordouble A(n, vectordouble(n, 0));vectordouble b(n, 0);for (int i 0; i n; i) {for (int j 0; j n; j) {for (int k 0; k m; k) {A[i][j] pow(x[k], ij);}}for (int k 0; k m; k) {b[i] y[k] * pow(x[k], i);}}n A.size();for (int i 0; i n; i) {// 列主元素消去int maxRow i;double maxVal fabs(A[i][i]);for (int k i 1; k n; k) {if (fabs(A[k][i]) maxVal) {maxVal fabs(A[k][i]);maxRow k;}}if (maxRow ! i) {std::swap(A[i], A[maxRow]);std::swap(b[i], b[maxRow]);}// 消元过程for (int k i 1; k n; k) {double factor A[k][i] / A[i][i];for (int j i; j n; j) {A[k][j] - factor * A[i][j];}b[k] - factor * b[i];}}// 回代求解vectordouble result(n, 0);for (int i n - 1; i 0; i--) {double temp b[i];for (int j i 1; j n; j) {temp - A[i][j] * result[j];}result[i] temp / A[i][i];}coefficients result;double SSR0;double SST0;double sumY std::accumulate(std::begin(y),std::end(y),0.0);double avgY sumY/y.size();for(uint16_t i0;iy.size();i){double actY0;for(unsigned char j0;jorder;j){actYpow(x[i],j)*result[j];}SSR pow(actY-y[i],2);SST pow(y[i]-avgY,2);}double R 1-SSR/SST;return R;
}三、函数调用
vectordouble xs{0,0,0,0};
vectordouble selectX;
vectordouble selectY;
selectX.push_back(..);
...
selectY.push_back(..);
...
double R polynomialFit(selectX,selectY,3,xs);