最小二乘法常用于根据实测数据求线性方程的最近似解。根据如图(图片引用于百度百科)的描述,利用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中是减法,你看看这边是否有问题