最小二乘法程序_第1頁
最小二乘法程序_第2頁
最小二乘法程序_第3頁
最小二乘法程序_第4頁
最小二乘法程序_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、最小二乘法程序include#ineludevconio.hinclude#inelude#defineN5/N個點#defineT3/T次擬合#defineW1權(quán)函數(shù)#definePRECISION0.00001floatpow_refloata,intn)inti;if(n=0)retum(1);floatres=a;for(i=1;in;i+)res*=a;retum(res);voidmutiple(floataN,floatb|T+1ffloatcQT+1)floatres=0;inti,j,k;for(i=0;iT+1;i+)for(j=0;jT+1;j+)res=0;for(k=

2、0;kN;k+)res+=aik*bkj;cij=res;voidmatrix_trans(floataT+1,floatbN)inti,j;for(i=0;iN;i+)for(j=0;jT+1;j+)bji=aiUJ;voidinit(floatx_y2,intn)inti;printf(“請輸入(1個己知點:n”,N);for(i=0;in;i+)printf(x%dy%d):“,i,i);scanf(H%f%f”,&x_yi0,&x_yi1);voidget_A(floatmatrix_AT+1,floatx_y2,intn)inti,j;for(i=0;iN;i+)forO=0;jT+

3、1;j+)matrix_Aij=W*pow_n(x_yi0,j);voidprint_array(floatarrayT+1,intn)inti,j;for(i=0;in;i+)forO=0;jT+1;j+)printf(%-g,arrayiO);printfCAn);voidconvert(floatarguT+2,intn)inti,j,k,p,t;floatrate,temp;for(i=1;in;i+)for(j=i;jn;j+)if(argui-1i-1=0)for(p=i;pn;p+)if(argupi-1!=0)break;if(p=n)printfC方程組無解!n“);exit

4、(O);for(t=0;tn+1;t+)temp=argui-1t;argui-1t=argupt;argupt=temp;rate=arguji-1/argui-1i-1;for(k=i-1;k=0;i-)temp=arguin;for(j=n-1;ji;j-)temp-=arguij*rootj;rooti=temp/arguii;voidget_y(floattrans_AN,floatx_y2,floaty,intn)inti,j;floattemp;for(i=0;in;i+)temp=0;for(j=0;jN;j+)temp+=trans_Aijrx_yj;yi=temp;void

5、cons_formula(floatcoef_AT+1,floaty,floatcoef_formT+2)inti,j;for(i=0;iT+1;i+)for(j=0;jT+2;j+)if(j=T+1)coef_formij=yi;elsecoef_formij=coef_Aij;voidprint_root(floata,intn)inti,j;printf(%d個點的(1次擬合的多項式系數(shù)為:nu,N,T);for(i=0;in;i+)printf(a%d=%g,i+1,ai);printf(n);printf(擬合曲線方程為:ny(x)=%g,aO);for(i=1;in;i+)prin

6、tf(+%g“,ai);for(j=0;j2007-4-1919:23:57一級(初級)vranknumuser11004038987254780101526752jiangxc20040vContent2007-4-1919:26:11一級(初級)vranknumuser1v/anknum1004039040654780101526752jiangxc20040vContent!CDATAincludevoidmain()intnum,i;floatx,y,l,m,n,p,a,b;i=1;l=0.0;m=0.0;n=0.0;p=0.0;printf(請輸入你想計算的x,y的個數(shù):“);sca

7、nf(%d,&num);if(num=1)while(i=num);printf(i#輸入x的值”);scant(“l(fā)f”,&x);printf(請輸入y的值”);scant(“l(fā)f”,&y);l+=x;m+=y;n+=x*y;p+=x*x;i+;a=(numF-l*m)/(num*p-ri);b=(p*m-n*l)/(num*p-l*l);printf(”最小二乘法所算得的斜率和截距分別為彳和fn”ab);elseprintfCmun輸入有誤!);ftinclude#includellllllllllllllllllllllllllllllllllllllllllllllllllllllll

8、llllllllllll/矩陣結(jié)構(gòu)體structMatrixintm,n;/m為行數(shù),n為列數(shù)double林pm;指向矩陣二維數(shù)組的指針;初始化矩陣mt,并置矩陣的行為m,列為nvoidInitMatrix(structMatrix*mt,intm,intn)irrti;指定矩陣的行和列mt-n=n;為矩陣分配內(nèi)存mt-pm=newdouble*m;for(i=0;ipmi=newdoublen;用0初始化矩陣mt,并置矩陣的行為m,列為nvoidInitMatrixO(structMatrix*mt,intm,intn)InitMatrix(mt,m,n);for(i=0;im;i+)for

9、(j=0;jpmij=0.0;銷毀矩陣mtvoidDestroyMatrix(structMatrix*mt)inti;釋放矩陣內(nèi)存for(i=0;im;i+)deletemt-pmi;deletemt-pm;矩陣相乘mt3=4ntl*mt2/成功返回1,失敗返回0intMatrixMul(Matrix*mtl,Matrix*mt2,Matrix*mt3)inti,j,k;doubles;檢査行列號是否匹配if(mtl-n!=mt2-m|mtl-m!Ft3-m|mt2-n!=mt3-ii)return0;for(i=0;im;i+)for(j=0;jn;j+)s=0.0;for(k=0;kn;

10、k+)s=s*hntl-pmik*mt2-pmkj;mt3-pmij=s;return1;矩陣Wimt2=T(mtl)/成功返回1,失敗返回0intMatrixTran(Matrix*mtl,Matrix*mt2)inti,j;檢査行列號是否匹配if(mtl-m!=mt2-n|mtl-n!nt2-m)return0;for(i=0;im;i+)for(j=0;jn;j+)mt2-pmji=mtl-pmij;return1;控制臺顯示矩陣mtvoidConsoleShowMatrix(Matrix*mt)inti,j;for(i=0;im;i+)printf(n);for(j=0;jn;j+)p

11、rintf(%2.4fmt-pmij);printf(n);llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll/Guass列主元素消元法求解方程Ax=b,a=(A,b)intGuassl(double*a,double*x,intn)inti,j,k,numl,*h,t;double*1,max;l=newdoublen;h=newintn;for(i=0;in;i+)hi=i;/行標for(i=l;in;i+)max=fabs(ahi-1iT);numl=i-l;列元的最大值for(j=i;jmax)num

12、l=hj;max=fabs(ahji-1);if(maxi-l)t=hi;hi=hnuml;hnuml=t;for(j=i;jn;j+)lj=ahji-l/ahi-li-1;for(j=i;jn;j+)for(k=i;k=0;i)xi=ahin;for(j=i+l;jn;j+)xi=xi-ahiJj*xj;Xi=xi/ahii;清除臨時數(shù)組內(nèi)存delete1;deleteh;return1;Illlllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll/最小二乘法求解矩陣Ax=bintMinMul(MatrixA,Mat

13、rixb,double*x)inti,j;if(b.n!=l)return0;if(Am!=bm)return0;MatrixTranA;/定義A的轉(zhuǎn)置InitMatrixO(ATranA,A.n,A.m);MatrixTran(&A,&TranA);MatrixTranA_A;定義A的轉(zhuǎn)置與A的乘積矩陣InitMatrixO(&TranA_A,A.n,A.n);MatrixMul(ATranA,&A,&TranA_A);/A的轉(zhuǎn)置與A的乘積MatrixTranA_b;定義A的轉(zhuǎn)置與b的乘積矩陣InitMatrixO(&TranA_b,A.n,1);MatrixMul(&TranA,&b,&T

14、ranA_b);/A的轉(zhuǎn)置與b的乘積DestroyMatrix(&TranA);釋放A的轉(zhuǎn)置的內(nèi)存MatrixTranA_A_b;定義增廣矩陣InitMatrixO(&TranA_A_b,TranA_A.m,TranA_A.m+1);增廣矩陣賦值for(i=0;iTranA_A_bm;i+)for(j=0;jTranA_A_b.m;j+)TranA_A_bpmij=TranA_A.pmij;TranA_A_b.pmiTranA_A_b.m=TranA_b.pmi0;DestroyMatrix(&TranA_A);DestroyMatrix(&TranA_b);/Guass列主消元法求麻Guassl(TranApm,x,TranA_A_b.m);DestroyMatr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論