数据拟合
来源:互联网 发布:左淘宝店铺头像 编辑:程序博客网 时间:2024/04/30 12:45
来源于单片机编程的一些想法。主要适用于:(1)将比较复杂的公式简化为多项式的形式(泰勒展开思想),在CPU运算能力比较低时节省运算时间。(2)在已知某些数据点,求解这些点满足的函数,从而计算其他点。
1.从已知点得到函数关系
通俗的来讲,数据拟合就是将收集的数据整合,发现他们的规律,然后用函数来表示。这样的函数可以作下一个数据出现位置的预判。比如采集到一组数据:
输入x
-9.7
-8.5
-6.1
-7.3
6.5
3.5
2.3
-2.8
8.3
5.9
输出y
94.09
72.25
37.21
53.29
42.25
12.25
5.29
7.84
68.89
34.81
通过这些采集的数据规律,假设再给定一个输入,能否推测输出是多少?在未知输入和输出函数关系的情况下是很难预测出来的(这组数据比较简单,可能比较容易看出来之间的关系,但是复杂的就难得看出了)。
将上述数据在平面坐标系中画出来:
Matlab命令:
>>x=[-9.7,-8.5,-6.1,-7.3,6.5,3.5,2.3,-2.8,8.3,5.9];
>> y=[94.09 72.2537.21 53.29 42.25 12.25 5.29 7.84 68.89 34.81];
>>plot(x,y,'.');
使用matlab自带的数据拟合工具。
试着选择线性拟合,采用二阶的试试。得到结果:
y = p1 * x^2 + p2*x + p3 (p1 p2 p3为系数)
Coefficients:
p1 = 1
p2 = 3.3706e-016
p3 = 8.496e-015
Norm of residuals=
3.7472e-014
拟合图像为:
数据点基本上都在函数上,说明这个拟合还是很适合的。
2. 将复杂函数简单化
11年全国大学电子设计竞赛B题自由摆的有个倾角传感器测的角度和执行部件该转动的角度,他们的关系通过三角函数计算得到:
然而,电脑算这个公式当然是没有问题的,但是在单片机里面就存在问题了。也不是说是问题,因为计算式子比较麻烦,所以占用时间比较长。但是这个系统实时性要求特别高。所以将这个式子弄成比较简单的式子(比如二阶的,或者3阶的)是很有意义的。
先把函数图像画出来:
>> th=-pi/4:0.001:pi/4;
>> beta = atan((1-cos(th))./(1.5-sin(th)));
>> plot(th,beta);
>> grid on
打开拟合工具,二阶拟合的结果:
偏差还是有些大的,那就试试三阶:
这个结果已经非常接近了,得到的式子就是:
y = p1*x^3 + p2*x^2 +p3*x + p4
Coefficients:
p1= 0.23114
p2= 0.38838
p3= -0.00010563
p4= -0.003147
Norm of residuals =
0.1019
- 数据拟合
- 数据拟合
- 数据拟合
- 数据拟合
- 数据拟合工具箱笔记
- 关于数据拟合
- 多点数据拟合直线
- newLISP数据拟合
- 最小二乘法实现数据拟合
- Mtalab--数据拟合
- matlab基础 数据拟合
- matlab_数据拟合
- matlab---数据拟合
- matlab_最小二乘法数据拟合
- matlab_最小二乘法数据拟合
- python做数据拟合
- 数据拟合教程
- matlab 数据拟合
- 重载,重写,多态例子
- Linux内核链表
- eclipse修改javaweb项目名
- C++中string类及文件流类(ofstream,ifstream)的基本操作---按行读取文档
- 二叉树的建立
- 数据拟合
- leetcode第一刷_Valid Palindrome
- 内存对齐
- Java中equal和"=="的区别
- 浅谈JDBC和ODBC
- 多重背包练习-计数法-POJ-1276-Cash Machine
- 工作后的编程感悟
- XAML
- 运算参数的详细解释和分析 转