最小二乘法在实际中的应用
- 格式:docx
- 大小:78.47 KB
- 文档页数:6
1
高等代数小论文
“最小二乘解”的应用
作 者:北京交通大学 思源
二零一四年五月二十九日
摘要
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻2 找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。
本论文探讨了利用最小二乘法在实际生活中和物理中的应用。分别选取两个应用范例,对数据进行描点、利用Excel作图,进行线性拟合,并使用我们编写的C语言程序进行验证,给出问题的解。
关键词:最小二乘法、编程、应用。
一、引例
(一)、最小二乘解在生活中的应用
例:测定刀具磨损速度 :
① 每隔一个小时,测量一次刀具的厚度,得到实验数据如下:
顺序编号 0 1 2 3 4 5 6 7
时间t/h 0 1 2 3 4 5 6 7
刀具厚度y/mm 27.0 26.8 26.5 26.3 26.1 25.7 25.3 24.8
试根据上面的实验数据建立y和t之间的经验公式y=f(t)
②在坐标系中取t为横坐标,y为纵坐标,描出上述各对数据的对应点,如下图所示。
从图中可以看出,这些点的连线大致接近于一直线,于是就可以认为y和t符合
y=at+b的关系。由excel得出该公式为y = -0.3036x + 27.125。 2726.826.526.326.125.725.324.8y = -0.3036x + 27.1252425262728012345678yt3 ③程序运行得出结果
与excel线性拟合得到的结果一致。
V=0.3036mm/h。
(二)、 最小二乘解在物理中的应用
例:迈克尔逊干涉仪测量激光波长:
① 工作原理
迈克尔逊干涉仪是光学干涉仪中最常见的一种,迈克耳逊干涉仪的原理是一束入射光分为两束后各自被对应的平面镜反射回来,这两束光从而能够发生干涉。干涉中两束光的不同光程可以通过调节干涉臂长度以及改变介质的折射率来实现,从而能够形成不同的干涉图样。干涉条纹是等光程差点的轨迹,因此,要分析某种干涉产生的图样,必求出相干光的光程差位置分布的函数。
G2是一面镀上半透半反膜,G1为补偿板,M1、M2为平面反射镜,M1是固定的,M2和精密丝相连,使其可以向前后移动,最小读数为10-4mm,可估计到10-5mm,
M1和M2后各有几个小螺丝可调节其方位。当M2和M1’严格平行时,M2会移动,表现为等倾干涉的圆环形条纹不断从中心“吐出”或向中心“吞进”。两平面镜之间的“空气间隙”距离增大时,中心就会“吐出”一个个条纹;反之则“吞进”。M2和M1’不严格平行时,则表现为等厚干涉条纹,在M2移动时,条纹不断移过视场中某一标记位置,M2平移距离 d 与条纹移动数 N 的关系满足:d=Nλ/2,λ为入射光波长。
② 在实验过程中我们得到如下数据: 4
N(个) 0 50 100 150 200 250
d(mm) 34.74407 34.72795 34.71175 34.69585 34.67992 34.66403
N(个) 300 350 400 450 500 550
d(mm) 34.64825 34.63238 34.61562 34.59982 34.58302 34.56723
由d和λ为线性关系,我们可以选用最小二乘法对以上数据进行处理。
③ 用excel作散点图并拟合曲线所得结果为:
由excel拟合结果知:
λ=2×(0.000321)=6.42×10−4(mm)=642nm
④ 由C语言程序得到结果:
y = -0.000321x + 34.74434.5434.5634.5834.634.6234.6434.6634.6834.734.7234.7434.760100200300400500600迈克尔逊干涉仪d-n图像5
与excel线性拟合所得结果一致。
λ=2×(0.000321)=6.42×10−4(mm)=642nm
二、最小二乘法的程序源代码(C语言)
#include
#include
using namespace std;
#define N 100
int main()
{
double x[N];
double y[N];
int i;
double ax=0,ay=0,axy=0,axx=0,a,b;
printf("请输入数据个数:(n<=100)\n");
int n;
cin>>n;
printf("请输入n个x的值:\n");
for(i=0;i { cin>>x[i]; } printf("请输入n个y的值:\n"); for(i=0;i { cin>>y[i]; } for(i=0;i { 6 ax+=x[i]; ay+=y[i]; axy+=x[i]*y[i]; axx+=x[i]*x[i]; } ax/=n; ay/=n; axy/=n; axx/=n; b=(ax*ay-axy)/(ax*ax-axx); a=ay-b*ax; printf("x平均为:%lf\ny平均为:%lf\nx^2平均为:%lf\nxy平均为:%lf\n",ax,ay,axx,axy); printf("斜率b的值为:%lf\n截距a的值为:%lf\n",b,a); return 0; } 三、参考文献 (一)百度百科——“最小二乘法”及“迈克尔逊干涉仪”词条。 (二)《高等数学》——高等教育出版社