最小二乘法难题
来源:百度知道 编辑:UC知道 时间:2024/07/02 15:23:45
X 1 2 3 4 5 6 7 8 9
Y 0.898 2.38 3.07 1.84 2.02 1.94 2.22 2.77 4.02
X 10 11 12 13 14 15 16 17 18 19
Y 4.76 5.46 6.53 10.9 16.5 22.5 35.7 50.6 61.6 81.8
小弟感激不尽啊!(用C语言编写)
参考答案:如果在乎的没有那么多,想要的没有那么多,生活便会简单得很多。
#include<stdio.h>
#include<math.h>
int main(void)
{
double a,b,e,m,f,f1,f2,g,g1,g2,c,d;
double x[19],y[19];
int i,j;
for(i=0;i<19;i++)
x[i]=i+1;
for(i=0;i<19;i++){
scanf("%lf",&y[i]);
}
scanf("%lf",&a);
scanf("%lf",&b);
f=f1=f2=g=g1=g2=0;
for(j=0;j<10;j++){
for(i=0;i<19;i++){
f=f+2*(a*exp((i+1)*b)-y[i])*exp((i+1)*b);
f1=f1+2*exp(2*(i+1)*b);
f2=f2+4*(i+1)*a*exp(2*(i+1)*b)-2*(i+1)*y[i]*exp((i+1)*b);
g=g+2*(a*exp((i+1)*b)-y[i])*(i+1)*a*exp((i+1)*b);
g1=g1+4*(i+1)*a*exp(2*(i+1)*b)-2*(i+1)*y[i]*exp((i+1)*b);
g2=g2+4*pow((i+1)*a,2)*exp(2*(i+1)*b)-2*pow((i+1),2)*a*y[i]*exp((i+1)*b);
}
c=f1*a+f2*b-f;
d=g1*a+g2*b-g;
b=(d-c*(g1/f1))/(g2-f2*(g1/f1));
a=(c-f2*b)/f1;
e=0;
m=0;
for(i=0;i<19;i++)
e=e+pow((a*exp(