纯C++做多项式拟合

一、多项式拟合用途

当前有一组对应的x、y数据,希望通过这些数据点做出近似的多项式曲线:Y=···+nX^2+mX+c
其中多项式最高次数可调,返回各个参数及曲线的拟合度R^2

二、函数实现

参数中的order为设置的多项式最高次次数,coefficients为各次的系数

double polynomialFit(vector<double>& x, vector<double>& y, unsigned char order, vector<double>& coefficients){if (x.size() <= order || y.size() <= order) {return 0;}// 构建矩阵A和向量bint m = x.size();int n = order + 1;vector<vector<double>> A(n, vector<double>(n, 0));vector<double> b(n, 0);for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {for (int k = 0; k < m; k++) {A[i][j] += pow(x[k], i+j);}}for (int k = 0; k < m; k++) {b[i] += y[k] * pow(x[k], i);}}n = A.size();for (int i = 0; i < n; i++) {// 列主元素消去int maxRow = i;double maxVal = fabs(A[i][i]);for (int k = i + 1; k < n; k++) {if (fabs(A[k][i]) > maxVal) {maxVal = fabs(A[k][i]);maxRow = k;}}if (maxRow != i) {std::swap(A[i], A[maxRow]);std::swap(b[i], b[maxRow]);}// 消元过程for (int k = i + 1; k < n; k++) {double factor = A[k][i] / A[i][i];for (int j = i; j < n; j++) {A[k][j] -= factor * A[i][j];}b[k] -= factor * b[i];}}// 回代求解vector<double> result(n, 0);for (int i = n - 1; i >= 0; i--) {double temp = b[i];for (int j = i + 1; j < n; j++) {temp -= A[i][j] * result[j];}result[i] = temp / A[i][i];}coefficients = result;double SSR=0;double SST=0;double sumY = std::accumulate(std::begin(y),std::end(y),0.0);double avgY = sumY/y.size();for(uint16_t i=0;i<y.size();i++){double actY=0;for(unsigned char j=0;j<=order;j++){actY+=pow(x[i],j)*result[j];}SSR += pow(actY-y[i],2);SST += pow(y[i]-avgY,2);}double R = 1-SSR/SST;return R;
}

三、函数调用

vector<double> xs{0,0,0,0};
vector<double> selectX;
vector<double> selectY;
selectX.push_back(..);
...
selectY.push_back(..);
...
double R = polynomialFit(selectX,selectY,3,xs);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

源码编译安装LNMP

1、LNMP 包含&#xff1a;linux、Nginx、Mysql、php LNMP的工作原理 由客户端发送页面请求给Nginx&#xff0c;Nginx会根据location匹配用户访问请求的URL路径判断是静态还是动态&#xff0c;静态的一般是以 .html .htm .css .shtml结尾&#xff0c;动态的一般是以 .php .jsp…

17.js字符串

字符串创建 1.字面量创建 var 字符串名字符串 2.内部构造函数创建 var 字符串名new String(字符串) length属性 只能读取不能设置 var strabcdfegfglconsole.log(str.length) //10str.length5 console.log(str) //不能写 abcdfegfgl index属性 只能读不能设置 var strab…

水位监测站的工作原理

TH-SW2在雨季&#xff0c;河道和湖泊的水文信息监测对于防洪减灾、水资源管理和环境保护等方面具有至关重要的意义。水文监测站作为实现这一目标的基础设施&#xff0c;发挥着关键作用。水文监测站是观测及搜集河流、湖泊、水库等水体的水文、气象资料的基层水文机构。在雨季&a…

C++基础项目 通讯录管理系统

尝试找实习面试,结果发现自己的学习还有很多不足,没有了解c11/14很多新特性的使用以及学习,因此打算重新过一遍基础.通讯录管理系统是c的基础入门,主要运用了结构体,数组,函数以及指针等东西.下面详细的说明整个设计工程. 需求分析 * 联系人上限为1000人&#xff0c;联系人信息…

harbor -- docker私有仓库安装配置

1 安装docker-compose $ curl -L "https://get.daocloud.io/docker/compose/releases/download/v1.25.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ chmod x /usr/local/bin/docker-compose 2 安装配置harbor $ wget https://g…

代码随想录算法训练营第36天 | 738.单调递增的数字

代码随想录算法训练营第36天 | 738.单调递增的数字 自己看到题目的第一想法看完代码随想录之后的想法自己实现过程中遇到哪些困难 ) 链接: 738.单调递增的数字 自己看到题目的第一想法 738.单调递增的数字&#xff1a;先判断本身是否单调递增&#xff0c;如果是就直接返回该…

Android NDK系列(五)内存监控

在日常的开发中&#xff0c;内存泄漏是一种比较比较棘手的问题&#xff0c;这是由于其具有隐蔽性&#xff0c;即使发生了泄漏&#xff0c;很难检测到并且不好定位到哪里导致的泄漏。如果程序在运行的过程中不断出现内存泄漏&#xff0c;那么越来越多的内存得不到释放&#xff0…

centos时间不对

检查当前时区是否正确 timedatectl status如果时区不正确&#xff0c;使用以下命令设置正确的时区&#xff08;将Asia/Shanghai替换为您所在的时区&#xff09;&#xff1a; timedatectl set-timezone Asia/Shanghai如果时区正确但时间不准确&#xff0c;使用以下命令同步网络…

Java基础语法——字符串(String/StringBuilder/Stringjoiner)

String Java的String类是不可变的&#xff0c;意味着一旦创建&#xff0c;其值就不能被改变。String类提供了丰富的API来操作字符串。 以下是一些常用的方法&#xff1a; 构造方法&#xff1a; 有以下几种常见的&#xff1a; public class stringlearn {public static void…

AI 赋能前端 -- 文本内容概要生成

幸福不在于你获得了什么,而在于你比他人多获得了什么 是比较出来的 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder 此篇文章所涉及到的技术有 OpenAILangChainRust/WebAssemblyWeb Workerreact+ts+vite配置环境变量(env)因为,行文字数所限,有些概…

渗透课程第二阶段--Part1--信息收集

目录 一. 为什么要做信息收集&#xff1f; 渗透测试的流程 信息收集包括的内容 学习框架&#xff1a; 二. 分类 1. 域名相关信息 域名&#xff08;Domain Name&#xff09;是什么 域名的分类 域名联系人信息 子域名信息 域名DNS信息 2. IP相关信息 ping/nslookup …

香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(一)

整期笔记索引 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试&#xff08;一&#xff09; 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试&#xff08;二&#xff09; 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试&#xff0…

使用element的提示框并修改css

使用el-tooltip来做提示框&#xff1a; <el-tooltip popper-class"popper" content"敬请期待" placement"right"><div><i class"iconfont icon-lianjie-01"></i><span>输入链接</span></div&…

和鲸“101数智领航计划”——在武大解码 GeoAI,地理空间智能(GeoAI)学术研讨会及编程工作坊圆满落幕

AI 正革新地理空间数据分析的范式&#xff0c;既为科学研究及行业落地应用带来了机遇&#xff0c;同样也带来了挑战。 5 月 25 日&#xff0c;和鲸科技联合武汉大学遥感信息工程学院、中国地质大学&#xff08;武汉&#xff09;地理与信息工程学院&#xff0c;于武汉大学成功举…

element.addEventListener() 方法 详细解析与代码示例

element.addEventListener() 方法用于向指定的元素添加事件监听器。 语法: element.addEventListener(event, function, useCapture);参数说明: event&#xff1a;表示要监听的事件类型&#xff0c;比如 "click"、"mouseover"、"keydown" 等等…

使用mongorestore时no reachable servers错误的解决

使用mongorestore命令恢复导出的.bson文件至mongodb时&#xff0c;比如 mongorestore -d mydb -c mycollection mycollection.bson可能会遇到遇到类似下面的错误 Failed: error connecting to db server: no reachable servers而此时mongosh&#xff0c;或者mongo命令本身是可…

关于TeamSpeak3-网易音乐机器人的基础使用方法(胎教级教程)

本文转自博主的个人博客&#xff1a;https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接&#xff1a;点我访问 序言&#xff1a;在自己的ts服务器上安装了网易音乐机器人&#xff0c;写这篇文章旨在教群友/网友如何使用机器人!&#x1f60b;&#x1f44d; 一、TS3Audi…

Flutter 中的 SliverOverlapInjector 小部件:全面指南

Flutter 中的 SliverOverlapInjector 小部件&#xff1a;全面指南 Flutter 是一个功能丰富的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的滚动视图系统中&#xff0c;SliverOverlapInjector 是一…

Nginx平滑升级

目录 编译安装nginx1.18 平滑升级至1.22版本 本文记录了编译安装的nginx1.18平滑升级到nginx1.22版本的流程&#xff0c;都采用的编译安装&#xff0c;有不清楚流程的可以评论区我&#xff0c;咱们一起讨论。 编译安装nginx1.18 # 安装编译依赖 yum -y install gcc pcre pc…

揭秘Python:下划线的特殊用法,你绝对想不到!

在Python编程中&#xff0c;下划线&#xff08;underscore&#xff09;是一个常见而又强大的工具。它不仅仅是一个普通的字符&#xff0c;而是具有特殊含义和用法的符号。今天&#xff0c;我们就来揭开Python下划线的神秘面纱&#xff0c;探索它的各种妙用。 下划线的基本用法…