最小二乘法拟合曲线:二次函数
来源:互联网 发布:物理模拟实验室软件 编辑:程序博客网 时间:2024/05/17 01:44
void myLMS_poly2(const std::vector<double> src_x, const std::vector<double> src_y, int size, std::vector<double>& dst_y)
{
double a, b, c;
//Mat A = Mat_<double>(3, 3);
//Mat B = Mat_<double>(3, 1);
//Mat C = Mat_<double>(3, 1);
Mat A(3, 3, CV_64F);
Mat B(3, 1, CV_64F);
Mat X(3, 1, CV_64F);
double sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += pow(src_x[i], 4);
}
A.at<double>(0, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += pow(src_x[i], 3);
}
A.at<double>(0, 1) = A.at<double>(1, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += pow(src_x[i], 2);
}
A.at<double>(0, 2) = A.at<double>(1, 1) = A.at<double>(2, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += src_x[i];
}
A.at<double>(1, 2) = A.at<double>(2, 1) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += 1;
}
A.at<double>(2, 2) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += pow(src_x[i], 2) * src_y[i];
}
B.at<double>(0, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += src_x[i] * src_y[i];
}
B.at<double>(1, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += src_y[i];
}
B.at<double>(2, 0) = sum;
//X = A.inv() * B;
solve(A, B, X);// A * X = B
a = X.at<double>(0, 0);
b = X.at<double>(1, 0);
c = X.at<double>(2, 0);
printf("\n%f, %f, %f\n", a, b, c);
for (size_t i = 0; i < size; ++i)
{
double ret = a * pow(src_x[i], 2) + b * src_x[i] + c;
dst_y.push_back(ret);
}
}
{
double a, b, c;
//Mat A = Mat_<double>(3, 3);
//Mat B = Mat_<double>(3, 1);
//Mat C = Mat_<double>(3, 1);
Mat A(3, 3, CV_64F);
Mat B(3, 1, CV_64F);
Mat X(3, 1, CV_64F);
double sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += pow(src_x[i], 4);
}
A.at<double>(0, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += pow(src_x[i], 3);
}
A.at<double>(0, 1) = A.at<double>(1, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += pow(src_x[i], 2);
}
A.at<double>(0, 2) = A.at<double>(1, 1) = A.at<double>(2, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += src_x[i];
}
A.at<double>(1, 2) = A.at<double>(2, 1) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += 1;
}
A.at<double>(2, 2) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += pow(src_x[i], 2) * src_y[i];
}
B.at<double>(0, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += src_x[i] * src_y[i];
}
B.at<double>(1, 0) = sum;
sum = 0;
for (size_t i = 0; i < size; ++i)
{
sum += src_y[i];
}
B.at<double>(2, 0) = sum;
//X = A.inv() * B;
solve(A, B, X);// A * X = B
a = X.at<double>(0, 0);
b = X.at<double>(1, 0);
c = X.at<double>(2, 0);
printf("\n%f, %f, %f\n", a, b, c);
for (size_t i = 0; i < size; ++i)
{
double ret = a * pow(src_x[i], 2) + b * src_x[i] + c;
dst_y.push_back(ret);
}
}
阅读全文
0 0
- 最小二乘法拟合曲线:二次函数
- 拟合直线 二次函数曲线 最小二乘法 javascript(p5.js)
- 利用最小二乘法拟合任意次函数曲线
- 最小二乘法拟合曲线:4次函数
- 最小二乘法拟合曲线
- 二次项最小二乘法拟合代码
- 利用最小二乘法拟合任意次函数曲线(C#)
- 利用最小二乘法拟合任意次函数曲线(C#)
- 最小二乘法拟合二元多次曲线
- 用最小二乘法构造拟合曲线
- 最小二乘法求多项式拟合曲线
- 最小二乘法拟合多项式曲线原理
- Eigen最小二乘法拟合三次曲线
- 基于最小二乘法的C++二次抛物线拟合
- 最小二乘法拟合散点组成的椭圆曲线
- Python 最小二乘法多项式拟合曲线numpy.polyfit(),numpy.poly1d(),pylab
- 移动最小二乘法(MLS)曲线曲面拟合C++代码实现
- 最小二乘法拟合
- python3中使用requests和beautifulsoup爬取西刺免费代理IP 入库mongo!
- 进击的AssetBundles和它的工具们
- 好测试,坏测试
- mysqldump数据库备份,参数详解
- HDOJ 1171 Big Event in HDU(二进制拆分+0 1背包)
- 最小二乘法拟合曲线:二次函数
- Arduino的传感器使用教程1:PM2.5、温度和大气压传感器
- 自定义view,垂直seekbar
- 欢迎使用CSDN-markdown编辑器
- Java+selenium+testng+ant框架搭建-环境搭建01
- JDBC连接MySql数据库
- 算法设计大作业 8章第3题
- BZOJ 2748 音量调节
- Minimum supported Gradle version is 3.3. Current version is 2.14.1