📄 1.cpp
字号:
#include<stdio.h>
#include<math.h>
#define MAX_N 25//维数的空间容量最大值
typedef struct tagPOINT//点的结构(4维空间),其中x,y,w为输入,z为由x,y,w的应变量
{double x;
double y;
double z;
int w;
}POINT;
void main()
{double a,b,q;
static double u11,u12,u21,u22,c1,c2,p;//static 静态型 (继承功能)
int m,i;
POINT points[MAX_N];
printf("\nInput m value:");
scanf("%d",&m);//输入点数m,m为测量次数,如m=5,表示测量5次
if(m>MAX_N)
{printf("The input m is larger than MAX_N,please redefine the MAX_N.\n");
return;
}
if(m<=0)
{printf("please input a number between 1 and %d\n",MAX_N);
return;
}
printf("Now input the (x_i,y_i,w_i),i=1,2…,%d:\n",m);
for(i=0;i<m;i++)
{scanf("%lf%lf%d",&points[i].x,&points[i].y,&points[i].w);//输入点,w为权函数
}
for(i=0;i<m;i++)//列法方程
{u11+=points[i].w;
u12+=points[i].w*points[i].x;
u22+=points[i].w*points[i].x*points[i].x;
c1+=points[i].w*points[i].y;
c2+=points[i].w*points[i].y*points[i].x;
}
u21=u12;
a=(c1*u22-c2*u12)/(u11*u22-u12*u21);//求a,b的解
b=(c1*u21-c2*u11)/(u21*u12-u22*u11);
for(i=0;i<m;i++)
{points[i].z=a+b*points[i].x;
p+=points[i].w*pow((points[i].z-points[i].y),2);
}
q=sqrt(p);
printf("answer:s(x)=%f+%f(x)\n",a,b);//输出线性方程
printf("均方误差:q=%lf\n",q);//输出均方误差
return;
}
/*曲线拟合的最小二乘法,该程序只能用于对一组数据的线性拟合*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -