欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ Eigen庫(kù)實(shí)現(xiàn)最小二乘擬合的示例代碼

 更新時(shí)間:2023年07月19日 14:24:23   作者:RockWang.  
Eigen 是一個(gè)線(xiàn)性算術(shù)的 C++ 模板庫(kù),功能強(qiáng)大、快速、優(yōu)雅以及支持多平臺(tái),本文主要為大家介紹了C++利用Eigen庫(kù)實(shí)現(xiàn)最小二乘擬合的示例代碼,希望對(duì)大家有所幫助

前言

入職第二周的任務(wù)是將導(dǎo)師的Python代碼C化,發(fā)現(xiàn)Python中存在Numpy包直接調(diào)用np.polyfit就好了,但是C++不存在需要造輪子。

示例代碼

#include <iostream>
#include <cmath>
#include <vector>
#include <Eigen/QR>
#include "xtensor/xarray.hpp"
void polyfit(	const std::vector<double> &t,
                 const std::vector<double> &v,
                 std::vector<double> &coeff,
                 int order

)
{
    // Create Matrix Placeholder of size n x k, n= number of datapoints, k = order of polynomial, for exame k = 3 for cubic polynomial
    Eigen::MatrixXd T(t.size(), order + 1);
    Eigen::VectorXd V = Eigen::VectorXd::Map(&v.front(), v.size());
    //std::cout<<"ceshi"<<std::endl;
    //std::cout<<V<<std::endl;
    Eigen::VectorXd result;

    // check to make sure inputs are correct
    assert(t.size() == v.size());
    assert(t.size() >= order + 1);
    // Populate the matrix
    for(size_t i = 0 ; i < t.size(); ++i)
    {
        for(size_t j = 0; j < order + 1; ++j)
        {
            T(i, j) = pow(t.at(i), j);
        }
    }
    std::cout<<T<<std::endl;

    // Solve for linear least square fit
    result  = T.householderQr().solve(V);
    coeff.resize(order+1);
    for (int k = 0; k < order+1; k++)
    {
        coeff[k] = result[k];
    }

}

int main()
{
    // time value
    std::vector<double> time = {-2, 4, 6, 7, 9};
    std::vector<double> velocity = {5, 17, 37, 49, 82};

    // placeholder for storing polynomial coefficient
    std::vector<double> coeff ;
    polyfit(time, velocity, coeff, 2);
    xt::xarray<double> c = xt::zeros<double>({3});
    for(int i = 0; i < coeff.size(); i++)
    {
        c[i] = coeff[i];
    }
    
    std::vector<double> fitted_velocity;
    std::cout<< "Printing fitted values" << std::endl;
    for(int p = 0; p < time.size(); ++ p)
    {
        double vfitted = coeff[0] + coeff[1]*time.at(p) + coeff[2]*(pow(time.at(p), 2)) ;
        std::cout<< vfitted<<", ";
        fitted_velocity.push_back(vfitted);
    }
    std::cout<<std::endl;
    for(int i  = 0; i < c.size(); i++)
    {
        std::cout<<c[i]<<std::endl;
    }
    std::cout<<std::endl;


    return 0;
}

輸出結(jié)果

到此這篇關(guān)于C++ Eigen庫(kù)實(shí)現(xiàn)最小二乘擬合的示例代碼的文章就介紹到這了,更多相關(guān)C++ Eigen內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++lambda表達(dá)式使用介紹

    C++lambda表達(dá)式使用介紹

    Lambda 表達(dá)式(lambda expression)是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名。本文就來(lái)為大家詳細(xì)講講C++中Lambda表達(dá)式的使用,需要的可以參考一下
    2022-08-08
  • C++實(shí)現(xiàn)學(xué)生考勤信息管理系統(tǒng)

    C++實(shí)現(xiàn)學(xué)生考勤信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生考勤信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • QT5中使用QRegularExpression代替QRegExp方法代碼

    QT5中使用QRegularExpression代替QRegExp方法代碼

    這篇文章主要給大家介紹了關(guān)于QT5中使用QRegularExpression代替QRegExp的相關(guān)資料,正則表達(dá)式(regep)是處理字符串和文本的強(qiáng)大工具,驗(yàn)證regexp可以測(cè)試子字符串是否滿(mǎn)足某些條件,例如是整數(shù)或不包含空格,需要的朋友可以參考下
    2024-04-04
  • c++只保留float型的小數(shù)點(diǎn)后兩位問(wèn)題

    c++只保留float型的小數(shù)點(diǎn)后兩位問(wèn)題

    這篇文章主要介紹了c++只保留float型的小數(shù)點(diǎn)后兩位問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言 指針變量作為函數(shù)參數(shù)詳解

    C語(yǔ)言 指針變量作為函數(shù)參數(shù)詳解

    本文主要介紹C語(yǔ)言 指針變量作為函數(shù)參數(shù),這里整理了相關(guān)資料和示例代碼,以便大家學(xué)習(xí)參考理解知識(shí)點(diǎn),有需要的小伙伴可以參考下
    2016-08-08
  • C語(yǔ)言中結(jié)構(gòu)體(struct)的幾種初始化方法

    C語(yǔ)言中結(jié)構(gòu)體(struct)的幾種初始化方法

    相信大家都知道struct結(jié)構(gòu)體是C語(yǔ)言中非常重要的復(fù)合類(lèi)型,初始化的方法很多,那么小編下面對(duì)這些方法進(jìn)行總結(jié),便于自己和大家以后查閱,有需要的可以參考借鑒。
    2016-08-08
  • 淺談C++不同繼承之間的關(guān)系

    淺談C++不同繼承之間的關(guān)系

    本文主要介紹了淺談C++不同繼承之間的關(guān)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 基于c的for循環(huán)中改變變量值的問(wèn)題

    基于c的for循環(huán)中改變變量值的問(wèn)題

    本篇文章是對(duì)c語(yǔ)言的for循環(huán)中改變變量值的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++對(duì)象的動(dòng)態(tài)建立與釋放詳解

    C++對(duì)象的動(dòng)態(tài)建立與釋放詳解

    我們知道可以用new運(yùn)算符可以動(dòng)態(tài)的分配內(nèi)存,用delete運(yùn)算符可以釋放這些內(nèi)存。當(dāng)我們使用new運(yùn)算符動(dòng)態(tài)的分配一個(gè)內(nèi)存之后,會(huì)自動(dòng)返回一個(gè)該內(nèi)存段的起始地址,也就是指針。
    2013-10-10
  • C語(yǔ)言實(shí)現(xiàn)隊(duì)列的示例詳解

    C語(yǔ)言實(shí)現(xiàn)隊(duì)列的示例詳解

    隊(duì)列是一種特殊的線(xiàn)性表,特殊之處在于它只允許在表的前端(head)進(jìn)行刪除操作,而在表的后端(tail)進(jìn)行插入操作。本文將用C語(yǔ)言實(shí)現(xiàn)隊(duì)列,感興趣的可以了解一下
    2022-06-06

最新評(píng)論