最小二乘法采用C語言(共6頁)_第1頁
最小二乘法采用C語言(共6頁)_第2頁
最小二乘法采用C語言(共6頁)_第3頁
最小二乘法采用C語言(共6頁)_第4頁
最小二乘法采用C語言(共6頁)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上最小二乘法C語言1.實(shí)驗(yàn)?zāi)康模哼M(jìn)一步熟悉曲線擬合的最小二乘法。掌握編程語言字符處理程序的設(shè)計(jì)和調(diào)試技術(shù)。2.實(shí)驗(yàn)要求:輸入:已知點(diǎn)的數(shù)目以及各點(diǎn)坐標(biāo) 。輸出:根據(jù)最小二乘法原理以及各點(diǎn)坐標(biāo)求出擬合曲線 。3.程序流程:(1)輸入已知點(diǎn)的個(gè)數(shù);(2)分別輸入已知點(diǎn)的X坐標(biāo);(3)分別輸入已知點(diǎn)的Y坐標(biāo);(4)通過調(diào)用函數(shù),求出擬合曲線。最小二乘法原理如下:根據(jù)一組給定的實(shí)驗(yàn)數(shù)據(jù),求出自變量x與因變量y的函數(shù)關(guān)系,只要求在給定點(diǎn)上的誤差的平方和最小.當(dāng)時(shí),即 (4.4.1)這里是線性無關(guān)的函數(shù)族,假定在上給出一組數(shù)據(jù),以及對(duì)應(yīng)的一組權(quán),這里為權(quán)系數(shù),要求使最小,其中 (4

2、.4.2)(4.4.2)中實(shí)際上是關(guān)于的多元函數(shù),求I的最小值就是求多元函數(shù)I的極值,由極值必要條件,可得(4.4.3)根據(jù)內(nèi)積定義引入相應(yīng)帶權(quán)內(nèi)積記號(hào) (4.4.4)則(4.4.3)可改寫為 這是關(guān)于參數(shù)的線性方程組,用矩陣表示為 (4.4.5)(4.4.5)稱為法方程.當(dāng)線性無關(guān),且在點(diǎn)集上至多只有n個(gè)不同零點(diǎn),則稱在X上滿足Haar條件,此時(shí)(4.4.5)的解存在唯一。記(4.4.5)的解為 從而得到最小二乘擬合曲線 (4.4.6)可以證明對(duì),有 故(4.4.6)得到的即為所求的最小二乘解.它的平方誤差為 (4.4.7)均方誤差為 在最小二乘逼近中,若取,則,表示為 (4.4.8)此時(shí)關(guān)

3、于系數(shù)的法方程(4.4.5)是病態(tài)方程,通常當(dāng)n3時(shí)都不直接取作為基。  程序流程圖:開始 輸入已知點(diǎn)個(gè)數(shù)n 輸入已知點(diǎn)的X坐標(biāo) 輸入已知點(diǎn)的Y坐標(biāo)輸出結(jié)果 程序:#include <math.h> #include <stdio.h> #include <stdlib.h> #include<malloc.h> float average(int n,float *x) int i; float av; av=0; for(i=0;i<n;i+) av+=*(x+i); av=av/n; return(av); /平方和 flo

4、at spfh(int n,float *x) int i; float a,b; a=0; for(i=0;i<n;i+) a+=(*(x+i)*(*(x+i); return(a); /和平方 float shpf(int n,float *x) int i; float a,b; a=0; for(i=0;i<n;i+) a=a+*(x+i); b=a*a/n; return(b); /兩數(shù)先相乘,再相加 float dcj(int n,float *x,float *y) int i; float a; a=0; for(i=0;i<n;i+) a+=(*(x+i)*

5、(*(y+i); return(a); /兩數(shù)先相加,再相乘 float djc(int n,float *x,float *y) int i; float a=0,b=0; for(i=0;i<n;i+) a=a+*(x+i); b=b+*(y+i); a=a*b/n; return(a); /系數(shù)a float xsa(int n,float *x,float *y) float a,b,c,d,e; a=spfh(n,x); b=shpf(n,x); c=dcj(n,x,y); d=djc(n,x,y); e=(c-d)/(a-b); /printf("%f %f %f

6、%f",a,b,c,d); return(e); float he(int n,float *y) int i; float a; a=0; for(i=0;i<n;i+) a=a+*(y+i); return(a); float xsb(int n,float *x,float *y,float a) float b,c,d; b=he(n,y); c=he(n,x); d=(b-a*c)/n; return(d); void main() int n,i; float *x,*y,a,b; printf("請(qǐng)輸入將要輸入的有效數(shù)值組數(shù)n的值:"); sc

7、anf("%d",&n); x=(float*)calloc(n,sizeof(float); if(x=NULL) printf("內(nèi)存分配失敗"); exit(1); y=(float*)calloc(n,sizeof(float); if(y=NULL) printf("內(nèi)存分配失敗"); exit(1); printf("請(qǐng)輸入x的值n"); for(i=0;i<n;i+)scanf("%f",x+i); printf("請(qǐng)輸入y的值,請(qǐng)注意與x的值一一對(duì)應(yīng):n"); for(i=0;i<n;i+)scanf("%f",y+i); for(i=0;i<n;i+) printf("x%d=%3.2f ",i,*(x+i); printf("y%d=%3.2fn",i,*(y+i); a=xsa(

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論