c语言最小二乘拟合的程序,最小二乘拟合C语言程序.pdf

最小二乘拟合C语言程序.pdf

最小二乘拟合C 语言程序

输入文件zuixiaoercheng_input.txt 中内容:

5 3

-2 -1 0 1 2

-0.1 0.1 0.4 0.9 1.6

代码部分:

#include

#include

#include

#include

#define p(k) (p+(k)*m)

#define pkx(k) (pkx+(k)*n)

double *x,*f,*p,*a,*b,*d,*pkx,*sx,*xishu;

int m,n;

void zhengjiaonihe();

void size(int *m,int *n);

void input(double x[],double f[],int m,int n);

void output(int n,double pkx[],double xishu[],double R);

double NeiJi(double *F,double *G,double *W);

void GetPk(int k);

void GetXiShu(int k);

double Wucha(int k);

void main()

{

zhengjiaonihe();

system("pause");

}

void zhengjiaonihe()

{

int k,i,j;

double t,R;

printf("\n 本程序是用正交函数作最小二乘拟合\n");

size(&m,&n);

x=(double *)malloc(sizeof(double)*m);

f=(double *)malloc(sizeof(double)*m);

p=(double *)malloc(sizeof(double)*m*n);

a=(double *)malloc(sizeof(double)*n);

b=(double *)malloc(sizeof(double)*n);

d=(double *)malloc(sizeof(double)*n);

pkx=(double *)malloc(sizeof(double)*n*n);

sx=(double *)malloc(sizeof(double)*m);

xishu=(double *)malloc(sizeof(double)*n);

input(x,f,m,n);

for (i=0;i

{

for (j=0;j

pkx(i)[j]=0; // pkx 初始化

}

for (k=0;k

{

p(0)[k]=1; // P0(x)=1;

}

pkx(0)[0]=1;

d[0]=NeiJi(f,p(0),p(0))/NeiJi(p(0),p(0),p(0));

GetXiShu(1);

R=Wucha(1);

a[1]=NeiJi(x,p(0),p(0))/NeiJi(p(0),p(0),p(0)); // α1=(xP1,P1)/(P1,P1)

pkx(1)[0]=-a[1];pkx(1)[1]=1;

for (k=0;k

p(1)[k]=x[k]-a[1]; // P1(x)=(x- α1)P0(x) P0(x)=1

d[1]=NeiJi(f,p(1),p(0))/NeiJi(p(1),p(1),p(0));

GetXiShu(2);

R=Wucha(2);

for (k=1;k

{

t=NeiJi(p(k),p(k),p(0));

a[k+1]=NeiJi(p(k),p(k),x)/t; // αk+1=(xPk,Pk)/(Pk,Pk)

b[k]=t/NeiJi(p(k-1),p(k-1),p(0)); // βk=(Pk,Pk)/(Pk-1,Pk-1)

GetPk(k+1); // 计算Pk(x)在各节点的函数值

d[k+1]=NeiJi(f,p(k+1),p(0))/NeiJi(p(k+1),p(k+1),p(0));

// ak=(f,Pk)/(Pk,Pk)

pkx(k+1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值