欢迎来到天天文库
浏览记录
ID:51306384
大小:113.50 KB
页数:6页
时间:2020-03-21
《最小二乘法采用C语言.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、最小二乘法C语言1.实验目的:进一步熟悉曲线拟合的最小二乘法。掌握编程语言字符处理程序的设计和调试技术。2.实验要求:输入:已知点的数目以及各点坐标。输出:根据最小二乘法原理以及各点坐标求出拟合曲线。3.程序流程:(1)输入已知点的个数;(2)分别输入已知点的X坐标;(3)分别输入已知点的Y坐标;(4)通过调用函数,求出拟合曲线。最小二乘法原理如下:根据一组给定的实验数据,求出自变量x与因变量y的函数关系,只要求在给定点上的误差的平方和最小.当时,即(4.4.1)这里是线性无关的函数族,假定在上给出一组数据,以及对应的一组权,这里为
2、权系数,要求使最小,其中 (4.4.2)(4.4.2)中实际上是关于的多元函数,求I的最小值就是求多元函数I的极值,由极值必要条件,可得 (4.4.3)根据内积定义引入相应带权内积记号(4.4.4)则(4.4.3)可改写为 这是关于参数的线性方程组,用矩阵表示为(4.4.5)(4.4.5)称为法方程.当线性无关,且在点集上至多只有n个不同零点,则称在X上满足Haar条件,此时(4.4.5)的解存在唯一。记(4.4.5)的解为从而得到最小二乘拟合曲线(4.4.6)可以证明对,有 故(4.4.6)得到的即为所求的最小二乘解.它的平方
3、误差为(4.4.7)均方误差为 在最小二乘逼近中,若取,则,表示为 (4.4.8)此时关于系数的法方程(4.4.5)是病态方程,通常当n≥3时都不直接取作为基。 程序流程图:开始↓输入已知点个数n输入已知点的X坐标↓输入已知点的Y坐标↓输出结果↓程序:#include#include#include#includefloataverage(intn,float*x){inti;floatav;av=0;for(i=0;i4、av=av/n;return(av);}//平方和floatspfh(intn,float*x){inti;floata,b;a=0;for(i=0;i5、(i=0;i6、-d)/(a-b);//printf("%f%f%f%f",a,b,c,d);return(e);}floathe(intn,float*y){inti;floata;a=0;for(i=0;i7、数值组数n的值:");scanf("%d",&n);x=(float*)calloc(n,sizeof(float));if(x==NULL){printf("内存分配失败");exit(1);}y=(float*)calloc(n,sizeof(float));if(y==NULL){printf("内存分配失败");exit(1);}printf("请输入x的值");for(i=0;i8、scanf("%f",y+i);for(i=0;i
4、av=av/n;return(av);}//平方和floatspfh(intn,float*x){inti;floata,b;a=0;for(i=0;i5、(i=0;i6、-d)/(a-b);//printf("%f%f%f%f",a,b,c,d);return(e);}floathe(intn,float*y){inti;floata;a=0;for(i=0;i7、数值组数n的值:");scanf("%d",&n);x=(float*)calloc(n,sizeof(float));if(x==NULL){printf("内存分配失败");exit(1);}y=(float*)calloc(n,sizeof(float));if(y==NULL){printf("内存分配失败");exit(1);}printf("请输入x的值");for(i=0;i8、scanf("%f",y+i);for(i=0;i
5、(i=0;i6、-d)/(a-b);//printf("%f%f%f%f",a,b,c,d);return(e);}floathe(intn,float*y){inti;floata;a=0;for(i=0;i7、数值组数n的值:");scanf("%d",&n);x=(float*)calloc(n,sizeof(float));if(x==NULL){printf("内存分配失败");exit(1);}y=(float*)calloc(n,sizeof(float));if(y==NULL){printf("内存分配失败");exit(1);}printf("请输入x的值");for(i=0;i8、scanf("%f",y+i);for(i=0;i
6、-d)/(a-b);//printf("%f%f%f%f",a,b,c,d);return(e);}floathe(intn,float*y){inti;floata;a=0;for(i=0;i7、数值组数n的值:");scanf("%d",&n);x=(float*)calloc(n,sizeof(float));if(x==NULL){printf("内存分配失败");exit(1);}y=(float*)calloc(n,sizeof(float));if(y==NULL){printf("内存分配失败");exit(1);}printf("请输入x的值");for(i=0;i8、scanf("%f",y+i);for(i=0;i
7、数值组数n的值:");scanf("%d",&n);x=(float*)calloc(n,sizeof(float));if(x==NULL){printf("内存分配失败");exit(1);}y=(float*)calloc(n,sizeof(float));if(y==NULL){printf("内存分配失败");exit(1);}printf("请输入x的值");for(i=0;i8、scanf("%f",y+i);for(i=0;i
8、scanf("%f",y+i);for(i=0;i
此文档下载收益归作者所有