速求“最小二乘法”的“visual c”程序——注意不是要“C++”的

来源:互联网 发布:欧洲哪个国家好玩 知乎 编辑:程序博客网 时间:2024/04/30 06:25
用两个数组来存储Xi和Yi //求a、b的分母 25.4}; double midx; double midy; midx=0; midy=0; ///求平均值 for(int i=0;i<21;++i) { midx+=(X[i]/21.0); midy+=(Y[i]/21.0); } ///求斜率 double lineK; lineK=0; double tempMu; double tempZi; tempMu=0; tempZi=0; for(int v=0;v<21;++v) { tempMu+=((X[v]-midx)*(X[v]-midx)); tempZi+=((X[v]-midx)*(Y[v]-midy)); } if(tempMu==0) { cout <<"fail"; } lineK=tempZi/tempMu; ////求截距 double lineB; lineB=midy-lineK*midx; cout <<"直线方程:"<<endl; cout <<"Y="<<lineK<<"X+"<<lineB; cout <<endl; /求误差 double delta; for(int q=0;q<21;++q) { delta=Y[q]-lineK*X[q]-lineB; cout <<delta <<" "; } 24.87 24.25 23.53 22.71 21.79 20.79 19.69 18.5 17.22 15.86 14.43 12.94 11.4 9.82 8.22 6.6 4.96 3.31 1.66 1.12} ; double Y[21] = {0.00 0.1064 0.1008 0.952 0.896 0.84 0.784 0.728 0.672 0.616 0.560 0.504 0.448 0.392 0.336 0.280 0.224 0.168 0.112 0.056 len); }|||#include <iostream.h> void main() { double X[21] = {0.00 y sumxy; sumx=0; sumy=0; sumxy=0; for (i=0;i<len;i++) { sumx+=x[i]; sumy+=y[i]; sumxy+=x[i]*y[i]; } return (sumx*sumy-len*sumxy)/minroot(x sumy int len) //返回b { int i; double sumx double *y len); } double minb(double *x y sumxx; sumxy=0; sumx=0; sumy=0; sumxx=0; for (i=0;i<len;i++) { sumxy+=x[i]*y[i]; sumx+=x[i]; sumy+=y[i]; sumxx+=x[i]*x[i]; } return (sumxy*sumx-sumy*sumxx)/minroot(x sumy sumx int len) //求a { int i; double sumxy double *y sumnx; sumx=0; sumnx=0; for (i=0;i<len;i++) { sumx+=x[i]; sumnx+=x[i]*x[i]; } return sumx*sumx-n*sumnx; } double mina(double *x int len) { int i; double sumx double *y len为数据个数 double minroot(double *x y为存储数据的数组 x 最小二乘法是将离散数据线性化的一种方法嘛 用C直接套用y=bx+a中a、b的值就可以了