(C++进阶)使用Eigen库进行多项式曲线拟合

目录

一、Eigen库

1、简介

2、特点

二、代码实现


一、Eigen库

1、简介

Eigen库的安装:Eigen 库的安装_eigen-3.3.9.zip-CSDN博客

Eigen是一个C++模板库,专门用于线性代数运算。它提供了矩阵、向量操作和线性代数算法所需的功能,且采用头文件形式,易于集成到C++项目中。

2、特点

快速且高效:Eigen被设计为快速执行矩阵运算,使用了优化的表达式模板来提高性能。
易于使用:其API设计得很直观,支持常见的线性代数运算,如矩阵乘法、求逆、特征值分解等。
纯头文件:只需包含相应的头文件,无需编译额外的库或依赖。
跨平台:Eigen可以在多种平台上运行,不依赖特定的硬件或操作系统。
开源:Eigen是开源的,基于MPL2许可证发布,可免费用于商业项目。

二、代码实现

//当涉及曲线拟合时,C++中有几种方法可以实现,但其中一个流行的方式是使用最小二乘法来拟合曲线。
//使用C++的Eigen库进行多项式曲线拟合:

#include <iostream>
#include <Eigen/Dense>

// 曲线拟合函数
Eigen::VectorXd curveFitting(const Eigen::VectorXd& x, const Eigen::VectorXd& y, int degree)
{
	int n = x.size();
	Eigen::MatrixXd A(n, degree + 1);

	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j <= degree; ++j)
		{
			A(i, j) = pow(x(i), j);
		}
	}

	Eigen::VectorXd result = A.householderQr().solve(y);
	return result;
}

int main()
{
	Eigen::VectorXd x(3);
	Eigen::VectorXd y(3);

	// 假设这是一些已知的数据点
	x << 515, 541, 567 ;
	y << 59, 121, 91;

	// 多项式拟合的阶数
	int degree = 2;

	Eigen::VectorXd coefficients = curveFitting(x, y, degree);

	std::cout << "拟合多项式:y=a2x^2+a1x+a0" << std::endl;
	std::cout << "拟合多项式的系数a0 a1 a2分别为:" << coefficients.transpose() << std::endl;

	system("pause");
	return 0;
}

扫描二维码关注公众号,回复: 17235058 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_57594025/article/details/134305142