数据拟合: 直线拟合--多项式拟合
数据拟合: 直线拟合--多项式拟合
1.问题概述
在实际问题中,常常需要从一组观察数据
2.理论与方法
• 使残差的最大绝对值为最小,即
• 使残差的绝对值之和为最小,即
• 使残差的平方和为最小,即
分析以上三种准则,前两种提法比较自然,但由于含有绝对值运算,不便于实际应用;基于第三种准则来选取拟合曲线的方法则称作曲线拟合的最小二乘法。
3.算法与设计
1) 直线拟合
即成立
式中,求和表示关于下标i从1到N求和。
使总误差
为最小。由于Q可以视作关于aj(j = 0,1,...,m)的多元函数,故上述拟合多项式的构造问题可归结为多元函数的极值问题。
即得到关于系数aj的线性方程组通常称作正则方程组。
4.案例分析
Example:
Data set1
Memory Capacity in GBytes |
Price in US dollars |
2 |
9.99 |
4 |
10.99 |
8 |
19.99 |
16 |
29.99 |
1 What's therelationship between memory capacity and cost? Pleas fitting a linear and higher polynomial function model to the data.
由实验结果可以得出在多项式拟合曲线的过程中,不一定是次数越高,结果越准确,结合实际问题与残差值得衡量,可以找到对于具体问题几阶的拟合效果更好。
根据函数图像可以得出表格:
二阶:
Memory Capacity in GBytes |
Price in US dollars |
2 |
9.54 |
4 |
12.52 |
8 |
18.49 |
16 |
30.42 |
三阶:
Memory Capacity in GBytes |
Price in US dollars |
2 |
9.06 |
4 |
12.61 |
8 |
19.17 |
16 |
30.1 |
四阶:
Memory Capacity in GBytes |
Price in US dollars |
2 |
9.99 |
4 |
11 |
8 |
19.98 |
16 |
30 |
通过与原表格的数据进行分析:
不难看出四阶的函数表达式最接近原题。
即:y=13.0376+-2.75*x+0.666667*x^2+-0.0267857*x^3
5.代码
void _2()
{//一阶double mat[105][2];double b[105];ifstream ifile;ifile.open("e:\\sat.txt");for (int i = 0; i < 105; i++){mat[i][0] = 1;ifile >> mat[i][1];// cout << mat[i][0] << " " << mat[i][1] << endl;}for (int i = 0; i < 105; i++){ifile >> b[i];// cout << b[i] << endl;}ifile.close();
/*double t = 0, t2 = 0, bi = 0, tb = 0;for (int i = 0; i < 105; i++){bi += b[i];for (int j = 0; j < 2; j++){if (j == 1){t += mat[i][j];t2 += mat[i][j] * mat[i][j];tb += mat[i][j] * b[i];}}}double x1 = (t2*bi - tb*t) / (105 * t2 - t*t);double x2 = (105 * tb - t*bi) / (105 * t2 - t*t);//cout << x1 << " " << x2 << endl;cout << "拟合方程(关于high_gpa):";cout << endl << "y = " << x1 << " + " << x2 << "x" << endl;//一阶
*///4阶double mat21[105][5];ifstream file;file.open("e:\\sat.txt");for (int i = 0; i < 105; i++){mat21[i][0] = 1;file >> mat21[i][1];// cout << mat[i][0] << " " << mat[i][1] << endl;}for (int i = 0; i < 105; i++) file >> mat21[i][2];for (int i = 0; i < 105; i++) file >> mat21[i][3];for (int i = 0; i < 105; i++) file >> mat21[i][4];for (int i = 0; i < 105; i++){file >> b[i];// cout << b[i] << endl;}file.close();double mat22[5][105];memset(mat22, 0, sizeof(mat22));for (int i = 0; i < 5; i++){for (int j = 0; j < 105; j++){mat22[i][j] = mat21[j][i];}}double bb2[5][5];memset(bb2, 0, sizeof(bb2));for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){for (int k = 0; k < 105; k++){bb2[i][j] += mat22[i][k] * mat21[k][j];}}}double yy2[5];memset(yy2, 0, sizeof(yy2));for (int i = 0; i < 5; i++){for (int k = 0; k < 105; k++){yy2[i] += mat22[i][k] * b[k];}}double x21[5], x22[5];memset(x21, 0, sizeof(x21));memset(x22, 0, sizeof(x22));double temp;for (int k = 0; k < 5; k++){for (int i = k + 1; i < 5; i++){temp = bb2[i][k] /bb2[k][k];for (int j = k + 1; j < 5; j++){bb2[i][j] -= temp*bb2[k][j];}yy2[i] -= temp*yy2[k];}}for (int i = 4; i >= 0; i--){x21[i] = b[i];for (int j = 4; j >= 0; j--){if (i != j){x21[i] -= bb2[i][j] * x21[j];}}x21[i] /= bb2[i][i];}cout << endl;cout << "拟合方程(关于high_gpa,math_sat,verb_sat,comp_gpa):";cout << endl << "y = " << x21[0] << " + " << x21[1] << "*high_gpa" << " + " << x21[2] << "math_sat" << " + " << x21[3] << "verb_sat" << " + " << x21[4] << "comp_gpa"<<endl;return;
}
End
数据拟合: 直线拟合--多项式拟合相关推荐
- 多项式拟合缺点_多项式拟合
在网上看别人的心得 一 最小二乘法的基本原理 从整体上考虑近似函数同所给数据点(i=0,1,-,m)误差(i=0,1,-,m)的大小,常用的方法有以下三种:一是误差(i=0,1,-,m)绝对值的最 ...
- 多项式拟合 java_最小二乘法多项式拟合的Java实现
背景由于项目中需要根据磁盘的历史使用情况预测未来一段时间的使用情况,决定采用最小二乘法做多项式拟合,这里简单描述下: 假设给定的数据点和其对应的函数值为 (x1, y1), (x2, y2), ... ...
- python多项式拟合_最小二乘法—多项式拟合非线性函数
本章涉及到的知识点清单: 1.函数的近似表示-高次多项式 2.误差函数-最小二乘法 3.引出案例函数曲线 4.目标函数 5.优化目标函数 6.优化目标函数-梯度下降法 7.优化目标函数-求解线性方程组 ...
- python 拟合直线_python matplotlib拟合直线的实现
这篇文章主要介绍了python matplotlib拟合直线的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 import numpy ...
- matlab 高阶拟合,matlab – 将多项式拟合到函数的最大值
我想将多项式拟合到噪声数据,使得近似多项式总是> =原始数据.例如: x = linspace (-2, 6); y = (x-2).^2 + 1 + 2 * randn (size (x)); ...
- excel 多项式拟合数据
有如下一组数据和其对应的曲线波形,如何快速得到其数据函数表达式? x y 996 1250 1988 2250 3000 3550 4000 4900 要得到原始的函数表达式是比较难的,不过我们可以用 ...
- 数值计算之 拟合法,线性拟合,多项式拟合
数值计算之 拟合法之线性拟合,多项式拟合 前言 最小二乘法 多项式拟合 线性拟合 后记 前言 拟合法是另一种由采样数据求取潜在函数的方法.插值要求函数必须经过每一个采样节点,而拟合则要求函数与全部节点 ...
- Matlab进行多项式拟合
觉得有用的先点赞后收藏,不要只收藏不点赞!! 1⃣️一个坐标系里面绘制多个函数图像 clear clc x = [0 10 20 30 40 50 60 70 80 90 100 110 120]; ...
- 数学建模 拟合(最小二乘拟合,多项式拟合,自定义函数拟合)
文章目录 matlab拟合工具箱 最小二乘拟合 理论推导 用最小二乘法求解线性回归的k,b 怎么评价拟合的精度 一个例子 另一个例子,薄膜渗透率题目,最小二乘拟合溶液浓度变化 多项式拟合 自定义函数拟 ...
- 【Halcon视觉】图像拟合直线
在机器视觉领域,常见的应用场景是工业.如:手机制造,汽车制造,等等.在这些零部件生产加工时,需要对工件进行定位.通过工件的边缘,拟合直线,可实现获取工件的坐标位置. XLD分割:在获取亚像素轮廓后,需 ...
最新文章
- ios 支付宝支付集成
- HP QC IE11不支持( win7 64位 无法安装)解决方法
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符
- java--面向对象(4)--黑马程序员
- QT的QTimer类的使用
- 向量程序C语言,一个有关向量与矩阵的实用计算器程序
- 克服浮躁_建立强大的全球社区时克服挑战
- VM安装CentOs7虚拟机后无法上网之解决方法
- 苹果最新专利曝光:苹果可能正研发可折叠iPhone
- 什么是内容电商?核心是“内容”
- 推荐系统-Task01熟悉新闻推荐系统基本流程
- KVM虚拟化崛起:你选Ubuntu还是Red Hat?
- 简述人工智能的发展历程图_人工智能发展简史
- python数据分析库pandas官方教程
- 凡诺CMS 未授权访问+文件包含Getshell
- java获取系统dpi_Java DPI介绍
- redhat7图形界面网卡设置_初学Linux之配置网卡的四种方法
- 计算机科学与技术专业考研方向
- 单阶段目标检测重要论文总结
- 商丘工学院c语言试卷,商丘工学院New Radio82期:青春
热门文章
- 加速人生来帮忙,系统顺畅又洁净!
- Arduino与Proteus仿真实例-Nokia5110显示屏驱动仿真
- 基于javaweb+springboot的物流快递在线寄查快递系统(java+SpringBoot+FreeMarker+Mysql)
- 赞!整理了60 种常用可视化图表
- 常见的Linux的发行版本
- 安装屏保软件(Linux终端演示 “黑客帝国” 字母雨界面)和Linux修改管理员密码
- 解决设备管理器,控制面板中管理工具无法打开的问题
- 域名,主机名,网站名,URL
- 一文搞定vim,从安装到入门到精通,助你成功入门vim
- casio计算机有没有存储功能,哪些卡西欧计算器是不带储存功能?