- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数值计算方法
实际应用(论文)
题目 最小二乘法原理实际生活应用
学院 信息工程学院
专业 软件工程
姓名 张同
班级 13级2班
学号 1402130235
摘要
最小二乘法(又称最小平方法)是一种数学优化技术,是利用最小化误差的平方和寻找数据的最佳函数匹配的一种计算方法[1],目前在测量学、城市道路规划、物理学、地质勘探学、概率论、统计学等领域有着广泛的应用。本文对最小二乘法进行了深入细致的研究,利用Visual C++编制程序实现最小二乘法的界面化设计,通过实验数据的输入,实现线性和二次拟合曲线的输出,并利用设计的程序实现了一些实际问题的求解和处理。
朗读
显示对应的拉丁字符的拼音
?
字典
关键词:最小二乘法 曲线拟合 Visual C++
最小二乘法在实际生活中的应用
一.实际问题描述:
早在19世纪后期,英国生物学家Galton在研究父母身高与子女身高关系时,观察了1078个家庭中父亲、母亲身高的平均值x和其中一个成年儿子身高y,建立了x与y之间的线性关系。
二.提出问题:
通过父母平均身高推算出成年儿子身高
三.分析问题:
平时我们在实验过程中会遇到两量如果存在的线性关系时,其中为线性函数的参数。当实验数据存在这种线性关系时,通常我们运用作图法对其参数进行处理运算、进而求出实验结果。但是作图法很难得到好的结果,而运用最小二乘法可以得到比较好的线性拟合[19]。对其两种方法比较可以最小二乘法的数据处理方法是比较理想的办法。
四.实验原理:
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
最小二乘法拟合:对给定数据点{(Xi,Yi)}(i=0,1,…,m),在取定的函数类Φ 中,求p(x)∈Φ ,使误差的平方和E^2最小,E^2=∑[p(Xi)-Yi]^2。从几何意义上讲,就是寻求与给定点 {(Xi,Yi)}(i=0,1,…,m)的距离平方和为最小的曲线y=p(x)。函数p(x)称为拟合函数或最小二乘解,求拟合函数p(x)的方法称为曲线拟合的最小二乘法。
五.解决方案:
运用数值计算方法中的最小二乘法处理数据,计算出a与b,得到y=a+bx关系式。
1.根据实验数据列以下表格:
表1 实验数据收集
父母平均身高x(cm) 155 160 165 170 175 180 成年儿子身高y(cm) 158 164 168 175 178 188
主要
#includestdio.h
#includemath.h
void main() {
int i;
float a[2];
float x[6] = {155,160,165,170,175,180};
float y[6] = {158,164,168,175,178,188};
void Approx(float[],float[],int,int,float[]);
Approx(x,y,6,1,a);
for(i=0;i=1;i++)
printf(a[%d]=%f\n,i,a[i]);
}
void Approx(float x[],float y[],int m,int n,float a[]) {
int i,j,t;
float *c=new float[(n+1)*(n+2)];
float power(int,float);
void ColPivot(float *,int,float[]);
for(i=0;i=n;i++) {
for(j=0;j=n;j++) {
*(c+i*(n+2)+j)=0;
for(t=0;tm-1;t++)
*(c+i*(n+2)*j)+=power(i+j,x[t]);
}
*(c+i*(n+2)+n+1)=0;
for(j=0;jm-1;j++)
*(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);
}
ColPivot(c,n+1,a);
delete c;
}
void ColP
原创力文档


文档评论(0)