?? 最小二乘法.cpp
字號:
#include<stdio.h>
int main ()
{
int n,i,flag2;
char flag1='y';
float ar[50],xe,ye,xye,xxe,sx,sy,sxy,sxx,a,b;
printf ("\n*********************************************************\n");
printf ("\n歡迎使用最小二乘法數據處理程序\n");
printf ("\n作者:趙序庚\n");
printf ("\n*********************************************************\n");
printf ("\n說明:本程序運行結果保留小數點后三位\n");
for (;flag1=='y'||flag1=='Y';)
{printf ("\n請輸入您要處理的數據的組數:");
printf ("\n*****提示:本程序定義一對x,y值為一組數據:");
scanf ("%d",&n);
if (n>50) {printf ("\\n對不起,本程序暫時無法處理50組以上的數據");
continue;
}
printf ("\n請選擇您的數據的處理方式:");
printf ("\n\t1.y與x為一次線性關系");
printf ("\n\t2.y與x的2次為線性關系\n");
scanf ("%d",&flag2);
if (flag2>2||flag2<1) {printf ("\n對不起,您的輸入不正確\n");continue;}
for (i=0;i<n;i++)
{printf ("\n請輸入第%2d個x的值\tx%2d=",i+1,i+1);
scanf ("%f",&ar[0]);
printf ("\n請輸入對應的y的值:\ty%2d=",i+1);
scanf ("%f",&ar[1]);
}
if (flag2!=1)
{for (i=0;i<n;i++)
ar[1]=ar[1]/(ar[0]*ar[0]);
}
sx=sy=sxx=sxy=0;
for (i=0;i<n;i++)
{sx=sx+ar[0];
sy=sy+ar[1];
sxx=sxx+ar[0]*ar[0];
sxy=sxy+ar[0]*ar[1];
}
xe=sx/n;
ye=sy/n;
xye=sxy/n;
xxe=sxx/n;
b=(xye-xe*ye)/(xxe-xe*xe);
a=ye-b*xe;
printf ("\n對您輸入的數據的處理已經完成,結果如下:");
printf ("\n\ta=%f\n\tb=%f\n",a,b);
printf ("\nb即為擬合直線的斜率,a為截距\n");
printf ("\n*********************************************************\n");
printf ("\n是否繼續使用本程序處理數據?(y/n)?");
scanf (" %c",&flag1);
if (flag1=='y'||flag1=='Y') continue;
else if (flag1=='n'||flag1=='N') break;
else {printf ("\n***操作非法,本程序將關閉***\n");
return 0;
}
printf ("\n*********************************************\n\n");
}
printf ("\n謝謝您的使用\n歡迎提出寶貴意見\nEmail:zxg@tengzhou.gov.cn\n");
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -