最小二乘法采用C语言Word下载.doc

上传人:wj 文档编号:4641198 上传时间:2023-05-03 格式:DOC 页数:6 大小:113.50KB
下载 相关 举报
最小二乘法采用C语言Word下载.doc_第1页
第1页 / 共6页
最小二乘法采用C语言Word下载.doc_第2页
第2页 / 共6页
最小二乘法采用C语言Word下载.doc_第3页
第3页 / 共6页
最小二乘法采用C语言Word下载.doc_第4页
第4页 / 共6页
最小二乘法采用C语言Word下载.doc_第5页
第5页 / 共6页
最小二乘法采用C语言Word下载.doc_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

最小二乘法采用C语言Word下载.doc

《最小二乘法采用C语言Word下载.doc》由会员分享,可在线阅读,更多相关《最小二乘法采用C语言Word下载.doc(6页珍藏版)》请在冰点文库上搜索。

最小二乘法采用C语言Word下载.doc

根据一组给定的实验数据,求出自变量x与因变量y的函数关系,只要求在给定点上的误差的平方和最小.当时,即

(4.4.1)

这里是线性无关的函数族,假定在上给出一组数据,以及对应的一组权,这里为权系数,要求使最小,其中 (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)得到的即为所求的最小二乘解.它的平方误差为

(4.4.7)

均方误差为

  在最小二乘逼近中,若取,则,表示为

  (4.4.8)

此时关于系数的法方程(4.4.5)是病态方程,通常当n≥3时都不直接取作为基。

 

程序流程图:

开始

输入已知点个数n

输入已知点的X坐标

输入已知点的Y坐标

输出结果

程序:

#include<

math.h>

stdio.h>

stdlib.h>

#include<

malloc.h>

floataverage(intn,float*x)

{inti;

floatav;

av=0;

for(i=0;

i<

n;

i++)

av+=*(x+i);

av=av/n;

return(av);

}

//平方和

floatspfh(intn,float*x)

floata,b;

a=0;

a+=(*(x+i))*(*(x+i));

return(a);

//和平方

floatshpf(intn,float*x)

a=a+*(x+i);

b=a*a/n;

return(b);

//两数先相乘,再相加

floatdcj(intn,float*x,float*y)

floata;

a+=(*(x+i))*(*(y+i));

//两数先相加,再相乘

floatdjc(intn,float*x,float*y)

floata=0,b=0;

{a=a+*(x+i);

b=b+*(y+i);

a=a*b/n;

//系数a

floatxsa(intn,float*x,float*y)

{floata,b,c,d,e;

a=spfh(n,x);

b=shpf(n,x);

c=dcj(n,x,y);

d=djc(n,x,y);

e=(c-d)/(a-b);

//printf("

%f%f%f%f"

a,b,c,d);

return(e);

floathe(intn,float*y)

a=a+*(y+i);

floatxsb(intn,float*x,float*y,floata)

{floatb,c,d;

b=he(n,y);

c=he(n,x);

d=(b-a*c)/n;

return(d);

voidmain()

{intn,i;

float*x,*y,a,b;

printf("

请输入将要输入的有效数值组数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)

请输入x的值\n"

i++)scanf("

%f"

x+i);

请输入y的值,请注意与x的值一一对应:

\n"

y+i);

{printf("

x[%d]=%3.2f"

i,*(x+i));

y[%d]=%3.2f\n"

i,*(y+i));

a=xsa(n,x,y);

b=xsb(n,x,y,a);

经最小二乘法拟合得到的一元线性方程为:

f(x)=%3.2fx+%3.2f\n"

a,b);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2