6
的OpenCV的cvSolve
可以解决线性最小二乘问题是这样的:加权线性最小二乘
// model: y = a1*x1 + a2*x2 + a3
CvMat *y = cvCreateMat(N, 1, CV_64FC1);
CvMat *X = cvCreateMat(N, 3, CV_64FC1);
CvMat *coeff = cvCreateMat(3, 1, CV_64FC1);
// fill vector y and matrix X
for (int i=0; i<N; ++i)
{
cvmSet(y, i, 0, my_y_value(i));
cvmSet(X, i, 0, my_x1_value(i));
cvmSet(X, i, 1, my_x2_value(i));
cvmSet(X, i, 2, 1);
}
cvSolve(X, y, coeff, CV_SVD);
// now coeff contains a1, a2, a3
不过,我想不同的权重应用到我的数据点。我如何使用重量?
什么是my_y_value,my_x1_value和my_x2_value? – Abc
它们旨在为您的矩阵(x1,x2)和左侧(y)提供值。这只是最一般的形式,您可以重写代码并以最适合您的方式提供值。另外请务必查看cvSolve的OpenCV文档。 – Hendrik