试用ceres写一个拟合

本文演示如何利用ceres库进行数据拟合,通过一个四次多项式函数y=ax^4+bx^3+cx^2+dx+e,创建了一个结构体`function_residual`并构建ceres问题。通过随机生成的数据点,使用ceres求解器找到最佳参数,实现曲线拟合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//拟合函数: y=ax^4+bx^3+cx^2+dx+e

#include <iostream>
#include <opencv2/core/core.hpp>
#include <ceres/ceres.h>

struct function_residual
{
    function_residual(double x_, double y_) : x(x_), y(y_){}

    template<typename T>
    bool operator()(const T* const abcde, T* residual) const
    {
        residual[0] = T(y)-(abcde[0]*T(x)*T(x)*T(x)*T(x)+
                            abcde[1]*T(x)*T(x)*T(x)+
                            abcde[2]*T(x)*T(x)+
                            abcde[3]*T(x)+
                            abcde[4]);//这里记得要将x和y进行T类型转换!!!
        return true;//这里记得return!!!!!!!!
    }

    const double x, y;
};

int main()
{
    using namespace std;

    double a=1.0, b=2.0, c=3.0, d=4.0, e=5.0;
    int N = 100;
    cv::RNG rng;//创建一个随机数发生器random number generator
    vector<double> x_data, y_data;

    for (int i = 0; i < N; ++i)
    {
        double x=i/10.0;//这里也要注意,要用10.0将运算自动转型
        x_data.push_back(x);

  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值