怎么用C语言实现最小二乘法?

Python013

怎么用C语言实现最小二乘法?,第1张

  最小二乘法常用于根据实测数据求线性方程的最近似解。根据如图(图片引用于百度百科)的描述,利用C语言求,使用最小二乘法算法求线性方程的解,程序如下:

#include <stdio.h>

#define N 4  //共有4个记录,根据需要增加记录

typedef struct Data{ //定义实验记录结构 

int w //实验次数 

double x  

double y

}DATA

//根据d中的n个DATA记录,计算出线性方程的a,b两值

void getcs(DATA *d,int n,double &a,double &b){

double fi11=0,fi12=0,fi21=0,fi22=0,f1=0,f2=0

int i

for(i=0i<ni++){

fi11+=d[i].w

fi12+=d[i].w*d[i].x

fi21=fi12

fi22+=d[i].w*d[i].x*d[i].x

f1+=d[i].w*d[i].y

f2+=d[i].w*d[i].x*d[i].y

}

//解一元一次方程

b=(f2*fi11/fi21-f1)/(fi22*fi11/fi21-fi12)

a=(f2*fi12/fi22-f1)/(fi21*fi12/fi22-fi11)

}

int main(){

DATA d[N]={  //定义时赋初值,共4个记录

{2,0.1,1.1},

{1,0.2,1.9},

{1,0.3,3.1},

{1,0.4,3.9}

}

double a,b

getcs(d,N,a,b)  //计算线性方程参数a,b

printf("线性方程是:Y=%.4lf+%.4lfX\n",a,b)

}

a=(10.0*sumxy-sumx*sumy)/(10.0*sum-sumx*sumx)/*带入a=(NΣxy-ΣxΣy)/(NΣx^2(Σx)^2)

NΣx^2(Σx)^2 这边中间到底有没有减号?你注释里面没有减号,但是代码10.0*sum-sumx*sumx中是减法,你看看这边是否有问题