c语言编写最小二乘法线性拟合,用C语言实现的线拟合的最小二乘法.doc

用C语言实现的线拟合的最小二乘法

实验名称:曲线拟合的最小二乘法

实验目的

了解曲线拟合的最小二乘法

实验类型

设计型

实验环境

Windows XP TC

实验内容

相关知识:已知C[a,b]中函数f(x)的一组实验数据(xi,yi)(i=0,1,…,m),其中yi=f(xi)。设是C[a,b]上线性无关函数族。在中找函数f(x) 曲线拟合的最小二乘解,其法方程(组)为:

其中,

k=0,1,…,n

特别是,求函数f(x) 曲线拟合的线性最小二乘解的计算公式为:

数据结构:两个一维数组或一个二维数组

算法设计:(略)

实验用例: 已知函数y=f(x)的一张表:

x0102030405060708090y6867.166.465.664.661.861.060.860.460试验要求:利用曲线拟合的线性最小二乘法求被逼近函数f(x)在点x=55处的近似值,并画出实验数据和直线。

编写代码:

#include

#include

#include

double qiuhe1(double a[10][2],int p)

{

int i;

double y;

y=0;

for(i=0;i<10;i++)

y=y+a[i][p];

return y;

}

double qiuhe2(double a[10][2],int p)

{

int i;

double y=0;

for(i=0;i<10;i++)

y=y+a[i][0]*a[i][p];

return y;

}

double nihe(double a[10][2],double x)

{

double a1,b,y;

a1=(10*qiuhe2(a,1)-qiuhe1(a,0)*qiuhe1(a,1))/(10*qiuhe2(a,0)-qiuhe1(a,0)*qiuhe1(a,0));

b=(qiuhe2(a,0)*qiuhe1(a,1)-qiuhe1(a,0)*qiuhe2(a,1))/(10*qiuhe2(a,0)-qiuhe1(a,0)*qiuhe1(a,0));

y=a1*x+b;

return y;

}

int main()

{

double a[10][2]={0,68,10,67.1,20,66.4,30,65.6,40,64.6,50,61.8,

60,61.0,70,60.8,80,60.4,90,60};

double x,x1,q=1;

char c[12];

int i;

long n;

int arw[6]={515,235,520,240,515,245};

int arw1[6]={315,45,320,40,325,45};

int gdriver=IBM8514;

int gmode=IBM8514HI;

initgraph(&gdriver, &gmode, "c:\\TC20\\BGI");

cleardevice();

printf("input x:\n");

scanf("%lf",&x);

printf("%f\n",nihe(a,x));

n=nihe(a,x)*1000000+1;

c[0]='y';c[1]='=';

c[4]='.';

for(i=10;i>1;i--)

{

if(i!=4)

{

c[i]=n%10+48;

n=n/10;

}

}

c[11]='\0';

x1=x;

setbkcolor(7);

setcolor(14);

setlinestyle(0,0,3);

drawpoly(3,arw);

drawpoly(3,arw1);

line(120,240,520,240);

line(320,40,320,440);

x=0;

setcolor(2);

setlinestyle(0,0,1);

line((0+320),(int)(240-nihe(a,0)*q),(90+320),(int)(240-nihe(a,90)*q));

setcolor(3);

outtextxy(320,30,"Y");

outtextxy(310,245,"O");

outtextxy(525,240,"X");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值