曲線擬合給定10個點擬合曲線復制即用c++_第1頁
曲線擬合給定10個點擬合曲線復制即用c++_第2頁
曲線擬合給定10個點擬合曲線復制即用c++_第3頁
曲線擬合給定10個點擬合曲線復制即用c++_第4頁
曲線擬合給定10個點擬合曲線復制即用c++_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、#include <iostream>#include <fstream>#include <string>#include<iomanip.h>#defineF1(t)(1+(t)*(t)*(2*(t)-3)#defineF2(t)(t)*(t)*(-2*(t)+3)#defineF3(t)(t)*(1+(t)*(t)-2)#defineF4(t)(t)*(t)*(t)-1)using namespace std;void tangent(double *y,double *dy,int n)/ 計算各個節(jié)點的切矢,采用自由端點條件/ 追趕法求

2、解三對角方程組int i;double *a,*b,*c,*d; a=new doublen;b=new doublen; c=new doublen;d=new doublen; / 追趕法計算系數(shù) for(i=1;i <n;i+) ai=1;b0=2;bn-1=2;for(i=1;i <n-1;i+) bi=4;for(i=0;i <n-1;i+) ci=1; d0=3*(y1-y0); dn-1=3*(yn-1-yn-2);for(i=1;i <n-1;i+) di=3*(yi+1-yi-1);/ 追趕法回代double *L,*U;L=new doublen;

3、U=new doublen;U0=b0; for(i=1;i <n;i+)Li=ai/Ui-1;Ui=bi-Li*ci-1;double *yy;yy=new doublen;yy0=d0;for(i=1;i <n;i+)yyi=di-Li*yyi-1; dyn-1=yyn-1/Un-1;for(i=n-2;i>=0;i-) dyi=(yyi-ci*dyi+1)/Ui; /delete a,b,c,d,L,U,yy;xa,int n)double spline(double *x,double *y,double *dy,double / 三次 Hermite 插值/ 數(shù)據(jù)點

4、 xn,yn, 切矢 dyn/ 返回 xa 處的插值數(shù)值/ 要求 x 嚴格遞增, x0 <=xa <=xn-1int i;for(i=0;i <n-1;i+)if(xa <=xi+1)break;double t = (xa-xi)/(xi+1-xi);return F1(t)*yi+F2(t)*yi+1+F3(t)*dyi+F4(t)*dyi+1;int main()doubles_ua,xa_ua;/A 類型循環(huán)變量doubles_ub,xa_ub;/B 類型循環(huán)變量doubles_uc,xa_uc; /C 類型循環(huán)變量doubles_a_result,xa_a_r

5、esult;/doubles_b_result,xa_b_result;/doubleaverage_s,average_xa;doubledy_ua4;doubledy_ub4;doubledy_uc4;doublex_ua4=0.000,0,0,0;doubley_ua4=0.0000,0,0,0;doublex_ub4=0.000,0,0,0;doubley_ub4=0.0000,0,0,0;double x_uc4=0.000,0,0,0;double y_uc4=0.0000,0,0,0;/DNA/double X10 0.000,7.000,11.197,17.910,28.649

6、,45.826,73.301,117.251,187.551,300.00;/double Y10 = 272,3008,5854,10287,18398,32204,56751,95727,151346,232604; /HCG/double X10 0.000,0.500,1.000,5.000,10.000,50.000,100.000,500.000,1000.000,5000.000;/double Y10 = 1477,1869,1920,4279,7010,28345,55156,245217,415291,1294682; /HSV-M/double X10 = 0.000,0

7、.500,0.645,0.832,1.073,1.385,1.786,2.304,2.973,3.835; /double Y10 = 349,4273,5487,7054,9072,11685,15043,19381,24984,32203;/Trepdouble X10 = 0.000,0.400,0.761,1.450,2.760,5.254,10.001,19.039,36.245,70.000; double Y10 = 988,2620,4889,9686,19423,39364,81962,152041,249416,398202; int n;/*string s_a;/ 用于

8、 a b c 段線string s_b;/ 用于 b c 段線string s_c;/ 用于 c 段線string s_avarage;/ 用于 b c 段線 求均值*/for(n=0;n<9;n+) /computing(X,Y ,n);int k_a,k_b,k_c;/ 插值函數(shù)調(diào)用,并把結(jié)果輸入到文件if(n = 0) cout<<n<<endl; for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a+n;y_uak_a = Yk_a+n;/ 給 x、y 賦初值。ofstream ofs_all("d:spline_all.

9、txt");/ 寫文件流 if(!ofs_all) return 10000;tangent(y_ua,dy_ua,4);for(xa_ua = X0;xa_ua <= X1;xa_ua += 0.01)s_ua=spline(x_ua,y_ua,dy_ua,xa_ua,4);/fprintf(ofs_all,"%f#%fn ",xa,s); ofs_all<<setw(15)<<xa_ua<<setw(15)<<s_ua<<endl;/ ofs_all.close();/ 寫入第一部分else i

10、f(n = 1)cout<<n<<endl; for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a; y_uak_a = Yk_a;/ 給 x、y 賦初值。 tangent(y_ua,dy_ua,4);ofstream ofs_all("d:spline_all.txt",ios_base:app);/ 寫文件流 if(!ofs_all) return 10000;for(xa_ua = X1;xa_ua <= X2;xa_ua += 0.01) s_ua=spline(x_ua,y_ua,dy_ua,xa_ua,4);

11、 xa_a_result = xa_ua;s_a_result= s_ua;for(k_b=0;k_b<4;k_b+)x_ubk_b = Xk_b+1;y_ubk_b = Yk_b+1; tangent(y_ub,dy_ub,4);/for(xa_ub = X1;xa_ub <= X2;xa_ub += 0.01) / xa_ub = xa_ua-0.01;s_ub=spline(x_ub,y_ub,dy_ub,xa_ua,4); average_s = (s_a_result+s_ub)/2; average_xa = (xa_a_result+xa_ub)/2;ofs_all&

12、lt;<setw(15)<<average_xa<<setw(15)<<average_s<<endl;/ofs_all.close();/C x2x3else if(n = 2) cout<<n<<endl;for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a+n-2;y_uak_a = Yk_a+n-2;/ 給 x、y 賦初值。寫文件流tangent(y_ua,dy_ua,4);ofstream ofs_all("d:spline_all.txt",ios_base:a

13、pp);/ if(!ofs_all) return 10000;for(xa_ua = X2;xa_ua <= X3;xa_ua += 0.01)s_ua=spline(x_ua,y_ua,dy_ua,xa_ua,4); xa_a_result = xa_ua;s_a_result = s_ua;/bfor(k_b=0;k_b<4;k_b+)x_ubk_b = Xk_b+n-1; y_ubk_b = Yk_b+n-1;tangent(y_ub,dy_ub,4);xa_ub = xa_ua-0.01;xa_uc = xa_ub;s_ub=spline(x_ub,y_ub,dy_ub,

14、xa_ua,4); /average_s = (s_a_result+s_ub)/ 2; /average_xa = (xa_a_result+xa_ub)/ 2;/cfor(k_c=0;k_c<4;k_c+)x_uck_c = Xk_c+n;y_uck_c = Yk_c+n;tangent(y_uc,dy_uc,4); s_uc=spline(x_uc,y_uc,dy_uc,xa_ua,4); average_s = (s_a_result+s_ub+s_uc)/3; average_xa = (xa_a_result+xa_ub+xa_uc)/3;ofs_all<<set

15、w(15)<<average_xa<<setw(15)<<average_s<<endl;/ofs_all.close();else if(n = 3)cout<<n<<endl;for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a+n-2;y_uak_a = Yk_a+n-2;/ 給 x、y 賦初值。寫文件流tangent(y_ua,dy_ua,4);ofstream ofs_all("d:spline_all.txt",ios_base:app);/ if(!ofs_all)

16、 return 10000;for(xa_ua = X3;xa_ua <= X4;xa_ua += 0.01)s_ua=spline(x_ua,y_ua,dy_ua,xa_ua,4); xa_a_result = xa_ua;s_a_result = s_ua;/bfor(k_b=0;k_b<4;k_b+)x_ubk_b = Xk_b+n-1;y_ubk_b = Yk_b+n-1;tangent(y_ub,dy_ub,4);xa_ub = xa_ua-0.01;xa_uc = xa_ub;s_ub=spline(x_ub,y_ub,dy_ub,xa_ua,4); /average_

17、s = (s_a_result+s_ub)/ 2; /average_xa = (xa_a_result+xa_ub)/ 2;/cfor(k_c=0;k_c<4;k_c+)x_uck_c = Xk_c+n;y_uck_c = Yk_c+n;tangent(y_uc,dy_uc,4); s_uc=spline(x_uc,y_uc,dy_uc,xa_ua,4); average_s = (s_a_result+s_ub+s_uc)/3; average_xa = (xa_a_result+xa_ub+xa_uc)/3; ofs_all<<setw(15)<<avera

18、ge_xa<<setw(15)<<average_s<<endl;/ofs_all.close();else if(n = 4)cout<<n<<endl;for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a+n-2;y_uak_a = Yk_a+n-2;/ 給 x、y 賦初值。tangent(y_ua,dy_ua,4);ofstream ofs_all("d:spline_all.txt",ios_base:app);/ 寫文件流 if(!ofs_all) return 10000;for

19、(xa_ua = X4;xa_ua <= X5;xa_ua += 0.01)s_ua=spline(x_ua,y_ua,dy_ua,xa_ua,4);xa_a_result = xa_ua;s_a_result = s_ua;/bfor(k_b=0;k_b<4;k_b+)x_ubk_b = Xk_b+n-1;y_ubk_b = Yk_b+n-1;tangent(y_ub,dy_ub,4);xa_ub = xa_ua-0.01;xa_uc = xa_ub;s_ub=spline(x_ub,y_ub,dy_ub,xa_ua,4);/average_s = (s_a_result+s_u

20、b)/ 2;/average_xa = (xa_a_result+xa_ub)/ 2;/cfor(k_c=0;k_c<4;k_c+)x_uck_c = Xk_c+n;y_uck_c = Yk_c+n;tangent(y_uc,dy_uc,4); s_uc=spline(x_uc,y_uc,dy_uc,xa_ua,4); average_s = (s_a_result+s_ub+s_uc)/3;average_xa = (xa_a_result+xa_ub+xa_uc)/3;ofs_all<<setw(15)<<average_xa<<setw(15)&

21、lt;<average_s<<endl;/ofs_all.close();else if(n = 5)cout<<n<<endl;for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a+n-2;y_uak_a = Yk_a+n-2;/ 給 x、y 賦初值。tangent(y_ua,dy_ua,4);ofstream ofs_all("d:spline_all.txt",ios_base:app);/ 寫文件流 if(!ofs_all) return 10000;for(xa_ua = X5;xa_ua <

22、= X6;xa_ua += 0.01)s_ua=spline(x_ua,y_ua,dy_ua,xa_ua,4);xa_a_result = xa_ua;s_a_result = s_ua;/bfor(k_b=0;k_b<4;k_b+)x_ubk_b = Xk_b+n-1;y_ubk_b = Yk_b+n-1;tangent(y_ub,dy_ub,4);xa_ub = xa_ua-0.01;xa_uc = xa_ub;s_ub=spline(x_ub,y_ub,dy_ub,xa_ua,4);/average_s = (s_a_result+s_ub)/ 2;/average_xa = (x

23、a_a_result+xa_ub)/ 2;/cfor(k_c=0;k_c<4;k_c+)x_uck_c = Xk_c+n;y_uck_c = Yk_c+n;tangent(y_uc,dy_uc,4); s_uc=spline(x_uc,y_uc,dy_uc,xa_ua,4); average_s = (s_a_result+s_ub+s_uc)/3;average_xa = (xa_a_result+xa_ub+xa_uc)/3;ofs_all<<setw(15)<<average_xa<<setw(15)<<average_s<&l

24、t;endl;/ofs_all.close();else if(n = 6)cout<<n<<endl;for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a+n-2;y_uak_a = Yk_a+n-2;/ 給 x、y 賦初值。tangent(y_ua,dy_ua,4);ofstream ofs_all("d:spline_all.txt",ios_base:app);/ 寫文件流 if(!ofs_all) return 10000;for(xa_ua = X6;xa_ua <= X7;xa_ua += 0.01)s_u

25、a=spline(x_ua,y_ua,dy_ua,xa_ua,4);xa_a_result = xa_ua;s_a_result = s_ua;/bfor(k_b=0;k_b<4;k_b+)x_ubk_b = Xk_b+n-1;y_ubk_b = Yk_b+n-1;tangent(y_ub,dy_ub,4);xa_ub = xa_ua-0.01;xa_uc = xa_ub;s_ub=spline(x_ub,y_ub,dy_ub,xa_ua,4);/average_s = (s_a_result+s_ub)/ 2;/average_xa = (xa_a_result+xa_ub)/ 2;/

26、cfor(k_c=0;k_c<4;k_c+)x_uck_c = Xk_c+n;y_uck_c = Yk_c+n;tangent(y_uc,dy_uc,4); s_uc=spline(x_uc,y_uc,dy_uc,xa_ua,4); average_s = (s_a_result+s_ub+s_uc)/3;average_xa = (xa_a_result+xa_ub+xa_uc)/3;ofs_all<<setw(15)<<average_xa<<setw(15)<<average_s<<endl;/ofs_all.close(

27、);else if(n = 7)cout<<n<<endl;for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a+n-2;y_uak_a = Yk_a+n-2;/ 給 x、y 賦初值。tangent(y_ua,dy_ua,4);ofstream ofs_all("d:spline_all.txt",ios_base:app);/ 寫文件流 if(!ofs_all) return 10000;for(xa_ua = X7;xa_ua <= X8;xa_ua += 0.01)s_ua=spline(x_ua,y_ua,dy_

28、ua,xa_ua,4);xa_a_result = xa_ua;s_a_result= s_ua;for(k_b=0;k_b<4;k_b+)x_ubk_b = Xk_b+n-1; y_ubk_b = Yk_b+n-1;tangent(y_ub,dy_ub,4);/for(xa_ub = X1;xa_ub <= X2;xa_ub += 0.01)/xa_ub = xa_ua-0.01; s_ub=spline(x_ub,y_ub,dy_ub,xa_ua,4);average_s = (s_a_result+s_ub)/2;average_xa = (xa_a_result+xa_ub

29、)/2;ofs_all<<setw(15)<<average_xa<<setw(15)<<average_s<<endl;/ofs_all.close();else if(n =8)cout<<n<<endl;for(k_a=0;k_a<4;k_a+)x_uak_a = Xk_a+n-2;y_uak_a = Yk_a+n-2;/ 給 x、y 賦初值。ofstream ofs_all("d:spline_all.txt",ios_base:app);if(!ofs_all) return 10000;tangent(

溫馨提示

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

評論

0/150

提交評論